2011-12-28 3 views
3

Я использую функцию разбивки тяги для разделения массива на четные и нечетные числа. Однако, когда я пытаюсь отобразить вектор устройства, он показывает случайные значения. Пожалуйста, дайте мне знать, где ошибка. Думаю, я все сделал правильно.thrust :: device_reference не может использоваться с printf?

#include<stdio.h> 
#include <thrust/host_vector.h> 
#include <thrust/device_vector.h> 
#include<thrust/partition.h> 

struct is_even 
    { 
     //const int toCom; 
     //is_even(int val):toCom(val){} 
    __device__ 
    bool operator()(const int &x) 
    { 
     return x%2; 
    } 
    }; 

void main(){ 


    thrust::host_vector<int> H(6); 
    for(int i =0 ; i<H.size();i++){ 
     H[i] = i+1; 
    } 
    thrust::device_vector<int> D = H; 
    thrust::partition(D.begin(),D.end(),is_even()); 
    for(int i =0 ;i< D.size();i++){ 
     printf("%d,",D[i]); 
    } 


    getchar(); 

} 

ответ

5

Вы не можете отправить thrust::device_reference (то есть, результат D[i]) через многоточие printf «s, потому что это не тип POD. См. documentation. В этом коде будет выдано предупреждение о компиляторе.

В ролях к int первым:

for(int i = 0; i < D.size(); ++i) 
{ 
    printf("%d,", (int) D[i]); 
} 
+0

Так как переехал в GitHub: [ссылка] (https://thrust.github.io/doc/classthrust_1_1device__reference.html). –