thrust :: device_reference不能和printf一起使用?

时间:2011-12-28 16:54:12

标签: cuda printf nvidia thrust

我正在使用推力分区功能将数组划分为偶数和奇数。但是,当我尝试显示设备矢量时,它会显示随机值。请告诉我错误在哪里。我想我做的一切都是正确的。

#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();

}

1 个答案:

答案 0 :(得分:5)

您无法通过thrust::device_reference的省略号发送D[i](即printf的结果),因为它不是POD类型。请参阅documentation。您的代码将生成编译器警告此效果。

首先投放到int

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