CUDA學習筆記一


使用VS2013編譯CUDA程序時,可能會遇到以下問題:

1error 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

出現該問題的主要原因是:程序中有語法錯誤,只要修改掉所有的語法錯誤,就可以成功編譯。

2error 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.hGLU.h中出現錯誤,其中GL.hGLU.hWindows系統SDK自帶文件。可能原因有:

1VS是否include這些文件;

2)檢查是否因為x86x64的編譯環境不同引起的;

3)很可能因為CUDA自帶的OpenGL與系統中的GL.hGLU.h的版本不匹配;

4VSCUDA配置是否合理(VS中屬性頁面中的配置)

1)、(2)很好核查,對於(3)可能需要下載OpenGL的庫再測試。下載GLUT(https://www.opengl.org/resources/libraries/),之后再下載GLEW(http://glew.sourceforge.net/)。最后問題問題是在VSCUDA配置存在問題。以下是修改之后的配置:

 

其中,IncludePathVS自定義的變量,幾乎包含了系統中所有的頭文件。一般可直接按照VS自定義的值。

 

CUDA_PATH_V7_0是自定義環境變量,指向D:\Program Files\NVIDIA GPU Computing\Toolkit\CUDA\v7.0,即安裝完CUDAToolKit的目錄。NVCUDASAMPLES7_0_ROOTD:\Program Files\NVIDIA Corporation\CUDA Samples\v7.0,即安裝完CUDASamples的目錄。

 

最關鍵的是設置CUDA C++,在這里設置includelib

 

一定要注意要這是合適的Code Generation,我的顯卡是GTX970,支持CUDA5.2,所以在這里我設為compute_52,sm_52。如果支持2.0,則可設置為compute_20,sm_20。當然也可以設置多個,中間使用分號(;)分隔。

 

在鏈接處設置lib所在目錄,其中看到的CudaToolkitLibDirCUDA安裝完VS工具包后自定義的,可以點該選項,彈出編輯,選擇宏可以查看,如下所示:

 

之后寫入lib

 

如果選擇靜態使用cuda運行時庫,填寫cudart_static.lib,否則選擇動態使用cuda運行時庫,填寫cudart.lib。因為使用了OpenGL,則需要OpenGL的庫:freeglut.libglew64.lib

之后,cuda程序可以編譯通過,能夠正常運行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM