我在带有CUDA5的Linux上使用计算能力为35的tesla k20。通过一个简单的子内核调用,它给出了一个编译错误: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 ..我们需要添加它吗?或者可以做些什么来解决它?没有子内核调用,一切都很好。
发布于 2012-12-15 16:20:26
您必须显式编译时启用可重定位设备代码,并链接设备运行时库才能使用动态并行。因此,您的编译命令必须包含--relocatable-device-code true,而链接命令(您尚未向我们展示)应包含-lcudadevrt。
这个过程在DYNAMIC Parallelism Programming Guide pdf,available here的"TOOLKIT SUPPORT FOR Dynamic PARALLELISM“一节中有详细描述。
发布于 2012-12-19 20:02:18
也许我有点跑题了,但我想提一下,我在Windows/Visual Studio2010下也遇到了同样的问题,我已经用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我希望这些信息是有用的。
https://stackoverflow.com/questions/13888804
复制相似问题