CUDA编程-01: 搭建CUDA编程环境
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
》
CUDA编程-01: 搭建CUDA编程环境相关推荐
- 来自GPU的Hello World-基于Win10+VS2019+CUDA 11.0搭建CUDA编程环境
序 CPU和GPU 当代计算机的两个核心,GPU计算与CPU计算的结合,使得原本的计算性能得到大幅度的提高,两者功能的互补性使得CPU+GPU的异构并行计算得到快速发展.为了支持使用CPU+GPU ...
- java alsa 编程_搭建JavaWeb开发环境
更好的阅读体验欢迎访问博客搭建JavaWeb开发环境 前言 在服务器上搭建javaweb开发环境,特此记录 一.安装JDK 查看默认JDK java -version rpm -qa|grep jav ...
- 侯捷老师-01面向对象高级编程
侯捷老师-01面向对象高级编程 01面向对象高级编程 1.编程习惯 总结 2.三大函数 2.1 拷贝构造函数.拷贝赋值函数.析构函数(带有指针的类) 2.2 构造函数.析构函数 局部变量.全局变量 3 ...
- GPU编程自学2 —— CUDA环境配置
深度学习的兴起,使得多线程以及GPU编程逐渐成为算法工程师无法规避的问题.这里主要记录自己的GPU自学历程. 目录 <GPU编程自学1 -- 引言> <GPU编程自学2 -- CUD ...
- linux运行并行计算cuda,并行化计算与CUDA编程
原标题:并行化计算与CUDA编程 近年来,显卡的更新换代也比较快,NVIDIA今年的发布会也宣布了RTX3080TI即将到来.显卡的运算能力也越来越强. 很多人对显卡的了解可能源于游戏,但是你的显卡不 ...
- CUDA刷新器:CUDA编程模型
CUDA刷新器:CUDA编程模型 CUDA Refresher: The CUDA Programming Model CUDA,CUDA刷新器,并行编程 这是CUDA更新系列的第四篇文章,它的目标是 ...
- 一种基于CUDA标准的异构并行编程模型开发简介
一种基于CUDA标准的异构并行编程模型开发简介 目录 一.绪论 1.1研究背景及意义 1.2目标平台体系结构简介 二.HPPA基本组成结构 三.编译工具链开发 3.1 拆分工具HPCufe开发 3.2 ...
- CUDA 8的混合精度编程
CUDA 8的混合精度编程 Volta和Turing GPU包含 Tensor Cores,可加速某些类型的FP16矩阵数学运算.这样可以在流行的AI框架内更快,更轻松地进行混合精度计算.要使用Ten ...
- Ubuntu18.04+RTX 2080Ti+CUDA 10.0 +cuDNN+PyTorch搭建深度学习环境
SSH无密码登陆 安装SSH Server Ubuntu 默认已安装了 SSH client,此外还需要安装 SSH server: sudo apt-get install openssh-serv ...
最新文章
- NLP(1) | 词向量one hot编码词向量编码思想
- php 面对对象总结,PHP 面向对象总结
- 决策树--从原理到实现
- R学习笔记:文档间函数调用
- 类C编译器 C代码实现
- 日志管理(一):slf4j原理简单介绍
- C语言课设 成绩管理程序
- 开发人员对Spring vs JavaEE的看法
- MS_DOS头部 IMAGE_DOS_HEADER
- 自学大数据前,零基础,三个月,找到一份测试工作
- 解决eclipse为什么不能查看源码
- 新手学习算法----二叉树(将一个二叉查找树按照中序遍历转换成双向链表)
- 10.31,11.1外出纪要
- python 协程进阶
- Clickhouse 实现row_number、dense_rank
- 圣帕特里克 VoxEdit 大赛
- 论文阅读——R树:一种用于空间查找的动态索引结构(算是节译)
- 电脑耳机电流声的消除2021-09-11
- 计算机硬盘分区安全,如何安全、简便的对固态硬盘分区?
- 如何向码云(Gitee)上传项目