《Real-Time Rendering》第四版学习笔记——Chapter 3 The Graphics Processing Unit

本文详细介绍了GPU的架构,重点在于数据并行结构和GPU管线,包括顶点着色器、细分步骤、几何着色器、像素着色器的工作原理。内容涵盖GPU如何通过SIMD优化处理,以及流输出、计算着色器等高级特性,揭示了GPU在实时渲染中的核心作用。
摘要由CSDN通过智能技术生成

引言

GPU设计的初衷是为了图形加速,而且GPU对CPU的唯一优势就是图形计算速度。

GPU通过专注于高度并行的少量任务来获取高速度。GPU会专门提供定制化的芯片来实现深度缓冲、快速访问纹理图像、查找三角形覆盖像素等等。

每一个着色器核心都是一个处理相对独立任务的小型处理器。

所有的处理器都面临着延迟的问题。而访问数据会消耗一些时间。通常情况下,我们可以认为,信息离处理器越远,时间消耗越多。这里的关键点就是,等待数据会导致处理器停顿,进而影响性能。

一、数据并行结构

CPU避免停顿的主要策略是处理大量不同的数据结构和代码。CPU拥有多个处理器,但是每个处理运行代码的方式偏向于串行,限制SIMD处理,最小化异常。并且CPU包含快速局部寄存器,保存之后可能会处理的数据。一些例如分支预测、寄存器重命名、缓存预获取等技术也是CPU用来避免停顿的方式。

GPU采用不同的方案,将大量的芯片面积用来作为处理器,也就是着色器核心。这种处理器一般来说都是以千为单位来计数。GPU一般处理的数据有高度的相似性,所以GPU可以以高度并行的方式来处理。另外,这些处理任务会尽可能的相互独立,所以不需要等待其他任务的信息,也不需要共享可写内存地址。

GPU是面向吞吐量优化的,也就是最大的数据处理速率。当然,快速处理也存在代价,那就是用于缓存和逻辑控制的芯片面积更少。也就是说,单个着色器核心的延迟会比CPU高的多。

GPU采用SIMD(single instruction, multiple data)来减小延迟产生的影响,即将指令执行逻辑与数据分离。这样可以在固定数量的着色器程序上齐步执行相同指令。相较于用单独的逻辑和分发单元来运行每个程序,SIMD的优势是可以用更少的芯片面积来处理数据和切换。

术语定义:

  • 线程(thread),一个片段之行的一次像素着色器调用。每个线程含有为存储输入值的少量内存和为执行着色器的一些寄存器空间。
  • 股(warp,NVIDIA)或波阵面(wavefront,AMD):使用相同着色器程序的线程绑定成的一个线程组。

股(或波阵面)运行方式如图所示:

着色器运行方式
内存获取导致的延迟可以通过股交换来避免,而且股交换机制是GPU降延迟的主要机制。

着色器程序结构会影响到性能,主要有以下几个因素:

  • 每个线程使用的寄存器数量。使用寄存器数量越多,那么线程数量越少,相应的股数量也越少。因此,股交换机制的降延迟能力相应的降低;
  • 内存获取的频率;
  • 动态分支,即“if”语句和循环。股内如果有部分的线程执行了另一条分支,那么该股所有的线程都将执行两个分支,最后根据线程自身需求抛弃掉不需要的结果。这种现象叫做线程分歧。

二、GPU管线概述

与上一章从功能角度分割整体管线的方式略有不同,本章会在在物理层面上对管线进行分割,如下图所示:
渲染管线的GPU实现
其中,绿色的为可编程步骤,黄色的为可配置步骤,蓝色的为固定功能步骤;虚线框为可选步骤。

此处描述的是GPU的逻辑模型,即暴露给我们的API;而逻辑管线的实现则是GPU的物理模型,具体实现取决于厂商。

GPU管线整体的演变方向是由固定能力向着更高的灵活性和可控性发展。

三、可编程着色器步骤

现代的着色器程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董小虫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值