Cuda配置-02 VS环境配置
说明
要进行CUDA编程开发就必须安装CUDA驱动,CUDA驱动的硬件条件为英伟达显卡以及对应的驱动软件。一般进行CUDA编程开发的操作系统主要是两种:Windows操作系统和Linux操作系统。Windows操作系统的集成开发环境可以使用Visual Studio(简称VS)或CLion,Linux操作系统的集成开发环境可以使用Visual Studio Code(简称VSCode)或Clion。
本教程主要是完成Windows操作系统下的Visual Studio集成开发环境配置,在配置之前,请确保你已经完成下列关键步骤:
- 存在英伟达显卡并且已经安装了对应驱动,一般有英伟达显卡的操作系统会预装驱动。
- 安装了CUDA驱动程序,如果你已经有了英伟达显卡驱动,此步可以参考我上一篇教程。
- 安装了Visual Studio,并且利用VS可以正常运行一个C/C++的Hello World程序。
在配置的过程中,我的具体环境参数为:CUDA11.2, Win10, VS2019。
作者注:本教程原版是2023年2月更新的,使用环境CUDA11+Win10+VS2019,然后参数方面需要配置环境变量,每次新项目得配置项目环境参数,感觉特别麻烦,于是在2024年3月换电脑后,重新更新了教程,现在的环境为CUDA12+Win11+VS2022,先安装VS2022,编辑器必须包含"使用C++的桌面开发",我选择的社区版,主要是免费可以避免很多版权问题。先安装VS2022,再按照我前面的教程安装CUDA12,就可以直接在VS项目模板里面开CUDA项目了,其他任何环境变量和项目参数都不需要配置。
教程后面内容都是旧版环境的手动配置,因为我现在没有了那样的环境,出于严谨考虑,保留之前的配置方法,因为可能有人需要,新版的先安装VS后安装CUDA后,在VS里面就有项目模板,直接使用就可以把所有参数和环境都搞好了。
步骤
- 系统环境变量里面添加:
CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2 CUDA_BIN_PATH=%CUDA_PATH%\bin CUDA_LIB_PATH=%CUDA_PATH%\lib\x64
注:如果CUDA安装路径不是默认路径,或者版本不是11.2的,请灵活改一下路径参数C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2
- Path环境变量里面添加:
%CUDA_BIN_PATH% %CUDA_LIB_PATH%
-
在CUDA的文件夹下: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\extras\visual_studio_integration\MSBuildExtensions 将所有文件复制到C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\BuildCustomizations 文件夹下,注意核对自己的路径参数是否正确,你的路径和我的路径有可能存在略微差别。
-
上述步骤只需要配置一次就行,下面的步骤需要每次Visual Studio新建CUDA项目都需要配置
-
VS中新建项目,项目名称为"CudaProject",项目类型为"C++控制台程序",源程序名称为"main.cpp"。
-
右键项目"CudaProject",选择:生成依赖项–>生成自定义–>勾选CUDA
-
右键程序"main.cpp",选择:属性–>常规–>项类型–>CUDA C/C++
-
右键项目"CudaProject",选择:属性->配置属性->VC++目录->包含目录,添加包含目录:$(CUDA_PATH)\include
-
在第8步的"VC++目录"里面,选择:VC++目录–>库目录,添加库目录:$(CUDA_PATH)\lib\x64
-
在第8步的"配置属性"里面,选择:配置属性–>链接器–>输入–>附加依赖项,把参数改为如下内容。
cublas.lib cuda.lib cudadevrt.lib cudart.lib cudart_static.lib OpenCL.lib
- 运行如下Hello World程序试试水:
//C语言标准库 #include //Cuda运行库 #include //核函数,GPU中运行:在GPU中打印Hello World __global__ void mykernel(void) { //GPU打印Hello World printf("Hello World From GPU!\n"); } //主函数,CPU中运行,修饰符__host__可以省略不写 int main(void) { //CPU打印Hello World printf("Hello World From CPU!\n"); //调用核函数,启用GPU执行打印任务 mykernel > (); //同步函数,作用为:强制CPU等待GPU执行完才执行 cudaDeviceSynchronize(); return 0; }
还没有评论,来说两句吧...