当前位置: 首页 > news >正文

WSL2Linux 子系统(十二)

wsl 子系统安装 cuda 环境

《WSL2Linux 子系统(十一)》讲述 WSL 网络转为桥接模式的两种方法,WSL 网络桥接模式无论是静态 IP 还是动态分配 IP 均支持。本篇文章则是简单讲述 WSL 安装 cuda 环境。

作者:炭烤毛蛋 ,点击博主了解更多。


提示: 请按照系统版本安装指定 cuda。

文章目录

  • wsl 子系统安装 cuda 环境
  • 1. 安装 cuda
  • 2. 配置 cuda 环境变量
  • Tips
  • 参考资料
  • 结语


1. 安装 cuda

  • 下载安装包
    本文 Linux 版本使用 Ubuntu 20.04,安装 cuda 环境需要匹配系统 Linuix,系统平台 x86_64, 系统分支为 WSL-Ubuntu,WSL 2.版本,此处使用本地安装脚本 runfile。
    cuda 下载链接为 https://developer.nvidia.com/cuda-11.3.0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=WSL-Ubuntu&target_version=2.0&target_type=deb_network
    cuda-url

  • 下载在线安装类型中 runfile (local),

wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run
  • 安装 cuda
    直接运行 cuda 安装脚本。
sudo sh cuda_11.3.0_465.19.01_linux.run

跳过安装过程错误提示执行安装脚本。

sudo sh cuda_11.3.0_465.19.01_linux.run --override

2. 配置 cuda 环境变量

安装完成,配置环境变量

sudo vim ~/.bashrc
#在环境变量配置文件中增加 cuda 变量
export LD_LIBRARY_PATH=/usr/local/cuda/lib64
export PATH=$PATH:/usr/local/cuda/bin

生效刚修改配置。

source ~/.bashrc

#查看cuda版本

nvcc -V

查看nvidia界面,这个需要在原本的Windows系统上安装nvidia驱动的

nvidia-smi

可以正常显示 cuda 版本证明 cuda 环境安装完成。

Tips

  1. 安装 cuda 后遗漏 gcc
    缺少 gcc 错误提示如下:
unsupported GNU version! gcc versions later than 10 are not supported! The nvcc flag '-allow-unsupported-compiler' can be used to override this version check; however, using an unsupported host compiler may cause compilation failure or incorrect run time execution. Use at your own risk.

由于linux中可以有多个版本的gcc和g++,我们可以为系统默认的gcc和g++指定特定的默认版本。对于cuda的nvcc来说有更方便的方法,那就是nvcc会优先读取自身路径下的gcc然后如果没有再读取系统默认路径下的gcc。只需要为nvcc设置特定版本gcc的软连接。

查看当前 gcc 版本

gcc -v

本文中使用 cuda 指定安装 gcc version10 版本,

sudo apt-get install gcc-10
sudo apt-get install g++-10

gcc 软链接到 cuda 目录

sudo ln -s /usr/bin/gcc-10 /usr/local/cuda/bin/gcc
  1. 验证 cuda
    编写一个简单的 CUDA 程序,并进行交叉编译和执行。这个文件命名为 a.cu,在以下增加如下内容:
// a.cu
#include <iostream>__global__ void vectorAdd(const float* A, const float* B, float* C, int N) {int i = blockIdx.x * blockDim.x + threadIdx.x;if (i < N) {C[i] = A[i] + B[i];}
}int main() {int N = 1 << 20; // 1M elementssize_t size = N * sizeof(float);// Allocate host memoryfloat* h_A = (float*)malloc(size);float* h_B = (float*)malloc(size);float* h_C = (float*)malloc(size);// Initialize input vectorsfor (int i = 0; i < N; ++i) {h_A[i] = i;h_B[i] = i;}// Allocate device memoryfloat *d_A, *d_B, *d_C;cudaMalloc(&d_A, size);cudaMalloc(&d_B, size);cudaMalloc(&d_C, size);// Copy data from host to devicecudaMemcpy(d_A, h_A, size, cudaMemcpyHostToDevice);cudaMemcpy(d_B, h_B, size, cudaMemcpyHostToDevice);// Execute kernelint threadsPerBlock = 256;int blocksPerGrid = (N + threadsPerBlock - 1) / threadsPerBlock;vectorAdd<<<blocksPerGrid, threadsPerBlock>>>(d_A, d_B, d_C, N);// Copy result from device to hostcudaMemcpy(h_C, d_C, size, cudaMemcpyDeviceToHost);// Verify resultsfor (int i = 0; i < N; ++i) {if (h_C[i] != h_A[i] + h_B[i]) {std::cerr << "Error at index " << i << ": " << h_C[i] << std::endl;return -1;}}std::cout << "Vector addition completed successfully." << std::endl;// Free memoryfree(h_A);free(h_B);free(h_C);cudaFree(d_A);cudaFree(d_B);cudaFree(d_C);return 0;
}

使用 NVIDIA 的 nvcc 编译器来编译 CUDA 文件。

nvcc -o vectorAdd a.cu

在终端中运行生成的可执行文件。

./vectorAdd

提示:编译时指定架构:使用 -gencode 标志为特定架构生成代码。

nvcc -o vectorAdd a.cu -gencode arch=compute_52,code=sm_52

参考资料

CUDA Programming Guide
NVIDIA Developer Zone

结语

不枉博主详细讲解,欢迎订阅博主–炭烤毛蛋 。


http://www.mrgr.cn/news/43658.html

相关文章:

  • we3.0里的钱包是什么?
  • CANoe_TestModule截图功能TestReportAddWindowCapture
  • HTML5 新元素
  • 【C++】关键字+命名空间
  • 并查集——从LeetCode题海中总结常见套路
  • C# 文件与文件夹操作指南:深入探索流、文件流及文件夹管理
  • 查缺补漏----IP通信过程
  • Linux下静态库与动态库制作及分文件编程
  • SQL专项练习第三天
  • allegro精确画圆形边框
  • Perl 子程序(函数)
  • SQL Server—T-sql函数详解
  • CXO、CRO、CMO、CDMO相关概念
  • 开源的云平台有哪些?
  • 【分布式微服务云原生】探索Redis:数据结构的艺术与科学
  • 预算有限也能玩转 AI:香橙派、树莓派与 Jetson 的选择攻略
  • 设备之间的通信方式
  • 如何在 SQL 中插入一条新记录 ?
  • InnoDB 磁盘结构 - RedoLog
  • Abstract Factory(抽象工厂模式)