我报名参加金石计划1期应战——分割10万奖池,这是我的第6篇文章,点击检查活动概况
CUDA简介
CUDA
是英伟达开发的一种并行计算渠道和编程模型,运用它能够让编程人员十分方便地运用GPU
强壮的算力。支撑CUDA
的GPU
有数百个内核,能够一起运转数千个计算线程,这些内核具有同享的资源,包含寄存器文件和同享内存,片上同享内存允许在这些内核上运转的并行任务同享数据而无需经过体系内存总线发送数据。CUDA
基于以下规划目的进行开发:
- 为规范编程语言(
C/C++
)供给一小组扩展支撑并行算法的直接完成,运用CUDA C/C++
,程序员能够专注于算法的并行化任务,而不是花时间在他们的施行上。 - 支撑应用程序一起运用
CPU
和GPU
进行异构计算,应用程序的串行部分在CPU
上运转,并行部分则被加载到GPU
上运转,CPU
和GPU
都是具有独立内存空间的独立设备,允许在CPU
和GPU
上一起进行计算而不会争用内存资源。因而,CUDA
能够增量应用于现有应用程序。
本文将介绍如何在Ubuntu 20.04
中装置CUDA
开发东西,建立CUDA
编程环境。
装置前的准备工作
每个CUDA
版别对操作体系和其他依靠东西软件版别的要求能够从该版别的release notes
中找到,下图是CUDA 11.0
支撑的Linux
发行版别和相关东西的支撑版别,在装置CUDA
之前,咱们需求做一些准备工作。
1. 验证是否有可用的GPU
要运用CUDA
进行并行计算,首要前提是至少有一个英伟达GPU
设备。想要知道自己的机器上是否装置有英伟达GPU
,能够在指令行终端中履行以下指令:
lspci | grep -i nvidia
在我机器上得到的成果如下:
01:00.0 VGA compatible controller: NVIDIA Corporation TU104 [GeForce RTX 2080] (rev a1)
01:00.1 Audio device: NVIDIA Corporation TU104 HD Audio Controller (rev a1)
01:00.2 USB controller: NVIDIA Corporation TU104 USB 3.1 Host Controller (rev a1)
01:00.3 Serial bus controller [0c80]: NVIDIA Corporation TU104 USB Type-C UCSI Controller (rev a1)
06:00.0 VGA compatible controller: NVIDIA Corporation TU104 [GeForce RTX 2080] (rev a1)
06:00.1 Audio device: NVIDIA Corporation TU104 HD Audio Controller (rev a1)
06:00.2 USB controller: NVIDIA Corporation TU104 USB 3.1 Host Controller (rev a1)
06:00.3 Serial bus controller [0c80]: NVIDIA Corporation TU104 USB Type-C UCSI Controller (rev a1)
从上面的成果中能够知道,我的机器上装了2个型号为GeForce RTX 2080
的GPU
。
咱们也能够在英伟达网站上查询自己的GPU
型号是否是支撑CUDA
的:https://developer.nvidia.com/cuda-gpus
。
2. 验证操作体系是否支撑
CUDA
开发东西仅在某些特定发行版别的Linux
操作体系,假如想知道自己运用的是哪个Linux
发行版别,能够在指令行终端中履行以下指令:
uname -m && cat /etc/*release
在Ubuntu 20.04
体系中得到如下成果:
x86_64
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.3 LTS"
NAME="Ubuntu"
VERSION="20.04.3 LTS (Focal Fossa)"
3. 验证gcc版别
运用CUDA
进行开发需求gcc
编译器(运转CUDA
应用程序不需求),gcc
通常会作为Linux
的一部分进行装置,能够运转如下指令检查gcc
的版别:
gcc --version
在Ubuntu 20.04
体系中得到如下成果,gcc
版别为9.3.0
:
gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
4. 验证操作体系是否有正确的内核头文件和开发包
CUDA
驱动程序要求在装置驱动程序时装置用于运转内核版别的内核头文件和开发包,在装置CUDA
之前最好先承认一下内核头文件和开发包,内核头文件的版别能够经过指令uname -r
进行检查,假如要装置当前体系运转内核对应的内核头文件和开发包,能够履行下面的指令:
sudo apt-get install linux-headers-$(uname -r)
6. 下载CUDA装置包
CUDA
装置包能够从英伟达网站http://developer.nvidia.com/cuda-downloads
进行下载。下载的时分需求挑选操作体系和计算架构等信息,能够挑选deb
文件或runfile文件
进行装置,下载下来的装置文件中包含了GPU
驱动和CUDA
的库文件、头文件、例程、东西等。
用runfile进行装置
在上一节中介绍了CUDA
能够经过deb
或runfile
文件进行装置,本文介绍运用runfile
文件进行装置的方法。
1. 删除旧的GPU驱动
在装置之前,假如咱们的体系现已装置了英伟达GPU
驱动,主张先运转如下指令进行删除:
sudo apt-get --purge remove nvidia-*
2. 禁用Nouveau驱动
要装置英伟达GPU
驱动,有必要先禁用Nouveau
驱动。首要经过下面的指令检查Nouveau
驱动是否现已被加载,假如履行指令有输出内容,说明Nouveau
驱动还没有被禁用。
lsmod | grep nouveau
要禁用Nouveau
驱动,首要履行指令创立并修改文件
sudo vim /etc/modprobe.d/blacklist-nouveau.conf
然后在文件中增加如下内容
blacklist nouveau
options nouveau modeset=0
再履行指令重新生成内核initramfs
镜像文件
sudo update-initramfs -u
3. 装置CUDA
上一步禁用Nouveau
驱动后,咱们需求重启体系并进入指令行形式,然后履行下面的指令进行装置(这里假设下载的runfile
文件为cuda_11.0.2_450.51.05_linux.run
,也就是CUDA
版别为11.0
,GPU
驱动版别为450.51.05
):
sudo sh cuda_11.0.2_450.51.05_linux.run
在装置过程中咱们需求根据提示进行一些设置:
- 终止用户答应协议(
End User License Agreement
),输入accept
然后按回车进行下一步。 - 装置
GPU
驱动。 - 装置
CUDA
开发东西,需求设置装置途径和是否创立/usr/local/cuda
软链接,能够直接按回车用默认的即可。 - 装置
CUDA
例程,默认会装置在$(HOME)/NVIDIA_CUDA-11.0_Samples
途径下。
装置好今后,需求设置一些环境变量:
export PATH=/usr/local/cuda-11.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.0/lib64:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=/usr/local/cuda-11.0/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/usr/local/cuda-11.0/include:$CPLUS_INCLUDE_PATH
假如要卸载装置好的CUDA
,能够履行如下指令:
sudo /usr/local/cuda-11.0/bin/cuda-uninstaller
运用CUDA例程
CUDA
开发东西的版别能够经过nvcc -V
指令进行检查,下面是我的履行成果:
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2020 NVIDIA Corporation
Built on Thu_Jun_11_22:26:38_PDT_2020
Cuda compilation tools, release 11.0, V11.0.194
Build cuda_11.0_bu.TC445_37.28540450_0
nvcc
指令用于编译CUDA
应用程序,它能够调用gcc
编译C语言程序,调用英伟达PTX
编译器编译CUDA
程序。
上一节说了在CUDA
装置过程中默认会在$(HOME)/NVIDIA_CUDA-11.0_Samples
目录下装置CUDA
例程,咱们能够到该目录下履行指令make
对例程进行编译,编译之前能够先履行下面的指令装置必要的依靠库:
sudo apt-get install g++ freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libglu1-mesa libglu1-mesa-dev libglfw3 libglfw3-dev
编译成功的可履行文件会被拷贝到该目录下的bin/x86_64/linux/release
文件夹下面,咱们能够运转一些例程用于验证CUDA
环境是否现已构建好。
运转deviceQuery
能够查询每个GPU
的详细信息:
运转bandwidthTest
能够测验数据传输带宽:
参考资料
- 《
CUDA Installation Guide for Linux.pdf
》