error when get vector value in thrust -


in thrust example, there code expand.cu. when want value, has shown error error: expression must modifiable lvalue in line sx = d_output;

where wrong part? code this

#include <thrust/device_vector.h> #include <thrust/reduce.h> #include <thrust/gather.h> #include <thrust/scan.h> #include <thrust/fill.h> #include <thrust/copy.h>  #include <iterator> #include <iostream>   template <typename inputiterator1,           typename inputiterator2,           typename outputiterator>  outputiterator expand(inputiterator1 first1,                       inputiterator1 last1,                       inputiterator2 first2,                       outputiterator output) {   typedef typename thrust::iterator_difference<inputiterator1>::type difference_type;    difference_type input_size  = thrust::distance(first1, last1);   difference_type output_size = thrust::reduce(first1, last1);    // scan counts obtain output offsets each input element   thrust::device_vector<difference_type> output_offsets(input_size, 0);   thrust::exclusive_scan(first1, last1, output_offsets.begin());     // scatter nonzero counts corresponding output positions   thrust::device_vector<difference_type> output_indices(output_size, 0);   thrust::scatter_if     (thrust::counting_iterator<difference_type>(0),      thrust::counting_iterator<difference_type>(input_size),      output_offsets.begin(),      first1,      output_indices.begin());    // compute max-scan on output indices, filling in holes   thrust::inclusive_scan     (output_indices.begin(),      output_indices.end(),      output_indices.begin(),      thrust::maximum<difference_type>());    // gather input values according index array (output = first2[output_indices])   outputiterator output_end = output; thrust::advance(output_end, output_size);   thrust::gather(output_indices.begin(),                  output_indices.end(),                  first2,                  output);    // return output + output_size   thrust::advance(output, output_size);   return output; }   int main(void) {   int counts[] = {3,5,2,0,1,3,4,2,4};   int values[] = {1,2,3,4,5,6,7,8,9};    size_t input_size  = sizeof(counts) / sizeof(int);   size_t output_size = thrust::reduce(counts, counts + input_size);    // copy inputs device   thrust::device_vector<int> d_counts(counts, counts + input_size);   thrust::device_vector<int> d_values(values, values + input_size);   thrust::device_vector<int> d_output(output_size);    // expand values according counts   expand(d_counts.begin(), d_counts.end(),          d_values.begin(),          d_output.begin());     std::cout << "d_output: " ;   for(int i=0; i<output_size; i++)     std::cout << d_output[i] << " , ";    //d::cout << d_output[i] << " , ";     thrust::device_vector<int> sx[output_size];   //sx = d_output;   thrust::copy(d_output.begin() , d_output.end(), sx.begin());     return 0; } 

it should device vector of length output_size as

thrust::device_vector<int> sx(output_size); 

using [] means array of device vectors.


Comments