CUDA和cuDNN

image

1- CUDA和cuDNN安装

2- 准备工作

2.1- 检查系统要求

  • 确保你的计算机有支持CUDA的NVIDIA显卡。可以通过右键点击桌面,选择"NVIDIA控制面板",然后在"系统信息"中查看显卡型号和支持的CUDA版本。

2.2- 安装Visual Studio

  • 下载并安装Visual Studio Community版本,建议选择2017、2019或2022版本。
  • 在安装过程中,确保选择"C++桌面开发"工作负载。

3- 下载CUDA Toolkit

3.1- 访问NVIDIA官网

3.2- 下载CUDA安装包

  • 选择"Windows" -> "exe (local)"下载离线安装包,避免在线安装可能出现的问题。

4- 安装CUDA Toolkit

4.1- 运行安装程序

  • 双击下载的CUDA安装包,启动安装向导。
  • 在安装过程中,选择"自定义安装",确保选中所有组件(包括CUDA Toolkit、CUDA Samples和驱动程序)。

4.2- 完成安装

  • 按照提示完成安装,记住安装路径(默认为C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.x)。

5- 配置环境变量

5.1- 自动配置

  • 安装完成后,CUDA安装程序通常会自动配置环境变量。

5.2- 手动配置(如有必要)

  • 右键点击"此电脑",选择"属性" -> “高级系统设置” -> “环境变量”。

  • 在"系统变量"中找到Path,点击"编辑",添加以下路径(根据你的CUDA版本调整):

    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.x\bin
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.x\libnvvp
    

6- 验证CUDA安装

6.1- 打开命令提示符

  • Win + R,输入cmd并回车。

6.2- 检查CUDA版本

  • 输入以下命令:

    nvcc -V
    
  • 如果返回CUDA版本号,则表示安装成功。

7- 安装cuDNN(可选)

如果你打算进行深度学习,建议安装cuDNN。

7.1- 下载cuDNN

7.2- 安装cuDNN

  • 解压下载的cuDNN压缩包。
  • 将解压后的binincludelib文件夹中的文件复制到CUDA的安装目录下(例如C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.x),覆盖原有文件。

7.3- 配置cuDNN环境变量

  • 确保C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.x\bin已经在系统环境变量Path中。

8- 编写和运行CUDA程序

8.1- 编写CUDA程序

  • 使用Visual Studio创建一个新的C++项目,添加以下示例代码:
#include <iostream>
#include <cuda_runtime.h>

// CUDA内核函数,运行在GPU上
__global__ void add(int *a, int *b, int *c) {
    int index = threadIdx.x;  // 获取当前线程的索引
    c[index] = a[index] + b[index];  // 执行向量加法
}

int main() {
    const int arraySize = 5;  // 定义数组大小
    int a[arraySize] = {1, 2, 3, 4, 5};  // 初始化数组a
    int b[arraySize] = {10, 20, 30, 40, 50};  // 初始化数组b
    int c[arraySize] = {0};  // 初始化结果数组c

    int *d_a, *d_b, *d_c;  // 定义设备指针
    cudaMalloc((void)&d_a, arraySize * sizeof(int));  // 在GPU上分配内存
    cudaMalloc((void)&d_b, arraySize * sizeof(int));  // 在GPU上分配内存
    cudaMalloc((void)&d_c, arraySize * sizeof(int));  // 在GPU上分配内存

    cudaMemcpy(d_a, a, arraySize * sizeof(int), cudaMemcpyHostToDevice);  // 将数据从主机复制到设备
    cudaMemcpy(d_b, b, arraySize * sizeof(int), cudaMemcpyHostToDevice);  // 将数据从主机复制到设备

    add<<<1, arraySize>>>(d_a, d_b, d_c);  // 启动CUDA内核函数

    cudaMemcpy(c, d_c, arraySize * sizeof(int), cudaMemcpyDeviceToHost);  // 将结果从设备复制到主机

    std::cout << "Result: ";
    for (int i = 0; i < arraySize; i++) {
        std::cout << c[i] << " ";  // 输出结果
    }
    std::cout << std::endl;

    cudaFree(d_a);  // 释放设备内存
    cudaFree(d_b);  // 释放设备内存
    cudaFree(d_c);  // 释放设备内存

    return 0;  // 返回0表示程序成功结束
}

8.2- 编译和运行

  • 在Visual Studio中编译项目,确保选择CUDA编译器。
  • 运行程序,查看输出结果。

9- 常见问题解决

  • 安装失败:确保显卡驱动程序是最新的,且与CUDA版本兼容。
  • 环境变量未生效:重启计算机或重新打开命令提示符。
  • CUDA程序无法运行:检查CUDA代码是否正确,确保使用了正确的编译器设置。