一、简介
GPU是图形处理器(Graphics Processing Unit)的缩写,它是一种专门设计用来加速图形渲染的处理器,其内部的线程众多,这些线程能够并行处理数据,因此能够应用于机器学习、视频编辑和游戏渲染等场景。
GPU分为两种类型:集成和独立。集成GPU嵌入在CPU旁边。而独立GPU是一块单独的芯片,通常需要通过主板上的PCI Express进行连接。
注:本篇的参考学习网站为:
二、显卡的外围电路
一块完整的显卡除了GPU芯片外,还包括显存、随机存取存储器数字模拟转换器、主板接口、视频接口、散热器(散热片、风扇)等硬件,驱动程序软件等软件。下面将逐一进行介绍。
1、显存
显存(VRAM)是视频随机存取存储器(Video Random Access Memory)的缩写,是一种特殊的DRAM,通常用来存储顶点和纹理数据。
渲染图像时,CPU从HDD或SSD中读取顶点和纹理数据到RAM中,然后数据从RAM再传到VRAM中。(RAM中的数据除非不再需要,否则一般选择保留顶点数据)
2、RAMDAC
RAMDAC是随机存取存储器数字模拟转换器(Random Access Memory Digital-to-Analog Converter)的缩写。它是一种单芯片,用于将数字编码的图像转换为模拟信号,以便显示器能够显示。RAMDAC实际上由四个不同的部件组成:用于存储颜色映射的SRAM和三个数字模拟转换器(DAC),分别对应显示器的红、绿、蓝电子枪。(SRAM是静态随机存取存储器(Static Random Access Memory)的缩写,它比DRAM更快但更贵,通常用作缓存)
3、主板接口
主板接口通常是PCI Express接口,是GPU与CPU的连接总线,负责传输指令和数据。
4、视频接口
显卡通常包括多种接口,用于连接显示器和其他设备。常见的接口类型包括VGA、DVI、HDMI、DisplayPort、USB-C和Thunderbolt等。
- VGA(Video Graphics Array)接口是一种模拟接口,主要用于连接CRT显示器,其成本低廉、易于获取。
- DVI(Digital Visual Interface)接口可以传输模拟和数字信号,支持高分辨率显示器,但不支持传输音频。
- HDMI(High-Definition Multimedia Interface)接口是一种数字接口,支持高清视频和音频信号传输,支持加密,但传输距离通常不超过35米或10米。
- DisplayPort接口是一种数字接口,支持高分辨率显示器和多显示器设置。
- USB-C接口不仅支持上述所有功能,还可以提供快速充电,也可以通过适配器与HDMI、VGA和DisplayPort接口兼容。
- Thunderbolt接口与USB-C接口类似,其将PCI Express和DisplayPort两种串行信号结合在一起,并提供直流电源,最多可以支持六个外设。
选择哪种接口取决于成本需求和显示器的兼容性等。
5、显卡驱动程序
显卡驱动程序是一种软件,它为显卡提供操作指令,使显卡能够在计算机上渲染图像。
编写显卡驱动程序需要深入了解计算机硬件和软件,以及操作系统和编程语言。通常情况下,显卡驱动程序由显卡制造商(如英特尔、英伟达和AMD)提供,并且会定期更新以修复错误和提高性能。
三、GPU芯片
GPU芯片是显卡的核心部件,它负责执行计算任务。
1、片上缓存
片上缓存(on-chip Cache)置于GPU内部,分为一级和二级。一级缓存运行更快,但空间只有几百KB;二级缓存运行慢,但空间有几MB。
显存中的数据要先读到二级缓存,然后再到一级缓存。
2、GPU寄存器堆
寄存器堆(register file)用于存放将要处理的数据。其访问速度最快,但是容量较小。以目前最新的Ampere架构的GA102为例,每个SM上的寄存器总量256KB,使用时被均分为了4块,且该寄存器块的64KB空间需要被warp中线程平均分配,所以在线程多的情况下,每个线程拿到的寄存器空间相当小。
通常来说,一级缓存的数据需要先放入GPU寄存器堆,最后才能进入GPU内核进行运算。
3、GPU运算核心
GPU运算核心通常包括:
GTE(Giga Thread Engine)负责将线程块Block分配给SM,并管理所有正在进行的工作。
SM(Streaming Multiprocessors,流多处理器)负责执行Block。SM是一种单指令多线程(SIMT)架构的处理器,类似于单指令流多数据流(SIMD)的特点,包括指令发射单元、若干个流处理器(streamingProcessor,sp)或标量处理器(Scalarproeessor,SP)、特殊函数处理器(speeial Funetion Proeessor,SFU)、可快速访问的共享存储器(shared memory)以及指令和常量(constant)缓存。
MC(Memory Controller)内存控制器,负责访问显存。
四、设置全局变量
在图形渲染管线之前,还需经历如下步骤(主要是CPU与GPU的通信):
1、设置Render State
Render State 是网格渲染方式的一种全局定义,它包含如下信息:顶点、像素着色器、纹理、材质、光照、透明度等。
2、绘图调用
此命令是CPU告诉GPU,绘制哪些东西,是一个命令。这些命令通常会由CPU发送至GPU的命令缓冲区。
五、图形渲染管线
图形渲染流水线(Graphics Pipeline)是指GPU在渲染帧时数据输入和输出的操作流程。给定流水线状态和输入,GPU执行一系列操作来创建最终图像。
在完成上述步骤后,进行经典的图形渲染管线:
1、接受顶点
将顶点数据先从RAM传输到VRAM,再从VRAM传输到缓存中。
2、顶点转换
将顶点从模型空间转换到世界空间,然后再转换到相机空间。
3、顶点插值
赋予每个顶点属性,例如颜色、法线等。
4、创建三角形
将顶点组成三角形面片。
5、创建fragment
这一步也成为光栅化(rasterization),将图元转为带有颜色和深度值的像素。
6、着色
将像素进行着色。
7、输出到帧缓存
将着色后的像素放置在帧缓存(Frame Buffer)中。
8、显示
把帧缓存中的图像显示在屏幕上。