反正也没什么人看,下一期就等明年再翻译吧!另外也说不准,心情不好的话这应该就是最后一篇了……
实时渲染(第四版)Real-Time Rendering (Fourth Edition)
第3章 图形处理单元(GPU) Chapter 3 The Graphics Processing Unit
—Jen-Hsun Huang
“显示器就是计算机。”
——黄仁勋
(注:黄仁勋,美籍华人,NVIDIA公司创始人兼首席执行官。此句大意是指图形显示对于用户的直观与重要性。)
从历史上看,图形加速始于在与三角形重叠的每条像素扫描线上插入颜色,然后显示这些值。其中包括访问图像数据的功能,可以将纹理应用于表面。其中还添加了用于内插(interpolating)和测试z深度的硬件,提供了内置的可见性检查。由于它们的频繁使用,因此将此类过程用于专用硬件以提高性能。连续几代硬件中添加了渲染管线的更多部分,以及每个部分的更多功能。专用图形硬件相对于CPU的唯一计算优势是速度,但速度至关重要。
在过去的二十年中,图形硬件经历了不可思议的转变。1999年,第一款包含硬件顶点处理的消费者图形芯片(NVIDIA的GeForce 256)问世。NVIDIA创造了图形处理单元(GPU,Graphics Processing Unit)一词,以将GeForce 256与以前可用的仅光栅化芯片区分开来,并且它一直坚持下去。在接下来的几年中,GPU从复杂的固定功能管道的可配置实现发展到高度可编程的空白状态,开发人员可以在其中实现自己的算法。各种可编程着色器是控制GPU的主要方法。为了提高效率,管线的某些部分仍然是可配置的,而不是可编程的,但是趋势是朝着可编程性和灵活性的方向发展[175]。
GPU通过专注于一组高度可并行化的任务而获得了卓越的速度。他们拥有专门的定制芯片,可以专用于实现z缓冲区、快速访问纹理图像和其他缓冲区、查找例如三角形覆盖的像素。这些部件如何执行其功能将在第23章中介绍。更重要的是要早点知道GPU如何实现其可编程着色器的并行性。
3.3节介绍了着色器的功能。目前,您需要知道的是着色器核心是一个小型处理器,可以执行一些相对隔离的任务,例如将顶点从其在世界坐标转换为屏幕坐标,或者计算被三角形覆盖的像素的颜色 。每帧有成千上万个三角形发送到屏幕,每秒可能有数十亿次着色器调用(shader invocations),即运行着色器程序的单独实例。
首先,延迟(latency)是所有处理器都面临的问题。访问数据需要花费一些时间。考虑延迟长短的一种基本方法是,信息所处位置离处理器越远,等待时间就越长。第23.3节详细介绍了延迟。存储在存储芯片中的信息将比本地寄存器中的信息花费更长的时间。18.4.1节将更深入地讨论内存访问。关键是等待数据检索意味着处理器停滞了,这降低了性能。
引用:
[175] Blythe, David, “The Direct3D 10 System,” ACM Transactions on Graphics, vol. 25, no. 3, pp. 724–734, July 2006. Cited on p. 29, 39, 42, 47, 48, 50, 249
3.1 数据并行架构 Data-Parallel Architectures
不同的处理器体系结构使用各种策略来避免停顿。对CPU进行了优化,以处理各种数据结构和大型代码库。CPU可以具有多个处理器,但是每个CPU都以串行方式运行代码,有限的SIMD向量处理是次要的例外。为了最大程度地减少延迟的影响,CPU的许多芯片都由快速本地缓存组成,这些缓存中填充了下一步可能需要的数据。CPU还通过使用诸如分支预测(branch prediction),指令重新排序(instruction reordering),寄存器重命名(register renaming)和缓存预取(cache prefetching )之类的巧妙技术来避免停顿。[715]