2016-07-22 5 views
0

В примере тяги есть код expand.cu. Но когда я хочу, чтобы получить значение, показало ошибку, как этот error: expression must be a modifiable lvalue в линии SX = d_output;ошибка при получении значения вектора в тяге

Где неправильная часть? код, как это

#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 the counts to obtain output offsets for each input element 
    thrust::device_vector<difference_type> output_offsets(input_size, 0); 
    thrust::exclusive_scan(first1, last1, output_offsets.begin()); 

    // scatter the nonzero counts into their 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 over the output indices, filling in the holes 
    thrust::inclusive_scan 
    (output_indices.begin(), 
    output_indices.end(), 
    output_indices.begin(), 
    thrust::maximum<difference_type>()); 

    // gather input values according to 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 to 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 to 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; 
} 

ответ

0

Он должен быть вектором устройства длины, как output_size

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

Использование [] означает массив векторов устройств.

Смежные вопросы