GPU特征处理技术
GPU和CPU有何不同?
现代片上系统(SoC)通常集成中央处理器(CPU)和图形处理器(GPU)。设计不同,这可能更取决于处理的数据集的类型。
CPU经过优化,可以一次对几块数据执行大量分支任务。在CPU上运行的线程通常是唯一的,并且是独立执行的,通常独立于所有其他线程。任何给定的处理元素都将在单个线程中进行处理。CPU上程序的典型线程数通常为1到8个,在任何时间段内最多为几十个。
GPU经过优化,工作原理是同一段代码将在多个线程中执行,通常数为数百万,以处理当今设备的大屏幕分辨率。这些线程只在输入上不同,通常遵循完全相同的执行步骤。
并行性
每个图形处理器在多线程上以单指令多数据(SIMD)处理的形式,并发执行同一条指令。
SIMD体系结构的主要优点,对于结构正确的应用程序,可以并行运行大量线程,效率极高。SIMD体系结构通常能够同时运行比典型CPU多几个数量级的线程。
SIMD设计用于处理大的相干数据集,在这类任务中表现得非常出色。因此,在大型相干数据集上独立运行的算法(如图形和图像处理),非常适合这种处理器类型。
矢量和标量处理
现代图形核心体系结构具有多个基于矢量或标量的处理单元。都受不同版本的PowerVR体系结构支持–Series 5 supporting vector,以及Series 6、Series 7和Series 8 supporting scalar。
标量处理单元对每个处理单元的单个值进行操作。
向量处理单元对每个处理单元处理多个值。
矢量
向量处理可以非常有效,因为执行单元可以同时处理多个值,而不是只处理一个值。对于颜色和顶点操作,这种类型的架构是非常有效的。因此,传统的渲染操作非常适合这种体系结构,因为计算通常同时对三个或四个元素进行操作。
向量体系结构的主要缺点是,如果使用标量值或小于处理器期望值的向量,则会浪费额外的处理元素宽度。最常见的向量宽度是4,这意味着主要操作三个分量向量的着色器或内核将以75%的效率操作这些指令。一次只在一个标量上工作的着色器可能会将这个数字降低到25%。这会浪费能源和性能,因为处理器的某些部分没有做任何工作。可以通过矢量化代码对此进行优化,但这会增加程序员的负担。
标量
标量处理器在每个硬件周期可以执行的操作方面往往更加灵活,因为不需要用数据填充额外的处理宽度。虽然向量架构可能在同一个硅区域中处理更多的值,但对于非向量化代码,在标量架构中每个时钟的实际有用结果数通常会更高。标量体系结构往往更适合于通用处理和更高级的渲染技术。
关于消除混叠反采样
该技术引入了GRLAA(Gradient Line Anti-Aliasing,梯度线消除混叠),这是一种相对简单有效的方法,用于处理汽车导航应用中经常出现的混叠线。
在信号处理学科中,有一个特定的采样频率称为奈奎斯特频率。当以低于奈奎斯特频率的频率对信号进行采样时,从这些采样重构的信号与原始信号不同。原始信号和重构信号之间的差异表现为伪影。这种效果称为“混叠”。
本文讨论了计算机图形学中两种最常见的混叠现象。第一种是“锯齿状”(下图1),这里原本是一条对角线的直线,看起来像锯齿状的楼梯。这是由图形卡的“光栅化器阶段”引入的,将“中间”像素渲染为开或关。
第二种是采样混叠。这是当一个高频(快速变化的)纹理被用来渲染远处的某物时,比如图2中的棋盘格图案,并且似乎创建了被称为moir的可见人工制品模式。
有几种算法可用于消除可见锯齿的数量,并去除staircase上的伪影artefacts。但是,这些算法可能会产生适中的性能成本,这取决于它所部署的硬件。
超级采样消除混叠(SSAA)。这是一种暴力技术,比最终分辨率高出整数倍(x2,x4)的分辨率渲染整个场景,然后对整个帧缓冲区进行下采样,产生所需的最终分辨率。结果,锯齿和纹理伪影采样,进行优良的质量和改善,但技术显然是极其昂贵的。渲染成本(包括光栅操作、片段操作和相关带宽)乘以分辨率乘数的平方,即x4表示x2 SSAA,x16表示x4等
多采样消除混叠(MSAA)。这种技术通过将图像渲染到一个缓冲区,增加每个像素的采样数,该缓冲区能够存储每个像素的多个采样。然后解析该缓冲区,生成与viewport分辨率匹配的输出。这在PowerVR硬件上非常有效,因为解析是在芯片上执行的,节省了宝贵的内存带宽。MSAA改善了锯齿,但没有对伪影进行采样。
基于着色器的技术,如快速近似消除混叠(FXAA)或亚像素形态,消除混叠(SMAA)。这两种技术分析检测和模糊锐化的几何特征。在屏幕空间中执行的后处理算法,通常具有固定的成本(一次全屏传递),但需要更多的内存带宽,这在移动和嵌入式设备上通常是额外的。