相关知识收集于网络,主要来自
并增加了一些自己的理解,如有错误,欢迎指正
如有侵权请联系删除
显卡(Video card、Display card、Graphics card、Video adapter)全称显示接口卡,是计算机最基本配置、最重要的配件之一。就像电脑联网需要网卡,主机里的数据要显示在屏幕上就需要显卡。因此,显卡是电脑进行数模信号转换的设备,承担输出显示图形的任务。具体来说,显卡接在电脑主板上,它将电脑的数字信号转换成模拟信号让显示器显示出来。
原始的显卡一般都是集成在主板上,只完成最基本的信号输出工作,并不用来处理数据。随着显卡的迅速发展,就出现了GPU的概念,显卡也分为独立显卡和集成显卡。
GPU这个概念是由Nvidia公司于1999年提出的。GPU是显卡上的一块芯片,就像CPU是主板上的一块芯片(如下图所示)。
自Nvidia提出GPU这个概念后,GPU就进入了快速发展时期。简单来说,其经过了以下几个阶段的发展:
在没有GPU之前,基本上所有的任务都是交给CPU来做的。有GPU之后,二者就进行了分工, CPU负责逻辑性强的事物处理和串行计算,GPU则专注于执行高度线程化的并行处理任务(大规模计算任务)。为什么这么分工?这是由二者的硬件构成决定的。
可以看出, CPU是“主(host)”而GPU是“从(device)”,GPU无论发展得多快,都只能是替CPU分担工作,而不是取代CPU。
CUDA(Compute Unified Device Architecture),通用并行计算架构。它包含CUDA指令集架构以及GPU内部的并行计算引擎。你只要使用一种类似于C语言的 CUDA C语言,就可以开发CUDA程序,从而可以更加方便的利用GPU强大的计算能力,而不是像以前那样先将计算任务包装成图形渲染任务,再交由GPU处理。注意,并不是所有GPU都支持CUDA。
CUDA只是一种并行计算架构,属于软件层面。相关的概念还有OpenCL、OpenMP等。
CUDA Toolkit是CUDA的工具包
一般我们安装CUDA,其实就是安装CUDA Toolkit
从CUDA 11开始,CUDA Toolkit 中的各个组件都是独立的版本。
对于CUDA 11.4,下表列出了各个组件版本:
图片来自 https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#title-new-cuda-tools
下面会介绍CUDA Toolkit中几个重要的组件
上图中,NVIDIA Linux Driver 与 NVIDIA Windows Driver就是不同操作系统的对应的NVIDIA显卡驱动。显卡驱动可以单独安装,也可以和CUDA Toolkit中的组件一起安装
显卡驱动就是用来驱动显卡的程序,它是硬件所对应的软件。驱动程序即添加到操作系统中的一小块代码,其中包含有关硬件设备的信息。没有显卡驱动,操作系统就不能识别显卡,不能调用gpu计算资源
运行CUDA应用程序需要系统至少有一个支持CUDA的GPU和一个与CUDA Toolkit 兼容的显卡驱动。
每个版本的CUDA Toolkit都对应一个最低版本显卡驱动。显卡驱动是向后兼容的。这意味着根据CUDA的特定版本编译的应用程序将继续在后续发布的驱动上也能继续工作
不同版本的CUDA对应的显卡驱动版本如下图:
图片来自 https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#title-new-cuda-tools
nvidia-smi
是nvidia 的系统管理界面 ,其中smi是System management interface的缩写,它可以收集各种级别的信息,查看显存使用情况。此外, 可以启用和禁用 GPU 配置选项 (如 ECC 内存功能)。
一般安装好了显卡驱动,就可以使用该命令
nvidia-smi
Mon Sep 13 12:07:26 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 465.31 Driver Version: 465.31 CUDA Version: 11.3 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... Off | 00000000:05:00.0 Off | N/A |
| 23% 22C P8 9W / 250W | 45MiB / 11177MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 1 NVIDIA GeForce ... Off | 00000000:06:00.0 Off | N/A |
| 23% 22C P8 9W / 250W | 1021MiB / 11178MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 2 NVIDIA GeForce ... Off | 00000000:09:00.0 Off | N/A |
| 23% 18C P8 10W / 250W | 4MiB / 11178MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
CUDA NVCC
其实就是CUDA的编译器,可以从CUDA Toolkit的/bin
目录中获取,类似于gcc就是c语言的编译器
使用命令 nvcc -V
可以查看当前的cuda版本
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243
如果安装好了CUDA,却找不到该命令可能是环境变量没有设置,可以参考https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#post-installation-actions 进行设置。
答案来自 Different CUDA versions shown by nvcc and NVIDIA-smi
runtime API
和 driver API
。两者都有相应的版本libcuda.so
)是由GPU driver installer安装的。nvidia-smi
就属于这一类APIlibcudart.so
以及nvcc
)是由CUDA Toolkit installer安装的如果driver API和runtime API的CUDA版本不一致可能是因为显卡驱动是单独安装的,而不是和CUDA Toolkit中的组件一起安装
由于显卡驱动是向后兼容的,因此一般显卡驱动的版本都要高于当前CUDA Toolkit 所对应的最低版本。 nvidia-smi
获得的CUDA版本一般大于或者等于nvcc -V
获得的CUDA版本,实际运行时是使用的nvcc -V
报告的版本
此外,当使用docker时,nvidia-smi
命令通常会报告安装在宿主机的driver API
CUDA版本,而nvcc -V
会报告安装在docker容器中的CUDA版本。