注意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上的所有任务完成
}