cuda 5.0动态并行错误:ptxas致命。未解析的外部函数';cudaLaunchDevice
我在使用CUDA 5的Linux上使用计算能力为35的特斯拉k20。通过一个简单的子内核调用,它会给出一个编译错误:cuda 5.0动态并行错误:ptxas致命。未解析的外部函数';cudaLaunchDevice,cuda,parallel-processing,gpu,Cuda,Parallel Processing,Gpu,我在使用CUDA 5的Linux上使用计算能力为35的特斯拉k20。通过一个简单的子内核调用,它会给出一个编译错误:未解析的外部函数cudaLaunchDevice 我的命令行如下所示: nvcc --compile -G -O0 -g -gencode arch=compute_35 , code=sm_35 -x cu -o fill.cu fill.o 我在lib64中看到了cudadevrt.a。。我们是否需要添加它,或者可以做些什么来解决它?没有子内核调用,一切正常。您必须在启用可重
未解析的外部函数cudaLaunchDevice
我的命令行如下所示:
nvcc --compile -G -O0 -g -gencode arch=compute_35 , code=sm_35 -x cu -o fill.cu fill.o
我在lib64中看到了
cudadevrt.a
。。我们是否需要添加它,或者可以做些什么来解决它?没有子内核调用,一切正常。您必须在启用可重定位设备代码的情况下显式编译,并链接设备运行库,以便使用动态并行性。因此,编译命令必须包括--relocatable device code true
,链接命令(您没有向我们展示)应该包括-lcudadevrt
这个过程在《动态并行编程指南pdf》的“工具包对动态并行的支持”一节中有详细描述。也许我有点离题了,但是我想提到的是,我在Windows/Visual Studio 2010下也遇到了同样的问题,我已经通过Talonmes的最后一条评论在几个步骤中解决了这个问题
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
我希望这些信息是有用的 我已经在EclipseCudaNVCC链接器库中添加了该库,但仍然出现错误。现在命令行看起来是nvcc--compile-G-O0-G-gencode arch=compute_35,code=sm_35-xcu-o“fill.o”。/fill.cu-lcudadevrt我尝试了库路径和将cudadevrt库复制到项目文件中。仍然存在错误..@Zahid:您正在编写的命令只是将设备代码编译到目标文件中。您需要将-lcudadevrt添加到链接应用程序的命令中。你读了我链接到的pdf吗?它没有到达nvcc链接器。它在给出错误后停止编译。是否需要将设备链接器模式选择为。。单独编译?@Zahid:检查我的编辑。我忽略了您没有启用可重定位设备代码进行编译的事实。将
-rdc=true
添加到compile语句中,并将-lcudavert添加到linking语句中。