【发布时间】:2013-08-28 10:57:21
【问题描述】:
我只想将设备函数作为主机函数的参数传递,当然,主机函数可以使用这个设备端函数启动一些内核。
我尝试了通常的 C++ 方式(通过指针/引用传递),CUDA 调试器告诉我内核无法启动。
更新:
我想做的是:
__host__ void hostfunction(int a, int (*DeviceFunction)(int))
{
/...do something.../
somekernel<<<blocks, threads>>>(int * in, DeviceFunction);
}
并使用以下命令启动主机:
hostfunction(x, &SomeDeviceFunctionTemplate<int>);
【问题讨论】:
-
你的问题并不完全清楚,至少对我来说是这样。如果您可以发布一个您尝试过的示例,其中内核未启动,那可能会有所帮助。
-
由于
__host__函数不能获取__device__函数的地址,你基本上需要编写一个简短的__global__函数来获取感兴趣的__device__函数的地址,并且然后将其存储到内存中。然后,您的__host__函数可以从内存中读取该函数指针,然后将其传递给somekernel。
标签: pointers reference cuda nvidia