当我运行此代码时,编译器说我正在从设备调用主机功能。我不太明白。
__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;
}
答案 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]));
}