【发布时间】:2021-02-07 11:21:51
【问题描述】:
我正在尝试做类似的事情:
__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 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 时它是如何工作的。
【问题讨论】:
-
你能发布你看到的编译错误吗?
-
@cwharris 除了我已经写过的内容外,它只是说 nvcc 以代码 1 退出
-
研究任何使用 CUDA 动态并行的 CUDA 示例代码及其关联的项目文件,例如 cdpSimplePrint
-
@RobertCrovella 看来我做得对,我继续调查,似乎问题出在链接文件时,我不完全理解使用 rdc 时它是如何工作的
标签: c++ cuda visual-studio-2019