编译包含动态并行性的代码失败

use*_*500 7 c++ parallel-processing cuda dynamic-execution

我正在使用CUDA 5.5和NVDIA GeForce GTX 780进行动态并行编程,其计算能力为3.5.我在内核函数中调用内核函数,但它给了我一个错误:

错误:只能在compute_35架构或更高版本上调用__global__函数("kernel_5")调用__global__函数("kernel_6")

我究竟做错了什么?

Sag*_*uti 11

你可以做这样的事情

nvcc -arch=sm_35 -rdc=true simple1.cu -o simple1 -lcudadevrt
Run Code Online (Sandbox Code Playgroud)

要么

如果你有2个文件simple1.cu和test.c那么你可以做如下的事情.这称为单独编译.

nvcc -arch=sm_35 -dc simple1.cu 
nvcc -arch=sm_35 -dlink simple1.o -o link.o -lcudadevrt
g++ -c test.c 
g++ link.o simple1.o test.o -o simple -L/usr/local/cuda/lib64/ -lcudart
Run Code Online (Sandbox Code Playgroud)

cuda编程指南中也对此进行了解释


Jac*_*ern 5

从Visual Studio 2010:

1) View -> Property Pages
2) Configuration Properties -> CUDA C/C++ -> Common -> Generate Relocatable Device Code -> Yes (-rdc=true)
3) Configuration Properties -> CUDA C/C++ -> Device -> Code Generation -> compute_35,sm_35
4) Configuration Properties -> Linker -> Input -> Additional Dependencies -> cudadevrt.lib
Run Code Online (Sandbox Code Playgroud)


kan*_*yin 4

您需要让 nvcc 为您的设备生成 CC 3.5 代码。这可以通过将此选项添加到 nvcc 命令行来完成。

 -gencode arch=compute_35,code=sm_35
Run Code Online (Sandbox Code Playgroud)

您可以找到有关动态并行性的 CUDA 示例以了解更多详细信息。它们包含所有支持的操作系统的命令行选项和项目设置。

http://docs.nvidia.com/cuda/cuda-samples/index.html#simple-quicksort--cuda-dynamic-parallelism-

  • 要使用动态并行性,还需要`--relocatable-device-code=true`或短的`-rdc`。另外,为了防止进一步的错误,不要忘记链接 cudadevrt 库。 (7认同)