显卡
显卡(Video card,Graphics card)全称显示接口卡,又称显示适配器,是计算机最基本配置、最重要的配件之一。就像电脑联网需要网卡,主机里的数据要显示在屏幕上就需要显卡。因此,显卡是电脑进行数模信号转换的设备,承担输出显示图形的任务。具体来说,显卡接在电脑主板上,它将电脑的数字信号转换成模拟信号让显示器显示出来。原始的显卡一般都是集成在主板上,只完成最基本的信号输出工作,并不用来处理数据。随着显卡的迅速发展,就出现了GPU的概念,显卡也分为独立显卡和集成显卡
GPU
GPU这个概念是由Nvidia公司于1999年提出的。GPU是显卡上的一块芯片,就像CPU是主板上的一块芯片。那么1999年之前显卡上就没有GPU吗?当然有,只不过那时候没有人给它命名,也没有引起人们足够的重视,发展比较慢。自Nvidia提出GPU这个概念后,GPU就进入了快速发展时期。简单来说,其经过了以下几个阶段的发展:1)仅用于图形渲染,此功能是GPU的初衷,这一点从它的名字就可以看出:Graphic Processing Unit,图形处理单元;2)后来人们发现,GPU这么一个强大的器件只用于图形处理太浪费了,它应该用来做更多的工作,例如浮点运算。怎么做呢?直接把浮点运算交给GPU是做不到的,因为它只能用于图形处理(那个时候)。最容易想到的,是把浮点运算做一些处理,包装成图形渲染任务,然后交给GPU来做。这就是GPGPU(General Purpose GPU)的概念。不过这样做有一个缺点,就是你必须有一定的图形学知识,否则你不知道如何包装。
GPU和显卡的关系
一句话理解就是:GPU是显卡上的一块芯片
CUDA
CUDA(Compute Unified Device Architecture),通用并行计算架构,是一种运算平台。它包含CUDA指令集架构以及GPU内部的并行计算引擎。你只要使用一种类似于C语言的CUDA C语言,就可以开发CUDA程序,从而可以更加方便的利用GPU强大的计算能力,而不是像以前那样先将计算任务包装成图形渲染任务,再交由GPU处理。CUDA 不仅仅是一个 GPU 计算的框架,它对下抽象了所有的英伟达出品的 GPU,对上构建了一个通用的编程框架,它实质上制定了一个 GPU 和上层软件之间的接口标准。一句话理解CUDA就是提供了软件与硬件之间通信的接口。在所有的半导体公司中,制定出软件与硬件之间的标准,而且现在还算成功的,只有 3 个,一个是 x86 指令集,一个是 ARM 指令集,还有一个就是 CUDA 了。
NVIDIA的不同系列的产品
GeForce系列:GeForce 系列是 NVIDIA 面向个人电脑和游戏市场的产品线。这些 GPU专为游戏和多媒体应用程序而设计,提供高性能的图形处理能力,以实现更好的游戏体验和图形渲染效果。GeForce产品系列包括高端、中端和入门级别的图形卡,适用于各种游戏需求。
Quadro系列:Quadro 系列是专业工作站 GPU,专为专业图形和计算应用程序而设计。这些产品通常用于视频编辑、计算机辅助设计(CAD)、科学计算、虚拟现实和仿真等领域,提供更高的精度、可靠性和性能,以满足专业用户的需求。
Tesla系列:Tesla 系列是面向高性能计算和数据中心应用的GPU加速器。这些产品旨在加速科学计算、深度学习、人工智能等高性能计算工作负载,提供高度并行的计算性能和大规模数据处理能力。Tesla GPU 通常用于大规模数据中心、研究机构和企业级计算集群。
NVIDIA A100系列:NVIDIA A100 Tensor Core GPU 是 NVIDIA 最新的数据中心加速器,专为深度学习和高性能计算而设计。它采用了最新的架构和 Tensor Core 技术,提供卓越的 AI 性能和加速计算,适用于云计算、超级计算机和机器学习领域。
NVIDIA Jetson系列:Jetson 系列是嵌入式 AI 计算平台,旨在为边缘设备提供深度学习和计算能力。这些产品适用于机器人、自动驾驶汽车、智能摄像头、工业自动化等应用,使设备能够进行实时的AI推断和处理。
NVIDIA DGX系列:DGX 系列是 NVIDIA 的深度学习工作站和数据中心解决方案,集成了多个 NVIDIA GPU 和深度学习软件,旨在为深度学习研究人员和数据科学家提供高性能的深度学习平台。
NVIDIA Drive系列:Drive 系列是 NVIDIA 面向自动驾驶和智能交通解决方案的产品线。这些产品包括 Drive AGX 系统,用于自动驾驶汽车和自动驾驶解决方案的开发。
NVIDIA不同产品型号列举
GeForce 系列(面向个人电脑和游戏市场):
GeForce RTX 3090
GeForce RTX 3080
GeForce RTX 3070
GeForce RTX 3060 Ti
GeForce RTX 3060
GeForce GTX 1660 Ti
GeForce GTX 1660 Super
GeForce GTX 1650
Quadro 系列(专业工作站 GPU):
Quadro RTX 8000
Quadro RTX 6000
Quadro RTX 5000
Quadro P5000
Quadro P4000
Quadro K2200
Quadro K1200
Tesla 系列(数据中心加速器):
Tesla V100
Tesla P100
Tesla K80
Tesla T4
Tesla A100
NVIDIA A100 系列(数据中心加速器):
NVIDIA A100 80 GB
NVIDIA A100 40 GB
NVIDIA Jetson 系列(嵌入式 AI 计算平台):
NVIDIA Jetson Xavier NX
NVIDIA Jetson Xavier AGX
NVIDIA Jetson Nano
NVIDIA Jetson TX2
NVIDIA DGX 系列(深度学习工作站和数据中心解决方案):
NVIDIA DGX A100
NVIDIA DGX Station A100
NVIDIA DGX-1
NVIDIA Drive 系列(自动驾驶和智能交通解决方案):
NVIDIA Drive AGX Xavier
NVIDIA Drive AGX Pegasus
NVIDIA Drive PX2
提供多GPU的产品系列型号列举
NVIDIA Tesla系列:Tesla是专为数据中心和高性能计算而设计的GPU加速卡,它们通常支持多GPU配置。例如,NVIDIA Tesla V100、Tesla P100 和Tesla A100都可以在数据中心服务器上配置多张卡以提供更大的并行计算性能。
NVIDIA Quadro系列:Quadro是专业工作站GPU,支持多GPU配置,以加速专业图形和计算应用程序。多GPU配置通常用于CAD、虚拟现实和科学计算工作站。
NVIDIA DGX系列:DGX系列是深度学习工作站和数据中心解决方案,通常包括多张GPU卡,以提供大规模的深度学习计算性能。例如,NVIDIA DGX A100可以配置多张A100 GPU卡。
NVIDIA NVLink技术:NVIDIA的NVLink技术允许多张GPU卡之间进行高速互联,以实现更好的通信和协作。这种技术通常在支持NVLink的GPU卡上使用,如NVIDIA Tesla V100和A100。
NVIDIA CUDA Toolkit
NVIDIA CUDA 编译器(nvcc):这是 CUDA 编程的核心工具,用于将 CUDA C/C++ 代码编译成GPU可执行文件。它支持将 CPU 代码与 GPU 代码集成在一起,并生成针对不同GPU架构的可执行文件。
CUDA 库:CUDA Toolkit 包括一系列高性能的GPU加速库,例如 cuBLAS(基本线性代数子程序库)、cuFFT(快速傅立叶变换库)、cuDNN(深度神经网络库)等。这些库可用于在GPU上执行常见的数学和深度学习操作。
CUDA 运行时库:CUDA 运行时库包括 GPU 加速的运行时函数,用于管理 GPU 设备、内存分配和数据传输。它们使 GPU 程序的执行更加灵活和方便。
CUDA 驱动程序:CUDA Toolkit 需要与支持的 NVIDIA GPU 驱动程序配合使用。这些驱动程序允许操作系统与 GPU 通信,并支持 CUDA 程序的执行。
CUDA Visual Profiler:这是一个性能分析工具,可帮助开发者识别和优化CUDA应用程序中的性能瓶颈。它提供了可视化的性能数据和分析工具,以帮助改进应用程序的性能。
NVIDIA Nsight 系列工具:CUDA Toolkit 包括一系列 Nsight 工具,如 Nsight Eclipse Edition(用于集成开发环境)、Nsight Visual Studio Edition(用于 Visual Studio)、Nsight Compute(用于性能分析)等。这些工具用于帮助开发者更轻松地编写、调试和分析 CUDA 程序。
CUDA 样例代码和文档:CUDA Toolkit 包含大量示例代码和详细的文档,以帮助开发者入门并学习如何使用 CUDA 进行编程。
NVIDIA GPU 加速库:除了 CUDA 库之外,NVIDIA 也提供了其他 GPU 加速库,如 NVIDIA Math Kernel Library(cuBLAS 和 cuFFT 的加速版本)、NVIDIA Performance Primitives(NPP)等。
NVIDIA CUDA Driver
GPU 驱动程序:这是 CUDA Driver 的核心部分,它包括适用于特定 NVIDIA GPU 的驱动程序。GPU 驱动程序负责与 GPU 通信,管理 GPU 的资源和执行 CUDA 程序。它允许操作系统和应用程序与 GPU 进行通信和控制。
CUDA 驱动程序:这是 CUDA Toolkit 的一部分,但也包含在 CUDA Driver 中。CUDA 驱动程序包括 CUDA 运行时库和 CUDA 编译器。它允许开发者在计算机上编写和运行 CUDA 程序,以利用 GPU 进行并行计算。
NVIDIA 控制面板:NVIDIA 控制面板是一个图形用户界面(GUI)工具,用于配置和调整与 NVIDIA GPU 相关的设置,如显示设置、性能选项和电源管理。
NVIDIA System Management Interface(nvidia-smi):这是一个命令行工具,用于监视和管理系统中的 NVIDIA GPU。nvidia-smi 允许用户查看 GPU 的状态、温度、内存使用情况以及其他性能信息,并执行一些基本的管理操作。
NVIDIA 显卡驱动程序文档:NVIDIA 提供了有关其 GPU 驱动程序的详细文档,以帮助开发者和管理员了解驱动程序的功能、配置选项和使用方法。
NVIDIA CUDA 驱动程序文档:NVIDIA 也提供了有关 CUDA 驱动程序的文档,其中包括有关 CUDA 运行时库、CUDA 编译器和其他与 CUDA 相关的内容的信息。
CUDA Toolkit与CUDA Driver的区别
CUDA Driver 和 CUDA Toolkit 是两个不同但密切相关的 NVIDIA 软件包,用于支持 GPU 编程和 GPU 加速计算,它们有以下主要区别:
CUDA Driver:
功能:CUDA Driver 是 NVIDIA GPU 驱动程序的一部分,负责管理和控制 GPU 硬件。它是操作系统与 GPU 之间的接口,允许操作系统与 GPU 通信、分配 GPU 资源以及执行 GPU 上的计算任务。CUDA Driver 使 GPU 可以正常工作,但它不提供 CUDA 编程接口或编程工具。
CUDA Toolkit:
功能:CUDA Toolkit 是用于 GPU 编程的软件包,提供了 CUDA 编程接口、编译器、运行时库、性能分析工具和示例代码等一系列工具和库。CUDA Toolkit 允许开发者编写并行计算代码,并将其在 NVIDIA GPU 上执行。它还包括与 GPU 相关的库,如 cuBLAS、cuFFT 和 cuDNN,用于加速数学和深度学习任务。
总的来说,CUDA Driver 是用于管理和控制 GPU 硬件的底层软件,而 CUDA Toolkit 是用于在 GPU 上进行编程的开发工具集。开发者需要同时安装 CUDA Driver 和 CUDA Toolkit 才能充分利用 NVIDIA GPU 进行高性能并行计算。
绘制图形知识科普
现在的显示器分辨率是 1080p,就是说这个显示器上的所有的图形,都是由水平方向 1920 行,垂直方向 1080 列的光点矩阵组成,算一下 1920x1080,也就是 207 万个光点组成。这些光点会被记录成一个二维数组,就是一张图。每一个光点,专业上称为像素,是由红绿蓝三种基本颜色调和而成。而这三个颜色,都是以 0-255 之间的一个数字表示。也就是一个像素,就是 3 个数字,例如一个红色的像素,就是(255,0,0)。那么,要生成一张红色的图,在 1080p 的分辨率下,就需要提供 207 万个(255,0,0)红色像素的数组。
而且这只是一张静态的图像,如果是视频,每秒有 60 帧图像,那一秒就需要处理上亿个像素了。其实,在 GPU 处理图像,特别是 3D 图像的时候,倒不是一个像素一个像素处理的,而是把 3D 图形转换成可以在 2D 屏幕上展现出来的,由顶点构成的无数个三角形。然后,根据每个三角形的三个顶点,把这个三角形所覆盖区域换算成像素,然后再做颜色效果,基本上就得到了屏幕上的最终效果。下面是用 GPU 处理一个 3D 桌子图像的绘制示意图,你大概可以理解这个处理过程。
可以看到,绘图任务需要并行处理海量数据,这对擅长做串行数据处理的 CPU 来说,既不合适,又负担很重。于是在 1980-1990 年代,图形加速卡这种外设开始出现。当然除了硬件方面,在绘制图形方面也有专门的软件工具,例如OpenGL,OpenGL(Open Graphics Library)是一种跨平台的图形编程接口,用于渲染2D和3D图形。它是一个开放标准,由一组函数和命令组成,允许开发者利用计算机的图形硬件来创建图形应用程序。