__global__ void foo()
{
// do stuff
}
__global__ void boo()
{
foo<<<m, n>>>();
}
但是我遇到了错误 "kernel launch from __device__ or __global__ functions requires separate compilation mode"。
我尝试通过谷歌搜索来找到答案,看到一些结果提到了 "dynamic-parallelism",它需要计算能力为 3 或以上的设备(我的 GTX 750 Ti 计算能力为 5)。同时,我还发现需要打开 "rdc" 标志。虽然这样可以消除错误,但无论如何编译都会失败(即使我注释掉了所有内容)。
那么,我该如何实现我的目标或者可能出现了什么问题?(使用 cuda 11.0)我还在项目属性中的链接器输入中添加了 "cudadevrt.lib;cudart.lib;"。
编辑:
当 rdc 设置为 true 时,它给出的错误如下:
错误 MSB3721:命令 ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin\nvcc.exe" -dlink -o "x64\Debug\crimson cuda.device-link.obj" -Xcompiler "/EHsc /W3 /nologo /Od /Zi /Fdx64\Debug\vc142.pdb /RTC1 /MDd " -L"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin/crt" -L"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\lib\x64" cudadevrt.lib cudart.lib cudart_static.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib -gencode=arch=compute_50,code=sm_50 -G --machine 64 x64\Debug\CrimsonNet.cu.obj x64\Debug\kernel.cu.obj" 已退出,代码为 1。
编辑 2:
我继续调查,发现问题出现在链接文件时,但我不完全明白在使用 rdc 时它是如何工作的。