CUDA加速C++程序


注意nvcc编译器在windows下只支持Visual Studio的cl.exe编译
linux下支持gcc编译器,所以要在wsl中执行nvcc命令

ubuntu 安装cuda-toolkit
apt install nvidia-cuda-toolkit
建议安装特定版本:
https://developer.nvidia.com/cuda-12-9-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=deb_local

安装WSL2版cuda

同时安装WSL2 ubuntu版cuda版(和pytorch版本对应),假设这里是cuda12.4

shell
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda-repo-wsl-ubuntu-12-4-local_12.4.1-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-12-4-local_12.4.1-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-12-4-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-4

验证nvidia GPU是否可用
nvidia-smi 会出现gpu信息和cuda版本

SUDA附带NVCC编译器文档:
https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html

cuda加速例子:

c++
#include <stdio.h> // 包含标准输入输出库头文件
#include <cuda_runtime.h> // 包含CUDA运行时库头文件

void CPUFunction()
{
  printf("运行在CPU中的程序\n"); // 在CPU上打印一条消息
}

// __global__表示这个函数在GPU上可全局调用
__global__ void GPUFunction() // 定义一个在GPU上运行的函数
{
  printf("运行在GPU中的程序\n"); // 在GPU上打印一条消息
}

int main()
{
  CPUFunction(); // 调用在CPU上运行的函数
    // 每个线程块内部的线程共享一些资源,如共享内存和寄存器
  GPUFunction<<<1, 1>>>(); // 在GPU上启动一个线程块,每个线程块中有一个线程,执行GPUFunction
  GPUFunction<<<1, 10>>>(); //配置为在具有 10 线程的单个线程块中运行后,将运行 10 次。
  GPUFunction<<<10, 1>>>(); //配置为在 10 个线程块(每个均具有单线程)中运行后,将运行 10 次。
  GPUFunction<<<10, 10>>>(); //配置为在 10 个线程块(每个均具有 10 线程)中运行后,将运行 100 次。
  cudaDeviceSynchronize(); // 等待GPU上的所有任务完成
}