图形处理器(Graphics Processing Unit,GPU)又称显示核心、视觉处理器、显示芯片,是一种浮点性能强大的通用并行处理器件。
发展历程
编辑本文以图形处理器发展过程中不同类型为线索介绍GPU的发展历程。
图形显示
图形处理设备最早可以追溯到二十世纪七十年代。Fujitsu公司生产的视频转换器和Namco游戏公司生产的专用图形处理设备被广泛应用到街机游戏机,拉开了图形处理设备发展的序幕。八十年代,NEC公司是最早利用大规模集成芯片技术生产出图形处理设备的企业,并降低了图形处理设备的设计生产成本。随后,Williams Electronics公司生产的图形处理芯片可以快速处理16色位图。Commodore Amiga公司生产的图形处芯片不仅实现了对位图的加速处理,还可以实现线条绘制和面积填充等图形功能,但是它需要利用自己专门的指令集。德州仪器也开发出第一款集成了片上图形芯片的微处理器。之后两年中,Sharp公司和Fujitsu公司生产的图形处理芯片分别可以支持16位和24位的调色板。Namco和Taito游戏公司在1988年开发出了第一款专用的3D多边形处理卡,并用于他们的街机系统中。
2D、3D图形加速
九十年代,2D图形加速已经成为图形处理芯片的重要特性之一。随着生产制造工艺的发展,图形处理芯片的集成度也得到逐步提升。为了更好的满足2D图形处理任务的应用需求,出现了专门的图形编程接口API,其中以微软的WinG和Direct Draw为典型代表。这个时期,3D图形的应用也得到逐步增长,催生了具有3D图形处理能力的图形处理设备的产生。为了开发个人计算机的CAD市场,1994年Matrox公司推出MatroxIm pression。它是第一个PC机上的3D图形加速器。而在PC机上3D图形芯片的真正突破是1996年Interactve公司推出的Voo-doo芯片,开创了PC机可以代替昂贵的图形工作站的新时代。Fujitsu公司在1997年发布了个人电脑所用的第一款3D几何处理器。同年,Mitsubishi公司生产了一款全功能的图形处理芯片,支持图形的变换和光照功能。1999年NVIDIA发布了世界上首款集成了变换、光照、三角形构成、裁剪、纹理和染色引擎的图形处理器GeForce 256,开启了真正意义上的GPU研制历程。
第一款用户级图形处理器GeForce256
统一渲染
进入到二十一世纪,GPU进入了快速发展阶段。2001年,NVIDIA推出了第一款具有可编程渲染功能的GPU,即GeForce3,它可以实现对像素和几何顶点的可编程处理。但是,由于像素和几何顶点处理的频率不一样,GeForce3中设计了不同的染单元,对它们进行分别处理。2003年开始,NVIDIA和ATI发布的新产品都同时具备了可编程顶点处理和可编程像素处理器,具备了良好的可编程性。从此,开发人员可以根据自己的需求灵活的控制渲染过程,编程时无需再过度关注于GPU的其他硬件特性,重点关注可编程性即可。从此,GPU又多了一个可编程的属性,也叫做可编程图形处理单元。2006年,NVIDIA公司推出了GeForce 8800 GTX,它首次使用统一的渲染部件代替了各种可编程部件,同时解决了可编程GPU片上的负载均衡问题成为当今通用图形处理器的雏形,另外GeForce 8800 GTX不仅支持OpenGL和DirectX 10还推出了CUDA编程模型,使得程序员对GPGPU的使用更加方便简单。
GeForce 8800 GTX
通用计算
2007年NVIDIA公司推出了全新的CUDA架构(Compute Unified Device Architecture,统一计算设备架构)改变了GPU的发展轨迹,使GPU不再受编程模型和开发方式的限制,从单一的图形渲染领域走向了通用计算领域,并且凭借其强大的计算能力在通用计算领域占据了重要地位。2008年,NVIDIA推出了基于GT200结构的GPU。GT200体系结构在G80体系结构的基础上进行相应改进了,主要表现在加入了对共享存储器的原子操作和双精度浮点运算的支持,放宽了对存储器的对齐访问。2009年,AMD计划推出了它的GPU—Firestream9270,其特点是具有更高的主频,存储为GDDR5,并且支持OpenCL。但同时功耗大幅增加,已经接近NVIDIA GT200系列GPU的功耗水平。与此同时,NVIDIA在同年11月份,对外发布了其第三代统一体系结构的产品Fermi,加入了更多的SM数目和寄存器器、共享存储器等硬件资源,线程块调度机制也得到了进一步的优化,GPGPU的通用计算能力得到了显著提升。GPGPU的发展从此进入了快车道。2011年TESLA的GPU计算卡发布,标志着NVIDIA将正式用于计算的GPU产品线独立出来,凭借着架构上的优势,GPU在通用计算及超级计算机领域,逐渐取代CPU成为主角。2018年,Nvidia 发布了最新的Turing架构,其集实时光线追踪、AI、模拟和光栅化于一身,为计算机图形带来了根本性变革,让实时光线追踪首次成为现实。
Fermi架构
近些年,随着制造工艺的进步以及编程。模型的优化,使得GPU并行计算功能越来越强大,GPU也从最初的专用图形加速器发展成为现在的通用加速器,广泛应用于众多领域,包括高性能计算、图像处理、深度学习、计算机视觉和数据分析等领域。
硬件架构
编辑GPU体系架构主要由两部分组成,分别是SPA流处理器阵列(Scalable Streaming Processor Array)和存储器系统,这两部分之间是由一个片上互联网络连接起来的。SPA和存储器系统都可以独立的进行扩展。本文以英伟达在2022年发布的全新的Ada Lovelace架构(以下简称“Ada架构”)为例介绍GPU的硬件架构。
Ada架构以及对比Ampere架构参数
AD102核心
Ada架构目前最完整、规模最大的芯片被称为AD102。完整版本的AD102芯片拥有12个GPC(Graphics Processing Clusters,图形处理器集群),每个GPC拥有6个TCP(Texture Processin gClusters,纹理处理集群),每个TPC拥有2个SM(Streaming Multiprocessors,流式多处理器)和1个Poly Morph引擎,因此1个AD102总计拥有72个TPC、144个SM。存储部分采用的是384bit的GDDR6X控制器,一共布置了12个显存控制器,每个显存控制器可以控制32bit位宽。英伟达特别提示,考虑到FP64相关代码比如张量(Tensor)代码的运行,英伟达还为AD102增加了288个FP64单元,每个SM核心2个。
Ada架构的GPC组成
SM单元
AD102的每个SM单元包含128个CUDA内核,1个ADA第三代RT核心以及4个ADA第4代张量核心、4个纹理单元、256KB寄存器、128KB的L1/共享内存,和之前的产品一样,L1/共享内存也可以根据使用情况进行配置。每个SM拥有128KB的L1缓存,AD102总计拥有18432KB的L1缓存。Ada架构在缓存部分的变化主要体现在L2缓存。AD102目前拥有98304KB的L2缓存,也就是96MB,相比之前GA102的6144KB也就是6MB,大约是后者的16倍。巨大的缓存为所有GPU相关操作,如光线追踪、路径追踪等复杂的操作都带来益处。
Aa架构的SM单元
光线追踪模块
传统的实时3D图形计算采用的是光栅化的方式,但由于光栅化计算并不是对物体和光线进行了真正的交互处理,所以存在非常多的局限性,如果依旧在光栅化的条件下解决这些问题需要高昂的代价。在这种情况下,通过引入光线追踪,让光线在3D场景中通过碰撞和反射、折射来生成真正的数据和信息,就不失为一个很好的解决手段了。在没有专用的加速硬件时,光线追踪的计算需要由SM单元进行一次又一次的循环计算才能完成,而RT核心(即专门用于光线追踪计算的光追核心)则可以将光线追踪计算中最复杂的循环部分被大幅度加速,其效率相较SM单元提升了数倍乃至数百倍之多。具体到Ada架构中,其RT核心能够以高达每秒10 Giga Rays 的速度对光线和声音在3D环境中的传播进行加速计算。
第三代RT核心结构示意图
- Opacity Micromap
在光线追踪计算中,光线投射到物体表面,会先查询开发人员是否标注了“不透明”状态,如果有,则将这些计算合并到光线追踪后续计算中。然而,如果没有标注,那么RT核心就会要求着色器检查到底是透明还是不透明,这将占据SM的线程并产生性能需求,甚至会产生多次调用。在Ada架构中,英伟达设计了一个名为Opacity Micromap(不透明微图单元)来进行透明状态类似的检查。Opacity Micromap在运行中会首先生成一个由微小三角形组成的网格,然后用这个网格来标记物体透明或不透明。具体来说,RT核心会直接判断光线和Opacity Micromap三角形的交点,这个交叉点的重心坐标可以用于确定当前三角形覆盖的区域是透明、不透明或者未知。在RT核心中拥有Opacity Micromap后,遍历性能在拥有alpha通道的几何图形中,性能提高了一倍。
Opacity Micromap的应用案例,用于检查光线是否能穿过树叶
- DMME
Displaced Micro-Mesh Engine是第3代RT核心的又一个重要功能,可以称其为置换微网络引擎(DMME)。在DMME出现之前,系统需要调用RT模块针对目标物体的每一个三角形进行光线追踪交叉测试,但是在DMME出现之后,系统只需要把任务交给DMME,DMME根据基底三角地(简略模型)和位移图的相关参数,自动生成DMM并完成光线追踪的三角形交叉计算,然后将数据返回给系统,这样就大大降低了系统的压力,提升了效率。在DMME出现后,可以利用空间一致性进行数据压缩,并且会根据其结构和LOD(Level Of Detail)情况(或者不同的动画细节等级)进行高效率渲染。在光线追踪计算时,DMME会避免BVH的大量时间和空间成本;在光栅化计算时,DMME将会根据LOD情况进行渲染,给出正确精度的结果数据。
Displaced Micro-Mesh针对这类复杂的表面,能够很有效地提升性能
- SER
在Ada架构中,英伟达设计了一种新的调度系统,被称为Shader Execution Reordering(着色器执行重排序,SER)来解决执行分歧和数据分歧等问题。SER的作用是当分歧发生时,它可以重新调度着色器的工作排序,从而避免部分着色器在等待中浪费算力和电能,以获得更好的效率和性能。
SER能帮助重新排序,以实现更好的效能
第四代张量核心
Ada架构中的第四代张量核心(Tensor Core)的作用是用于加速矩阵乘法累加(MMA)计算,这类张量计算在高性能计算机和AI计算中广泛存在。在第四代张量核心中,英伟达新增计算格式FP8和Transformer Engine。其中FP8支持更高效率的数据管理,Transformer Engine不仅可以通过自动分析计算结果输出值的信息,判断接下来的神经网络计算内容和所需要的精度,还可以自动转换现有数据至更高效的数据格式并将其送入计算引擎。这些优势大幅度提升Transformer模型计算的效能。在Transformer Engine和FP8数据格式的加速下,可以在人工智能的大型语言模型训练上提供9倍的训练加速和30倍的推理加速。
编解码器
Ada架构中的第8代NVENC硬件编码器整合了对AV1视频编码格式的支持,此前Ampere只支持AV1的解码,而不含编码。新的AV1编码器在效率上比H.264编码器提高了40%。 在解码功能方面,Ada架构的NVDEC解码器支持MPEG2、VC-1、H.264(AVCHD)、H.265(HEVC)、VP8、VP9和AV1等视频格式的解码,还支持8K@60Hz视频的解码。另外,英伟达还加入了AI功能以方便视频制作。
Ada架构加入了第八代NVENC支持AV1编码和双编码器
工作原理
编辑GPU是组成计算机硬件系统的重要一环,主要负责计算机显示图像输出。本章节重点介绍的是GPU在3D图形渲染中的工作流程。GPU通过与CPU的精密配合,绘制出一幅幅精美的画面,工作流程主要包括几何处理,光栅化,像素渲染,ROP输出这四个步骤。本文就通过对这四个步骤的详细阐述来展示GPU是如何进行3D渲染工作的。
- 几何处理
整个流程的第一步是几何处理,它的作用是把抽象的数学公式转化为电脑屏幕里的形象轮廓。通过这些数学公式可以将程序员脑海中的复杂图像,在一个三维坐标系中展现出来,把物体表面一些重要的关键点在通过数学公式映射在坐标系中,并通过一定的规则将这些离散的坐标点连起来,这样就形成了一个在虚拟空间中的物体几何轮廓,最后在通过对相应坐标点的位置变换,从而实现物体运动的表现。这些处于虚拟空间中的坐标点我们称之为多边形顶点,而GPU的工作就是将代码中所描述的顶点参数映射到虚拟空间的坐标系中。
- 光栅化
经过几何处理的步骤后,模型的轮廓就可以确定了。之后需要根据程序要求,对模型进行更加精细化的处理,如曲面细分Tesselation,就是利用GPU硬件加速,将现有3D模型的三角形拆分得更细小、更细致,也就是大大增加三角形数量,使得渲染对象的表面和边缘更平滑、更精细。但是由于电脑屏幕显示的均是二维图像信息,因而接下来的步骤就是如何将复杂的三维世界物体模型映射到二维平面中表达出来,这就是GPU中另一个单元Rasterizer所要完成的工作。
光栅化过程
Rasterizer光栅化是通过透视原理将分布散三维空间的立体坐标信息映射到二维平面直角坐标系中。由于电脑所使用的显示器是一个二维平面结构,无法直接展示出三维空间的全部信息,所以需要通过透视原理将三维空间中的景深信息表达出来,这也就是我们所说的图像立体感。同时为了实现物体信息的像素化,Rasterizer这个步骤也是必不可少的。Rasterizer通过一系列的数学变换将三维坐标转换为平面二维坐标,这个过程中图像原本的Z轴坐标信息将会被单独提取出来存放入Z-Buffer中,作为景深值。
- 像素渲染
经过光栅化操作后物体的轮廓信息就已经被定格在平面像素中,那么接下来的工作就是将物体的颜色信息填充到图像中,这个部分的工作又称为材质操作,而这一过程将由GPU中的PixlShader完成,它将赋予图像鲜活的生命力。材质操作就是GPU给物体填色的过程,但是由于硬件限制,实际操作中无法象现实生活中那样直观地操作,需要借助代码去完成,而GPU的工作就是将代码转换为人们能够识别的颜色信息,继而填充在图像上,最终呈现在显示屏上。然而3D图像生成过程到这里还没有结束。为了解决图像展现在屏幕上会非常的死板的问题,需要将真实世界的光影信息添加到物体上,将物体的实时动态效果展示出来,从而满足人们越来越高的视觉要求,这项任务将由PixelShader来完成。PixelShader的主要工作就是还原物体被光线照射之后所呈现出来的色彩信息,这些色彩信息GPU都将在像素上进行操作,所以也就是对像素的色彩进行修改。
材质操作的过程
- ROP后端
图像经过上述一系列操作之后,只需进行最后的整合,就可以输出在显示器上了。ROP的作用在于拾取渲染好的像素,以及调用Z-buffer上的信息,结合模型的透明度信息决定哪些面是被遮挡住的,被遮挡的部分将被隐藏,不予显示。完成后,图像将被存入帧缓存,在合适的时机输出到屏幕。ROP是前面所有工作的整合器,它的效率直与显卡的工作效率紧密相关。从最初的数学公式到最终呈现在显示器上的图像,显卡的工作到这里就结束了。整个过程在一秒钟内一般要重复完成75次。ROP单元是整个GPU工作流程中最为重要的一环,性能将直接影响到整个GPU的实际表现、工作效率的高低将直接影响到整个流程的效率。
关键技术
编辑并行计算技术
GPU并行计算技术就是利用GPU的计算单元来完成和加速并行计算任务的技术 ,而非传统的基于CPU完成计算任务。因为GPU相比CPU具有更多的计算单元,这使得GPU比CPU更适合进行并行计算任务,获得更高的运行效率。在CUDA计算架构推出后,开发者可以使用类C语言来为GPU编写程序 ,从而大大降低了GPU的使用门槛,这极大地推动了基于GPU的并行计算技术在模式识别、图形语音、自然语言等人工智能领域多个方向上的发展。
并行计算示意图
渲染架构技术
现代图形处理器主要有两种渲染架构:即时渲染架构和分块渲染架构。桌面图形处理器一般采用即时渲染架构,它指的是完全按照应用程序指定的物体顺序,即时绘制物体,每个提交的渲染任务都会立刻开始执行,渲染期没有任何延迟,所以驱动程序直接,渲染效率高,在没有带宽限制的情况下性能好,但是由于渲染物体位置的无关性,导致高速缓存的丢失率提高,对带宽要求比较高。嵌入式图形处理器显存容量比较有限,需要与系统及芯片上的其他处理器共用系统内存,如果像传统的桌面图形处理器那样,一次性将整个屏幕内容绘制出来,由于三维场景的复杂性,着色缓存和深度缓存会被更新多次,所以需要多次读写系统内存,因此性能和功耗都会很差。所以目前嵌人式图形处理器大多采用分块渲染架构。
即时渲染架构优势分析图
显存带宽压缩技术
随着GPU计算性能的不断提升,显存带宽与CPU计算性能的差距越来越大,GPU对显存带宽的需求不断提高。为了提升GPU的性能,节省显存带宽的压缩技术显得格外重要。GPU对显存带宽需求主要来自两方面,其一,纹理采样;其二,深度和颜色缓存的读写。目前,比较常用的纹理压缩技术有 S3TC、ETC、ASTC等。这些压缩技术满足纹理压缩的需求。它们的特点是固定压缩率、有损、压缩时间比解压时间长、解压的硬件实现简单等。
GPU虚拟化技术
GPU虚拟化技术分为设备仿真、设备直连、API重定向、全虚拟化和硬件虚拟化。这四种方式从不同角度提供了GPU虚拟化的解决方案,设备仿真用软件模拟GPU,设备直连则允许虚拟机直接使用GPU,后三者则分别从API接口、虚拟层驱动、GPU硬件入手实现虚拟化。其中,设备仿真是在没有真实硬件的环境下虚拟出GPU,但虚拟出的GPU性能面临巨大的挑战,实用价值较低,因而常用于GPU架构研究,主要用于科研人员进行GPU硬件结构仿真。随着云计算理论和研究的不断发展,GPU虚拟化在深度学习、人工智能等领域的重要性不断增强,特别是英伟达、超威半导体公司等GPU厂商进军虚拟机后,GPU虚拟化技术获得长足发展。
API 重定向示意图
特色功能
编辑光线追踪
光线追踪采用全局光照模型,通过物理原理对光线和物质之间的交互行为进行建模,不仅考虑直接光照的效果,也考虑物体间相互光照影响,比传统的光栅化渲染效果更加立体,色彩更柔和更逼真,通常用于离线渲染处理。在基于GPU的光线追踪上,每个GPU硬件线程同一时刻负责一条光线的处理因此,一个单指令多线程处理器同一时刻处理32条光线。每个线程处理过程都遵循基于栈的遍历算法。例如,2018年NVIDIA发布的RTX2080GPU,采用Turing架构,在GPU中集成了68个独立的RTCore,用于光线追踪,光线处理能力达到了10Giga/S,1080P@60Hz需要处理的光线约为6Giga/S,实测基于光线追踪的应用其帧率大致在50FPS左右,基于RTX2080的光线追踪达到了可用的程度,光线追踪对于反射和阴影有着更逼真的处理效果,尽管目前仍然是采用光线追踪和传统光栅图形处理相结合的方式来进行图形渲染,但其效果已经远超传统光栅图形处理,对于游戏、电影等追求逼真光影效果的应用,光线追踪能提供电影级画质的实时渲染,带来视觉效果上质的飞跃。除了游戏、电影方面的应用,产品设计师和建筑师也可以享受到光线追踪带来的好处,借助光线追踪工具和高性能GPU,可以实时生成逼真的产品模型,提高设计迭代速度。
光线追踪示意图
DLSS
NVIDIA DLSS的设计初衷就以GPU内置的专用核心(Tensor Core)为基础,通过使用超级采样、实时反馈和AI技术来克服传统的分辨率缩放技术带来的图像质量严重降低的限制,以实现与原始分辨率基本相当的图像质量,并且还能够显著提升游戏帧率表现。相比NIS、FSR等技术,DLSS可以提供更好的图像质量细节、更稳定的画质表现以及更清晰的图像边缘质量。由于DLSS总是在基于AI的神经网络上不断学习,再加上机制中存在的前后帧联动输入分析,这让它可以生成媲美甚至超过原生图像的高质量画面。而传统分辨率缩放技术则更简单粗暴地使用削减分辨率的方法进行渲染,再利用相对固定的算法,使用很少的图形信息采样进行渲染补足,以牺牲图形质量的方式换取游戏性能的提升。最大的问题就在于物体细节严重衰退和渲染输出图形的不稳定性。
DLSS 3功能和工作特性
FSR
FSR全称为AMD FidelityFX Super Resolution,也就是AMD FidelityFX超级分辨率,主要作用是在相同分辨率和画质设置下提升游戏帧率,改善玩家的游戏体验 。换而言之,在相同画质和分辨率设置下,FSR可让游戏帧率得到50%甚至100%的提升,让原本在该设置下根本不能玩的游戏变得可以玩,让原本不是太流畅的游戏体验达到60fps+的效果。FSR1.0和2.0都会以降低渲染分辨率的方式来显著提高性能,然后将较低的分辨率输入图像缩放到目标分辨率再进行输出。不过FSR 1.0和2.0的区别在于算法不同,FSR1.0采用的是空间算法,而FSR 2.0则采用的是时间算法。FSR 1.0的空间算法使用的是当前帧的数据来创建缩放输出图像,并依赖于合并到游戏渲染管道中的单独抗锯齿。而FSR 2.0的时间算法使用的是渲染管道中的深度缓冲、运动矢量缓冲和色彩缓冲,并利用来自过去帧的信息来创建质量更高的输出图像,并且FSR 2.0还包括优化的高质量抗锯齿。由于上述这些不同之处,在所有质量模式预设和屏幕分辨率下,FSR 2.0提供的图像质量理论上要比FSR 1.0更加出色。
FSR2.0工作原理示意图
分类
编辑- 按搭载方式划分:GPU可分为集成显卡和独立显卡。集成显卡将图形处理器集成在主板或处理器中,与主板或处理器共享内存和总线,通常用于一般的图形和图像处理任务。独立显卡是一种单独的扩展卡,包含独立的图形处理器和显存,与主板或处理器独立工作,通常用于高性能的图形和图像处理任务,例如游戏和计算机辅助设计。
百科词条作者:小小编,如若转载,请注明出处:https://glopedia.cn/71197/