2015-01-09 30 views
2

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

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. 

我想,我需要为这个编译另一种选择:-rdc=true,但我没有找到我在哪里可以在VS2013设置。

2)当我将code generation属性设置为compute_52,sm_52时,出现错误:Unsupported gpu architecture 'compute_52'。但我的cc是5.2。所以我可以编译最多3.5 cc的代码?

由于

+2

关于不受支持的体系结构消息,提供了用于支持cc5.2的CUDA 6.5的更新。它是[这里](https://developer.nvidia.com/cuda-downloads-geforce-gtx9xx)。如果你安装它,那个特定的错误应该消失。 –

+0

谢谢,已经在下载。第一个问题呢?这是真的,我不得不包括选项-rdc = true吗? –

+1

是的,您必须启用单独的编译和链接,并且还需要包含一些额外的库。也许你应该看看cuda示例中的VS项目文件之一,例如[设备cublas示例](http://docs.nvidia.com/cuda/cuda-samples/index.html#simpledevlibcublas-gpu -device-API库函数 - CUDA的动态parallelism-)。 –

回答

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