我试着做这样的事情:
__global__ void foo()
{
// do stuff
}
__global__ void boo()
{
foo<<<m, n>>>();
}但我得到的错误是“从__device__或__global__函数启动内核需要单独的编译模式”。
我试着谷歌搜索一个答案,我看到了一些关于“动态并行”的结果,它说它需要我拥有的计算能力3或更高(GTX 750 Ti计算能力5)。
我还需要打开"rdc“标志,尽管它确实会导致错误消失,但无论如何也会导致编译失败(即使我注释了所有内容)。
,那么我怎样才能实现我的目标,或者问题可能是什么?
(使用cuda 11.0)
我还将"cudadevrt.lib;cudart.lib;“添加到项目属性中的链接器中。
编辑:
当rdc设置为true时它会产生的错误:
错误MSB3721命令“C:\Program\NVIDIA GPU计算”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 \NVIDIA GPU计算工具包\CUDA\v11.0\bin/crt”-L"C:\Program \NVIDIA计算工具包\CUDA\v11.0\lib\x64“cudadevrt.lib cudart.lib cudart_static.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib winspool.lib uuid.lib 32.lib 32.lib 32.lib oleauto32.lib uuid.lib odbc32.lib odbcc32.lib -gencode=arch=compute_50,code=sm_50 -G --机器64 x64\Debug\CrimsonNet.cu.obj x64\Debug\kernel.cu.obj“与代码1一起退出。
编辑2:我继续调查,问题似乎发生在链接文件时,我不完全理解它是如何使用rdc的。
发布于 2020-10-26 20:33:30
我仍然不知道是什么导致了这个问题,但是在删除了与Nvidia相关的所有内容之后,除了驱动程序,然后通过CUDA安装程序重新安装了所有的东西,错误消失了,现在运行良好。
发布于 2020-10-26 03:27:40
使用MS VS 2019和CUDA 11.0,以下步骤允许我创建一个动态并行(CDP)示例:
cudadevrt.lib添加到附加依赖项备注:
compute_35,sm_35)。nvcc生成的实际输出。cudadevrt.lib是不必要的,因为它已经包含在项目中。对于其他/旧版本,这可能是必要的。如果你仍然有困难,我建议你增加详细,以更好地了解确切的问题。您还应该尝试上面列出的步骤,以确保您理解它们(即从一个新项目开始)。如果仍然有问题,请在增加详细内容后,在实际代码以及控制台编译输出中发布一个新问题。
https://stackoverflow.com/questions/64516177
复制相似问题