草庐IT

CUDA学习:Windows下的CUDA环境配置

三鲜豆皮 2023-05-25 原文

Windows下的CUDA环境配置

一、查看自己电脑的显卡信息

  • 使用win+R打开运行窗口,在运行窗口中输入cmd打开命令行
  • 在命令行中键入nvidia-smi查看显卡支持信息
    • 从下图中可以看到,本机显卡的显卡驱动版本为:472.39;CUDA支持版本为:11.4

二、下载CUDA工具包

  • 在查看完电脑的显卡信息后,需要对显卡驱动版本和CUDA版本对应的CUDA Toolkit工具包进行确认.

  • 前往NVIDIA官网的官方文档:Release Notes :: CUDA Toolkit Documentation (nvidia.com)查看对应的信息.下载的CUDA Toolkit版本不能高于显卡自身的CUDA 版本.以笔者电脑为例则不能下载高于11.4版本的CUDA Toolkit工具包.除此之外,在官方文档(table 1;table 2)中核对本机的显卡驱动版本是否想要下载的CUDA Toolkit版本的要求

  • 核对完成后,前往NVIDIA官网下载对应版本的CUDA工具包:CUDA Toolkit Archive | NVIDIA Developer

    • 选择Windows环境下的CUDA安装包.安装包类型有两类:一类是local,另一类是network.
    • local版本包含了CUDA Toolkit中的所有组件,是一个离线安装包.
    • network版本是一个通过网络的安装程序,可以自由选择想要下载的CUDA Toolkit组件.
    • 联网环境下一般选择下载network版本的安装包
  • 本文以network版本的安装程序为例,下载完成后运行可执行程序,按照提示步骤进行安装即可

  • 安装路径设置为默认路径

三、配置系统环境变量

  • 安装完成后,以win10系统为例.右键:“此电脑”->“属性”,选择高级系统设置,如下图所示

  • 选择"高级"中的"环境变量",开始设置环境变量
  • 安装完成后,系统环境变量中自动被添加上了如下所示的两个环境变量(版本号对应用户所下载的版本号):

  • 用户需要手动添加以下的环境变量:
CUDA_BIN_PATH=%CUDA_PAT%\bin
CUDA_LIB_PATH=%CUDA_PATH%\lib\x64
CUDA_SDK_BIN_PATH=%CUDA_SDK_PATH%\bin\win64
CUDA_SDK_LIB_PATH=%CUDA_SDK_PATH%\common\lib\x64
CUDA_SKD_PATH=C:\ProgramData\NVIDIA Corporation\CUDA Sample\v11.3
  • 添加上上述环境变量后,在系统环境变量Path中添加下列路径:
%CUDA_BIN_PATH%
%CUDA_LIB_PATH%
%CUDA_SDK_BIN_PATH%
%CUDA_SDK_LIB_path%

四、查看CUDA是否安装成功

  • 在命令行中输入:nvcc --version查看nvcc编译器版本,如下图所示

  • 在命令行中输入set cuda,查看设置的环境变量情况.如下所示:

  • 验证deviceQuery.exebandwidthTest.exe两个可执行程序是否能够正常运行.默认安装路径下,两个可执行程序的路径为:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3\extras\demo_suite.
  • 在命令行中运行上述两个可执行程序,运行结果为result=PASS则说明CUDA安装成功,如下所示:


五、在VS2019下配置CUDA调试环境

  • 打开VS2019,新建空项目,右键项目,选择“生成依赖项”,选择“生成自定义”,在"生成自定义"中勾选"CUDA",如下所示:

  • 在空项目中新建后缀为.cu的源文件.右键该文件,选择"属性"->“常规”->“项类型”.将"项类型设置为:CUDA C/C++.如下所示:

  • 完成上述步骤后进行项目配置.右键项目,选择属性.配置选所有配置(即debug和Realise配置一致).

  • 然后分平台(x64和win32)分别进行配置

  • x64平台下的配置

    • 包含目录配置

      • 项目->“属性”->“配置属性”->“VC++目录”->"包含目录
      • 添加包含目录:$(CUDA_PATH)\include
    • 库目录配置

      • “VC++目录”->“库目录”
      • 添加库目录:$(CUDA_PATH)\lib\x64
    • 依赖项

      • “配置属性”->“链接器”->“输入”->“附加依赖项”
      • 添加库文件(库文件数量较多,默认存储路径为C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3\lib\x64,可在该路径下自己添加依赖项):
      cublas.lib
      cuda.lib
      cudadevrt.lib
      cudart.lib
      cudart_static.lib
      OpenCL.lib
      
  • Win32平台下的配置

    • 包含目录与x64相同

    • 库目录配置

      • 添加库目录:$(CUDA_PATH)\lib\Win32
    • 依赖项

      • 添加库文件(Win32平台与x64平台的库文件不相同):
      cuda.lib
      cudadevrt.lib
      cudart.lib
      cudart_static.lib
      OpenCL.lib
      
  • 配置VS2019下的NsightGPU代码编译器

    • 在VS2019的"扩展"->“管理扩展"中联机搜索"nsight”,下载"NVIDIA Nsight Intergration"的扩展组件,用于在VS中调试GPU代码.如下所示.

  • 拓展下载完成后,可以使用该扩展对GPU代码进行编程.
    • 在GPU的核函数中添加断点,点击"Start CUDA Debugging(Next-Gen)"便可进入GPU代码的调试,调试过程与VS调试CPU代码相同
    • 使用"CUDA Debugging"只能对GPU部分的代码进行调试,即只能对核函数进行调试,不能对CPU代码进行调试
    • 使用VS2019中的"本地Windows调试器"**只能对CPU部分的代码进行调试,无法调试GPU部分的代码

  • 使用下面给出的测试程序进行测试,查看能否正常运行.

    • 运行结果如下所示

#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include<iostream>
#include <stdio.h>
using namespace std;
constexpr size_t MAXSIZE = 20;

__global__ void addKernel(int* const c, const int* const b, const int* const a)
{
	int i = threadIdx.x;
	c[i] = a[i] + b[i];
}

int main()
{
	constexpr size_t length = 6;
	int host_a[length] = { 1,2,3,4,5,6 };
	int host_b[length] = { 10,20,30,40,50,60 };
	int host_c[length];
	//为三个向量在GPU上分配显存
	int* dev_a, *dev_b, *dev_c;
	cudaMalloc((void**)&dev_c, length * sizeof(int));
	cudaMalloc((void**)&dev_a, length * sizeof(int));
	cudaMalloc((void**)&dev_b, length * sizeof(int));
	//将主机端的数据拷贝到设备端
	cudaMemcpy(dev_a, host_a, length * sizeof(int), cudaMemcpyHostToDevice);
	cudaMemcpy(dev_b, host_b, length * sizeof(int), cudaMemcpyHostToDevice);
	cudaMemcpy(dev_c, host_c, length * sizeof(int), cudaMemcpyHostToDevice);
	//在GPU上运行核函数,每个线程进行一个元素的计算
	addKernel << <1, length >> > (dev_c, dev_b, dev_a);
	//将设备端的运算结果拷贝回主机端
	cudaMemcpy(host_c, dev_c, length * sizeof(int), cudaMemcpyDeviceToHost);
	//释放显存
	cudaFree(dev_a);
	cudaFree(dev_b);
	cudaFree(dev_c);
	for (int i = 0; i < length; ++i)
		cout << host_c[i] << " ";
	cout << endl;
	getchar();
	system("pause");
	return 0;
}
	//释放显存
	cudaFree(dev_a);
	cudaFree(dev_b);
	cudaFree(dev_c);
	for (int i = 0; i < length; ++i)
		cout << host_c[i] << " ";
	cout << endl;
	getchar();
	system("pause");
	return 0;
}

有关CUDA学习:Windows下的CUDA环境配置的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  3. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  4. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  5. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  6. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  7. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  8. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  9. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  10. 神州数码无线产品(AC+AP)配置 - 2

    注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配

随机推荐