windows10下visual studio 2019安装以及cuda11配置

2023-05-16

安装visual studio 2019

进入官方的下载页面,可能需要登录,登录后选取社区版下载。
在这里插入图片描述

注意,这里只是下载安装器,真正的安装会在后续执行文件,配置安装目录后,联网下载安装包文件。整个过程比较简单,这里不作详细叙述。仅提供一份备用的安装器下载链接。

链接:https://pan.baidu.com/s/1l7IZBIXw7qiGZC9upCylgg
提取码:62dn

由于最新的visual studio版本已经来到了vs2022,但相应的cuda版本肯定也需要是最新的。这里选取vs2019和cuda11的搭配,如果选择安装vs2022,在下载cuda版本后,需要查看cuda版本中是否有相匹配的visual studio integration文件,否则不能配置成功。

安装英伟达驱动

进入驱动下载界面,根据自己的显卡型号,选择合适的显卡驱动。
在这里插入图片描述

注意,这里我电脑是gtx1650的显卡,产品系列选择Geforce16 Series,而不是GeForce GTX 16 Series [Notebook]。
在这里插入图片描述

查看驱动支持的cuda最高版本

有两种方式可以查看驱动与cuda的兼容版本。

  • 进入官方网站查看不同的cuda版本所需要的最低的驱动版本。由于我选择安装的驱动版本为457,因此最高能选择到11.1.1版本。在这里插入图片描述

  • 成功安装英伟达驱动后,win+R,输入cmd,进入命令行界面,输入nvdia-smi,即可查看nvidia驱动版本,以及最高支持的cuda版本。
    在这里插入图片描述

可以得知,英伟达驱动版本为457.49,最高支持的cuda版本为11.1。

安装cuda v11.1及cudnn8.0

下载文件

进入cuda的官方下载页面,下载cuda11的windows版本。

在这里插入图片描述
由于安装的英伟达驱动限制,最高支持到cuda11.1,因此选择该版本下载。

在这里插入图片描述

进入cudnn的主页面,输入账号密码,各种点击,最终会进入到真正的下载界面下载与cuda相匹配的cudnn版本。

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
由于cuda可以随意下载,而cudnn下载需要登录账号,而最麻烦的就是注册账号的过程,故提供一份cudnn8.0的备用的下载链接。

链接:https://pan.baidu.com/s/17ViL407xNT0pjfMj80T5kg
提取码:509a

安装配置

双击cuda安装包开始,输入一个临时的解压目录。
在这里插入图片描述

开始解压文件。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里需要取消驱动的安装,因为我们之前安装的驱动版本,比cuda自带的驱动版本要高。不取消会安装失败。

在这里插入图片描述

最好将这些文件安装在D盘。如果系统盘够大的话,可以无视这条建议。

在这里插入图片描述
这里检查是否会安装visual studio 2019的配置选项,如果没有,则无法配置成功。

在这里插入图片描述
此步骤安装成功,在命令行输入nvcc -V可以显示cuda的版本信息。

在这里插入图片描述
对于cudnn的安装配置则较为简单,将文件下载,解压,改名,复制到指定目录即可。

在这里插入图片描述

将改名后的cudnn文件夹拷贝至cuda的安装目录即可。
在这里插入图片描述

环境变量添加

cuda装完,cuda的安装目录就已经添加到环境变量了。

在这里插入图片描述
在这里插入图片描述

仅需再将cudnn的动态库添加到Path即可。

在这里插入图片描述
在这里插入图片描述

至此,cuda和cudnn的配置过程结束。

配置visual studio的cuda环境

最后一步,也是比较麻烦的一步,配置visual studio的cuda环境。
双击visual studio图标,进入软件界面,创建空项目。

在这里插入图片描述
在这里插入图片描述

将x86改为x64。

在这里插入图片描述

cudaEnvSampleSample的属性列表中选择生成依赖项-生成自定义。

在这里插入图片描述

在弹出的Visual C++生成自定义文件中选择第一项,确定。
注:很多同学说这里没找到CUDA11.1(.targets,…)这一项,别着急,先跳过这一部分,新建下面的属性文件,再回来完成这一步。(正确步骤应该是这样的,排版时有一点疏漏)
在这里插入图片描述
点击视图-属性管理页,进入属性管理器。

在这里插入图片描述

在Debug|x64下添加属性表,表名可以用默认,也可以修改为CudaEnvPropertySheet.props。这个属性表在以后创建其他cuda项目的时候可以复用。到时候只需要添加现有属性表即可。

在这里插入图片描述
在这里插入图片描述
添加后,双击CudaEnvPropertySheet.props文件,出现属性页详细信息。点击通用属性-VC++目录-包含目录,点击编辑,添加所需的头文件路径。

在这里插入图片描述
点击添加图标,输入$(CUDA_PATH)\include,确定。

在这里插入图片描述
由于测试例程采用的是Samples中的文件,这里需将Samples\common中的头文件一并包含进来。

在这里插入图片描述
返回属性页,在通用属性-VC++目录-库目录下找到编辑,点击进入,添加库文件(.lib)所在路径。

在这里插入图片描述

点击添加图标,输入$(CUDA_PATH)\lib\x64,确定。

在这里插入图片描述在这里插入图片描述
同理,测试例程采用了Sample中的文件,将例程所需的库文件路径一并添加。

在这里插入图片描述
返回属性页,点击链接器-常规-附加库目录,点击编辑,添加动态库所在路径。

在这里插入图片描述
点击添加图标,输入$(CUDA_PATH)\bin,确定。

在这里插入图片描述在这里插入图片描述
在链接器-输入-附加依赖项中,将所有.lib文件名加入此项中,确定。

在这里插入图片描述
具体做法是命令行进入到.lib所在目录,dir /B >res.txt,再打开res.txt,将内容复制到目标框内。
在这里插入图片描述在这里插入图片描述
至此,所有基本配置完成。添加一个测试文件。由左下的属性管理器切换至解决方案资源管理器。在cudaEnvSample项目-源文件-添加-新建项中,点击NVIDIA CUDA 11.1中的Code,选择CUDA C/C++ File,点击添加。

在这里插入图片描述在这里插入图片描述
名称中输入test.cu,添加。这里选择Samples中的一个例子来运行,可以自行选择,这里附一个VectorAdd的代码。

#include <stdio.h>

// For the CUDA runtime routines (prefixed with "cuda_")
#include <cuda_runtime.h>

#include <helper_cuda.h>
/**
 * CUDA Kernel Device code
 *
 * Computes the vector addition of A and B into C. The 3 vectors have the same
 * number of elements numElements.
 */
__global__ void
vectorAdd(const float *A, const float *B, float *C, int numElements)
{
    int i = blockDim.x * blockIdx.x + threadIdx.x;

    if (i < numElements)
    {
        C[i] = A[i] + B[i];
    }
}

/**
 * Host main routine
 */
int
main(void)
{
    // Error code to check return values for CUDA calls
    cudaError_t err = cudaSuccess;

    // Print the vector length to be used, and compute its size
    int numElements = 50000;
    size_t size = numElements * sizeof(float);
    printf("[Vector addition of %d elements]\n", numElements);

    // Allocate the host input vector A
    float *h_A = (float *)malloc(size);

    // Allocate the host input vector B
    float *h_B = (float *)malloc(size);

    // Allocate the host output vector C
    float *h_C = (float *)malloc(size);

    // Verify that allocations succeeded
    if (h_A == NULL || h_B == NULL || h_C == NULL)
    {
        fprintf(stderr, "Failed to allocate host vectors!\n");
        exit(EXIT_FAILURE);
    }

    // Initialize the host input vectors
    for (int i = 0; i < numElements; ++i)
    {
        h_A[i] = rand()/(float)RAND_MAX;
        h_B[i] = rand()/(float)RAND_MAX;
    }

    // Allocate the device input vector A
    float *d_A = NULL;
    err = cudaMalloc((void **)&d_A, size);

    if (err != cudaSuccess)
    {
        fprintf(stderr, "Failed to allocate device vector A (error code %s)!\n", cudaGetErrorString(err));
        exit(EXIT_FAILURE);
    }

    // Allocate the device input vector B
    float *d_B = NULL;
    err = cudaMalloc((void **)&d_B, size);

    if (err != cudaSuccess)
    {
        fprintf(stderr, "Failed to allocate device vector B (error code %s)!\n", cudaGetErrorString(err));
        exit(EXIT_FAILURE);
    }

    // Allocate the device output vector C
    float *d_C = NULL;
    err = cudaMalloc((void **)&d_C, size);

    if (err != cudaSuccess)
    {
        fprintf(stderr, "Failed to allocate device vector C (error code %s)!\n", cudaGetErrorString(err));
        exit(EXIT_FAILURE);
    }

    // Copy the host input vectors A and B in host memory to the device input vectors in
    // device memory
    printf("Copy input data from the host memory to the CUDA device\n");
    err = cudaMemcpy(d_A, h_A, size, cudaMemcpyHostToDevice);

    if (err != cudaSuccess)
    {
        fprintf(stderr, "Failed to copy vector A from host to device (error code %s)!\n", cudaGetErrorString(err));
        exit(EXIT_FAILURE);
    }

    err = cudaMemcpy(d_B, h_B, size, cudaMemcpyHostToDevice);

    if (err != cudaSuccess)
    {
        fprintf(stderr, "Failed to copy vector B from host to device (error code %s)!\n", cudaGetErrorString(err));
        exit(EXIT_FAILURE);
    }

    // Launch the Vector Add CUDA Kernel
    int threadsPerBlock = 256;
    int blocksPerGrid =(numElements + threadsPerBlock - 1) / threadsPerBlock;
    printf("CUDA kernel launch with %d blocks of %d threads\n", blocksPerGrid, threadsPerBlock);
    vectorAdd<<<blocksPerGrid, threadsPerBlock>>>(d_A, d_B, d_C, numElements);
    err = cudaGetLastError();

    if (err != cudaSuccess)
    {
        fprintf(stderr, "Failed to launch vectorAdd kernel (error code %s)!\n", cudaGetErrorString(err));
        exit(EXIT_FAILURE);
    }

    // Copy the device result vector in device memory to the host result vector
    // in host memory.
    printf("Copy output data from the CUDA device to the host memory\n");
    err = cudaMemcpy(h_C, d_C, size, cudaMemcpyDeviceToHost);

    if (err != cudaSuccess)
    {
        fprintf(stderr, "Failed to copy vector C from device to host (error code %s)!\n", cudaGetErrorString(err));
        exit(EXIT_FAILURE);
    }

    // Verify that the result vector is correct
    for (int i = 0; i < numElements; ++i)
    {
        if (fabs(h_A[i] + h_B[i] - h_C[i]) > 1e-5)
        {
            fprintf(stderr, "Result verification failed at element %d!\n", i);
            exit(EXIT_FAILURE);
        }
    }

    printf("Test PASSED\n");

    // Free device global memory
    err = cudaFree(d_A);

    if (err != cudaSuccess)
    {
        fprintf(stderr, "Failed to free device vector A (error code %s)!\n", cudaGetErrorString(err));
        exit(EXIT_FAILURE);
    }

    err = cudaFree(d_B);

    if (err != cudaSuccess)
    {
        fprintf(stderr, "Failed to free device vector B (error code %s)!\n", cudaGetErrorString(err));
        exit(EXIT_FAILURE);
    }

    err = cudaFree(d_C);

    if (err != cudaSuccess)
    {
        fprintf(stderr, "Failed to free device vector C (error code %s)!\n", cudaGetErrorString(err));
        exit(EXIT_FAILURE);
    }

    // Free host memory
    free(h_A);
    free(h_B);
    free(h_C);

    printf("Done\n");
    return 0;
}

当添加完成后,便可以点击生成解决方案,窗口会显示调用nvcc编译源文件,生成成功-开始调试,得到以下类似输出即表示配置成功!

在这里插入图片描述
最后再强调一句,CudaEnvProperty.props是可以复用的,以后再新建cuda项目,只需要在新项目中采用该配置文件即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

windows10下visual studio 2019安装以及cuda11配置 的相关文章

  • 系统架构师-科目3考点

  • Hive笔记-01 架构概述

    文章目录 1 概述2 Metadata Metastore的作用3 Metastore三种配置方式3 1 Hive配置参数说明3 1 1 基本配置参数3 1 2 其他配置参数 3 2 内嵌模式 xff08 Embedded xff09 3
  • Hadoop笔记-01概述

    文章目录 1 什么是大数据 xff1f 1 1 大数据计算模式及代表产品1 2 云计算与物联网1 2 1 云计算1 2 1 1 虚拟化1 2 1 2 分布式存储1 2 1 3 分布式计算1 2 1 4 多租户 1 3 物联网1 3 1 识别
  • Hadoop笔记-02 安装

    文章目录 1 VBOX安装CentOS71 1 安装VBOX软件1 2 下载CentOS7镜像文件1 3 初始化VBOX虚拟盘1 4 CentOS7网络配置1 5 CentOS7 yum源配置1 6 CentOS7 一般配置1 6 1关闭防
  • ffmpeg播放器实现详解 - 视频同步控制

    1 时间戳 时间戳的概念贯穿音视频开发始终 xff0c 重要性不言而喻 时间戳告诉我们在什么时候 xff0c 用多快的速度去播哪一帧 xff0c 其中 xff0c DTS decoding timestamp 告诉我们何时解码 xff0c
  • Ubuntu22.04 安装深度微信报错 依赖: libsasl2-2 (>= 2.1.27.1)

    现象 xff1a span class token punctuation span base span class token punctuation span pang 64 pang HP span class token funct
  • Ubuntu22.04更新后 点击深度微信无反应

    系统版本 xff1a Ubuntu 22 04 jammy内核 xff1a x86 64 Linux 5 15 0 53 genericdeepin wine6 stable 版本 xff1a 6 0 0 41 1 深度微信图标点击后 xf
  • MySQL笔记-08 索引

    文章目录 1 索引概述1 1 MySQL索引分类1 1 1 普通索引1 1 2 唯一性索引1 1 3 全文索引1 1 4 单列索引1 1 5 多列索引1 1 6 空间索引 2 创建索引2 1 在建立数据表时创建索引2 1 1 普通索引创建2
  • MySQL笔记-09 视图

    文章目录 1 视图概念1 1 概念1 2 作用 2 创建视图2 1 查看创建视图的权限2 2 创建视图的步骤2 3 创建视图的注意事项 3 视图操作3 1 查看视图3 1 1 DESCRIBE语句3 1 2 SHOW TABLE STATU
  • MySQL笔记-10 数据完整性约束

    文章目录 1 定义完整性约束1 1 实体完整性1 1 1 主键约束1 1 2 候选键约束 1 2 参照完整性1 3 用户定义完整性1 3 1 非空约束1 3 2 CHECK约束1 3 2 1 对列实施CHECK约束1 3 2 2 对表实施C
  • Linux命令行笔记-00 综述

    文章目录 1 Linux命令行简介1 1 Linux命令行的分类1 1 1 根据系统中作用来分类1 1 2 根据对象来分类 2 Linux命令行解释器2 1 命令行解释器shell2 1 1 核心程序2 1 2 公用程序shell2 1 3
  • Linux命令行笔记-01 文件管理-文件的建立、移动和删除

    文章目录 1 文件的建立 移动和删除1 1 96 cat 96 建立文件1 1 1 语法格式与参数1 1 2 示例 1 2 96 touch 96 建立文件1 2 1 语法格式与参数1 2 2 示例1 2 3 注意 1 3 96 ln 96
  • CMake学习-01 综述

    文章目录 1 CMake1 1 CMake生成makefile并编译的流程 2 CMakeLists txt2 1 Demo讲解2 2 常用命令2 2 1 指定CMAKE的最低版本2 2 2 设置项目名称2 2 3 设置变量2 2 4 设置
  • Rust:官方迭代器大全

    一 for 和迭代器 先看一段代码 xff1a span class token keyword fn span span class token function definition function main span span cl
  • Rust: 函数的重载——我做的的一组小实验

    编程的时候 xff0c 我发现有不少函数能够根据左值类型自动调用重载函数 但是 xff0c 我知道 Rust 的函数是不支持重载的 所以我打算尝试一下这一 重载 现象是如何实现的 一 Rust 不支持函数重载 写一段代码 xff1a spa
  • php产生大量session文件导致报错无法创建修改文件:no space left on device

    阿里云SLB健康检测后端服务器组产生百万级别的php的0k大小session文件 今天早上在登录公司一台阿里云的服务器上vim修改配置文件以及touch文件时报错 xff1a no space left on device df h 查看了
  • Rust: Native Windows GUI下载、安装、演示入门

    上 github 下载 xff0c 网址为 https github com gabdube native windows gui 上面有安装说明 按说明方法 xff0c 老是提示权限不够 配置了 ssh 公钥证书 xff0c 仍然不行 请
  • Rust: Native Windows GUI 入门第一课,程序结构剖析

    基于派生宏的代码实例 Cargo toml 文件 span class token punctuation span package span class token punctuation span name span class tok
  • 通过两个神经元的极简模型,清晰透视 Pytorch 工作原理

    解剖麻雀 xff0c 是分析了解复杂问题的好办法 本文通过搭建只有两个神经元的网络 xff0c 从根本上剖析 Pytorch 工作原理 先附上全部源代码 xff0c 然后听我慢慢唠 xff01 span class token keywor
  • Cifar-10 数据格式分析

    Cifar 10 的介绍可去官网阅读 xff0c 也可参照我之前整理的 笔记 xff1a CIFAR 01 和 CIFAR 100 数据集内容和格式详解 1 下载 Cifar 10 数据 本文下载了 Cifar 10 的 Python 语言

随机推荐

  • 准确率(Accuracy)、精度(Precision)、召回率(Recall)和 mAP 的图解

    机器学习的评价指标让人眼花缭乱 以前我写过一篇笔记总结了这个话题 xff0c 有兴趣的可以参考一下 xff1a 一分钟看懂深度学习中的准确率 xff08 Accuracy xff09 精度 xff08 Precision xff09 召回率
  • conda 基本用法

    好久不用超算服务器了 xff0c 今天远程登陆一下 xff0c 发现以前写的代码都不能运行了 鼓捣半天 xff0c 忽然想起来 xff0c 需要设置 conda 环境才行 写此小结 xff0c 汇总一下 conda 的基本用法 很久以前安装
  • jupyter 基本用法

    前一段时间 xff0c 同事帮我在超算服务器安装了一套 jupyter notebook 软件 xff0c 甚是好用 但用了几天后 xff0c 忽然就不能用了 今天研究了一下 xff0c 发现是服务器程序关闭了 xff0c 所以我在浏览器端
  • pytorch模型的保存与加载

    torch save 与 torch load 模型保存有两种形式 xff0c 一种是保存模型的 state dict xff0c 只是保存模型的参数 那么加载时需要先创建一个模型的实例 model xff0c 之后通过 torch loa
  • 用 SDK Mamager 安装 Nano

    用 SDK Mamager 安装 Nano 一 安装 sdk manager 在 PC 机上 Ubuntu 环境下 xff0c 下载 sdk manager 安装包 xff0c 用鼠标点击后自动运行 界面上有 Install 字样 xff0
  • TensorRTx 开源代码内容说明

    TensorRTx 提供了把常见网络模型转化为 TensorRT 格式的功能 TensorRTx旨在使用tensorrt网络定义API实现流行的深度学习网络 tensorrt有内置的解析器 xff0c 包括caffeparser uffpa
  • 关于在ubuntu下用docker部署Django卡在 Watching for file changes with StatReloader 不动了 以及 run后无法访问web 的问题

    1 问题描述 xff1a 用docker部署Django时遇到问题如下 xff1a 卡在这里不动了 xff0c 等了半小时服务也没起来 我的dockerfile如下 xff1a 直接启动没有问题 xff1a 用exec命令在容器内直接起也没
  • 漫话线性代数:线性变换的几何解释

    网购了一本书 xff0c 说的是线性代数的几何解释 一口气读完 xff0c 感觉这部书有些贪多了 xff0c 什么细节都要弄个几何解释 xff0c 不免让琐碎的细节把关键性的主题给遮掩了 所以萌生一个念头 xff0c 把线性代数的核心概念和
  • ChatGPT 逆天测试,结局出乎预料

    目录 一 数学解题能力二 编程能力三 日常生活咨询四 问一些离谱的问题 xff0c 它有啥反应 xff1f 五 逆天大测试 一 数学解题能力 据说 ChatGPT 会做数学题 xff0c 给他几个条件不充分的问题 xff0c 看看他是否真的
  • 我发现 chatGPT 在智能客服方面一个逆天的应用呀

    chatGPT 有助于快速构建知识库 xff0c 想了一个有趣的例子 xff0c 感觉 chatGPT真是强大呀 xff01 废话不多讲 xff0c 直接看效果吧 xff1a
  • 在 WIndows 下安装 Apache Tinkerpop (Gremlin)

    一 安装 JDK 首先安装 Java JDK xff0c 这个去官网下载即可 xff0c 我下载安装的 JDK19 xff08 jdk 19 windows x64 bin msi xff09 xff0c 细节不赘述 二 去 Tinkerp
  • 阅读笔记:TF - IDF 原理

    今天查阅 TF IDF 资料 xff0c 发现百度百科里面提供了一个例子 xff0c 解释的很清楚 xff0c 记下来备用 原文链接 xff1a https baike baidu com item tf idf 8816134 fr 61
  • 词向量语义匹配:欧氏距离和余弦相似度,选择哪一个?

    最近做自然语言处理算法 xff0c 需要根据词向量判断两个词汇的相似度 面临两个选择 xff1a 欧氏距离和余弦相似度 选择哪一个好呢 xff1f 一 概念图解 为便于理解这个问题 xff0c 假设词向量是二维的 我们分析一下这两种方法计算
  • 一分钟理解 AP(Affinity Propagation) 亲和⼒传播算法

    这篇博客发出来后 xff0c 我用 Rust 复现代码出现问题 为此 xff0c 我对对照了 sklearn 的相关代码 xff0c 反复比较了两天 xff0c 发现一处 bug xff0c 把 43 61 误写成了 61 xff0c 导致
  • 机器学习:准确率(Precision)、召回率(Recall)、F值(F-Measure)、ROC曲线、PR曲线

    增注 xff1a 虽然当时看这篇文章的时候感觉很不错 xff0c 但是还是写在前面 xff0c 想要了解关于机器学习度量的几个尺度 xff0c 建议大家直接看周志华老师的西瓜书的第2章 xff1a 模型评估与选择 xff0c 写的是真的很好
  • (5)细菌实验分组

    描述 有一种细菌分为A B两个亚种 xff0c 它们的外在特征几乎完全相同 xff0c 仅仅在繁殖能力上有显著差别 xff0c A亚种繁殖能力非常强 xff0c B亚种的繁殖能力很弱 在一次为时一个小时的细菌繁殖实验中 xff0c 实验员由
  • Python you-get 库 + FFmpeg 工具下载B站视频

    Python you get 库 43 FFmpeg 工具下载B站视频 电脑系统 xff1a Windows 10 准备阶段 xff08 安装you get和FFmpeg xff09 安装其实非常简单 xff0c 出现问题可以在网上参考其他
  • 虚拟机的创建、Linux相关基本命令等

    作业内容 xff1a 1 重新创建一个虚拟机 xff0c 熟悉下步骤 创建一个新的虚拟机 xff1a 1 点击 xff1a 创建新的虚拟机 2 下一步 3 提前下载一个镜像文件 xff0c 选择该文件即可 xff08 下载地址 xff1a
  • 解决mysql8.0主从配置,从库连接报错:Authentication plugin ‘caching_sha2_password‘ reported error

    其他配置都是按照网上分享的流程 xff0c 但是show slave status 查看从库状态时 xff0c Slave IO Running 61 connecting xff0c 这个状态是不对的 xff08 正常的Slave IO
  • windows10下visual studio 2019安装以及cuda11配置

    安装visual studio 2019 进入官方的下载页面 xff0c 可能需要登录 xff0c 登录后选取社区版下载 注意 xff0c 这里只是下载安装器 xff0c 真正的安装会在后续执行文件 xff0c 配置安装目录后 xff0c