编译包含动态并行性的代码失败
我正在使用CUDA 5.5和计算能力为3.5的NVDIA GeForce GTX 780进行动态并行编程。 我正在调用内核函数内的一个内核函数,但它给了我一个错误:
错误:仅在compute_35体系结构或更高版本上允许从__global__函数(“kernel_5”)调用__global__函数(“kernel_6”)
我究竟做错了什么?
你可以做这样的事情
nvcc -arch=sm_35 -rdc=true simple1.cu -o simple1 -lcudadevrt
要么
如果你有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
cuda编程指南也对此进行了解释
从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
您需要让nvcc为您的设备生成CC 3.5代码。 这可以通过将此选项添加到nvcc命令行来完成。
-gencode arch=compute_35,code=sm_35
有关更多详细信息,请参阅动态并行性的CUDA示例。 它们包含所有支持的操作系统的命令行选项和项目设置。
http://docs.nvidia.com/cuda/cuda-samples/index.html#simple-quicksort--cuda-dynamic-parallelism-
链接地址: http://www.djcxy.com/p/38479.html上一篇: Compiling code containing dynamic parallelism fails
下一篇: CUDA installation: could not find compatible graphics hardware