我在Linux上使用带有CUDA 5的tesla k20和计算能力35.使用简单的子内核调用它会产生编译错误:Unresolved extern function cudaLaunchDevice
我的命令行如下:
nvcc --compile -G -O0 -g -gencode arch=compute_35 , code=sm_35 -x cu -o fill.cu fill.o
我在lib64中看到cudadevrt.a
..我们需要添加它还是要做什么来解决它?没有子内核调用一切正常。
答案 0 :(得分:11)
必须在启用可重定位设备代码的情况下显式编译,并链接设备运行时库以使用动态并行。因此,您的编译命令必须包含--relocatable-device-code true
,并且链接命令(您尚未向我们展示)应包括-lcudadevrt
。
动态并行编程指南pdf的“TOOLKIT SUPPORT FOR DYNAMIC PARALLELISM”部分详细介绍了此过程,可用here。
答案 1 :(得分:5)
也许我有点偏离主题,但我想提一下,我在Windows / Visual Studio 2010下遇到了同样的问题,并且我已经使用talonmies的最后评论解决了这个问题。
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
我希望这些信息有用。