使用动态并行(CUDA)编译.cu文件

时间:2015-01-09 00:08:18

标签: cuda dynamic-parallelism

我使用cc 5.2切换到新的GPU GeForce GTX 980,因此它必须支持动态并行。但是,我甚至无法编译一个简单的代码(来自编程指南)。我不会在这里提供它(没有必要,只是有一个全局内核调用另一个全局内核)。

1)我使用VS2013进行编码。在property pages -> CUDA C/C++ -> device中,我将code generation属性更改为compute_35,sm_35,这是输出:

1>------ Build started: Project: testCublas3, Configuration: Debug Win32 ------
1>  Compiling CUDA source file kernel.cu...
1>  
1>  C:\programs\misha\cuda\Projects\test projects\testCublas3\testCublas3>"C:\Program      Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\bin\nvcc.exe" -gencode=arch=compute_35,code=\"sm_35,compute_35\" --use-local-env --cl-version 2013 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin"  -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\include"  -G   --keep-dir Debug -maxrregcount=0  --machine 32 --compile -cudart static  -g   -DWIN32 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd  " -o Debug\kernel.cu.obj "C:\programs\misha\cuda\Projects\test projects\testCublas3\testCublas3\kernel.cu" 
1>C:/programs/misha/cuda/Projects/test projects/testCublas3/testCublas3/kernel.cu(13): error : kernel launch from __device__ or __global__ functions requires separate compilation mode
1>  kernel.cu
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations\CUDA 6.5.targets(593,9): error MSB3721: The command ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\bin\nvcc.exe" -gencode=arch=compute_35,code=\"sm_35,compute_35\" --use-local-env --cl-version 2013 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin"  -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\include"  -G   --keep-dir Debug -maxrregcount=0  --machine 32 --compile -cudart static  -g   -DWIN32 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd  " -o Debug\kernel.cu.obj "C:\programs\misha\cuda\Projects\test projects\testCublas3\testCublas3\kernel.cu"" exited with code 2.

我想,我需要另一个选项用于此编译:{{1​​}},但我找不到可以在VS2013中设置的位置。

2)当我将-rdc=true属性设置为code generation时,会出现错误:compute_52,sm_52。但我的cc是5.2。所以我可以编译最大3.5 cc的代码?

由于

1 个答案:

答案 0 :(得分:2)

关于第1项,cuda动态并行性需要separate compilation and linking-rdc=true),以及设备cudart库(-lcudadevrt)的链接。同样使用CUBLAS的动态并行性还需要在设备CUBLAS库(-lcublas_device)中进行链接。可能最简单的方法是定义视觉工作室项目中所有这些应该放在哪里,首先看一下the device cublas sample的视觉工作室项目。

关于第2项,您的GTX 980计算能力5.2无法识别的原因是您需要cuda 6.5工具包的最新更新,该工具包可用here