如何在cuda内核中调用推力函数

时间:2013-07-23 15:17:43

标签: cuda thrust

当我运行此代码时,编译器说我正在从设备调用主机功能。我不太明白。

   __global__ void kernel(thrust::device_vector<float*> d_V) {

       float *var = d_V[0];
   }

   int main() {

      thrust::host_vector<float*> V;
      thrust::host_vector<float*> d_V;

      float f[10];
      for (int i = 0; i < 10; i++) {
          f[i] = i;
      }
      V.push_back(f);
      d_V = V;
      kernel<<<1, 1>>>(d_V);

      return 0;     
   }

1 个答案:

答案 0 :(得分:3)

推力函数/方法设计用于主机(CPU)端。它们不能在CUDA内核中的设备(GPU)端调用。

您在代码中演示的内容实际上是将一些数据传递给内核。数据可以由内核参数列表中推力容器以外的原始指针引用。

__global__ void kernel(float* p)
{
   float *var = p;
}

int main()
{
    thrust::device_vector<float> d_v(
        thrust::make_counting_iterator((float)0),
        thrust::make_counting_iterator((float)0)+10);
    kernel<<<1,1>>>(thrust::raw_pointer_cast(&d_v[0])); 
}