转载

CUDA学习笔记一

使用 VS2013 编译 CUDA 程序时,可能会遇到以下问题:

1 error MSB3721: "D:/Program Files/NVIDIA GPU Computing/Toolkit/CUDA/v7.0/bin/nvcc.exe" -gencode=arch=compute_52,code=/"sm_52,compute_52/" --use-local-env --cl-version 2013 -ccbin "D:/Program Files/Microsoft Visual Studio 12.0/VC/bin/x86_amd64"  -I"D:/Program Files/NVIDIA Corporation/CUDA Samples/v7.0/common/inc" -I"D:/Program Files/NVIDIA GPU Computing/Toolkit/CUDA/v7.0/include" -I"D:/Program Files/NVIDIA Corporation/CUDA Samples/v7.0/common/inc" -I"D:/Program Files/NVIDIA GPU Computing/Toolkit/CUDA/v7.0/include"  -G   --keep-dir x64/Debug -maxrregcount=0  --machine 64 --compile -cudart static  -g   -DWIN32 -DWIN32 -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd  " -o x64/Debug/kernel.cu.obj "C:/Users/MaoHeng_Lab/documents/visual studio 2013/Projects/CudaTest/CudaTest/kernel.cu"” 已退出,返回代码为  2

出现该问题的主要原因是:程序中有语法错误,只要修改掉所有的语法错误,就可以成功编译。

2 error MSB3721: "D:/Program Files/NVIDIA GPU Computing/Toolkit/CUDA/v7.0/bin/nvcc.exe" -gencode=arch=compute_52,code=/"sm_52,compute_52/" --use-local-env --cl-version 2013 -ccbin "D:/Program Files/Microsoft Visual Studio 12.0/VC/bin/x86_amd64"  -I"D:/Program Files/NVIDIA Corporation/CUDA Samples/v7.0/common/inc" -I"D:/Program Files/NVIDIA GPU Computing/Toolkit/CUDA/v7.0/include" -I"D:/Program Files/NVIDIA Corporation/CUDA Samples/v7.0/common/inc" -I"D:/Program Files/NVIDIA GPU Computing/Toolkit/CUDA/v7.0/include"  -G   --keep-dir x64/Debug -maxrregcount=0  --machine 64 --compile -cudart static  -g   -DWIN32 -DWIN32 -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd  " -o x64/Debug/kernel.cu.obj "C:/Users/MaoHeng_Lab/documents/visual studio 2013/Projects/CudaTest/CudaTest/kernel.cu"” 已退出,返回代码为  4

对于这个问题我之前调试了很长时间,因为我程序中使用到了 CUDA Sample 提供的 OpenGL ,结果编译时总是出现关于 GL.h GLU.h 中出现错误,其中 GL.h GLU.h Windows 系统 SDK 自带文件。可能原因有:

1 VS 是否 include 这些文件;

2 )检查是否因为 x86 x64 的编译环境不同引起的;

3 )很可能因为 CUDA 自带的 OpenGL 与系统中的 GL.h GLU.h 的版本不匹配;

4 VS CUDA 配置是否合理( VS 中属性页面中的配置)

1 )、( 2 )很好核查,对于( 3 )可能需要下载 OpenGL 的库再测试。下载 GLUT(https://www.opengl.org/resources/libraries/) ,之后再下载 GLEW(http://glew.sourceforge.net/) 。最后问题问题是在 VS CUDA 配置存在问题。以下是修改之后的配置:

CUDA学习笔记一

其中, IncludePath VS 自定义的变量,几乎包含了系统中所有的头文件。一般可直接按照 VS 自定义的值。

CUDA学习笔记一

CUDA_PATH_V7_0 是自定义环境变量,指向 D:/Program Files/NVIDIA GPU Computing/Toolkit/CUDA/v7.0 ,即安装完 CUDA ToolKit 的目录。 NVCUDASAMPLES7_0_ROOT D:/Program Files/NVIDIA Corporation/CUDA Samples/v7.0 ,即安装完 CUDA Samples 的目录。

CUDA学习笔记一

最关键的是设置 CUDA C++ ,在这里设置 include lib

CUDA学习笔记一

一定要注意要这是合适的 Code Generation ,我的显卡是 GTX970 ,支持 CUDA5.2 ,所以在这里我设为 compute_52,sm_52 。如果支持 2.0 ,则可设置为 compute_20,sm_20 。当然也可以设置多个,中间使用分号 (;) 分隔。

CUDA学习笔记一

在链接处设置 lib 所在目录,其中看到的 CudaToolkitLibDir CUDA 安装完 VS 工具包后自定义的,可以点该选项,弹出编辑,选择宏可以查看,如下所示:

CUDA学习笔记一

之后写入 lib

CUDA学习笔记一

如果选择静态使用 cuda 运行时库,填写 cudart_static.lib ,否则选择动态使用 cuda 运行时库,填写 cudart.lib 。因为使用了 OpenGL ,则需要 OpenGL 的库: freeglut.lib glew64.lib

之后, cuda 程序可以编译通过,能够正常运行。

正文到此结束
Loading...