GF100图形架构深度解析
- 来源:微型计算机 smarty:if $article.tag?>
- 关键字:图形架构 smarty:/if?>
- 发布时间:2010-06-30 13:34
在上一篇GF100的测试文章中,我们对GF100图形架构有了一个基本认识,也见证了它强大的3D性能和几何运算性能。下面,我们将进一步来了解GF100的图形架构。
为Tessellation而生 Raster Engine和PolyMorph Engine在深入理解Raster Engine和PolyMorph Engine的作用之前,我们先来看看过去GPU是如何对三角形进行光栅化的——通过一个前端电路控制模块来Assemble(汇集)、Fetch(获取)和对三角形实现光栅化。类似固定的流水线操作可以达到的几何运算性能是一定的,并不会因为并行核心的增删而改变。在一段时间以内,这种设计是可行的,因为当时的几何运算并不算复杂。随着几何运算的复杂性逐步增加,这种设计已经不堪大用甚至成为GPU发展的障碍。
实际需求推动了几何运算技术的发展,因此DirectX11引入了Tessellation。但Tessellation能将特定帧中的三角形密度增加数十倍,给光栅化等串行化运算单元带来很大的压力,因此对图形流水线的优化就迫在眉睫。
NVIDIA认为成熟的GT200架构已经无法适应大规模的Tessellation计算,决定为DirectX 11产品设计全新的基于并行处理设计的图形架构。而并行化的Raster Engine和PolyMorph Engine就是并行处理架构上的关键模块。
可扩展的PolyMorph Engine能实现较高的三角形速率,每个PolyMorph Engine均拥有专属的顶点获取单元以及Tessellator,极大地提升了几何性能。与之呼应的则是四个并行的Raster Engine,它们能够在每个时钟周期内设置最多四个三角形,并且在三角形Fetch、Tessellation以及光栅化操作方面具备很强的性能。
大量创新 SM阵列细看
在了解完GPC以及PolyMorph Engine和RasterEngine以后,下面我们将以一组SM阵列为例进一步来看看GF100的图形架构。在上一篇文章中,我们已经提到GF100拥有512个流处理器,一组SM阵列拥有32个流处理器(Streaming Processor内核,简称“SP”)。虽然在CUDA的概念里,CUDA Core或者SP指的就是一个处理核心。但其实SP只是一个功能单元,真正比较接近于我们常说的内核则是SP的上一级单位——从一个GPC来看,一个GPC由四组SM阵列组成,共计512个流处理器Streaming Multiprocessor(即本文所说的“SM”)。
因为目前只有在SM这一级才具备Program Counter(程序计数器)、调度资源以及分离的寄存器堆块,即才能进行CUDA计算。在AMD统一着色器架构的GPU中,类似SM等级的部件是SIMD Core,例如RV870拥有20个SIMD Core。
在GF100中,每个SP都有全流水线化的整数算术逻辑单元(ALU)和浮点单元(FPU)。ALU支持64bit和扩展指令,支持算术、shift(位移)、Boolean(布尔)、comparision(比较)以及 move(数据传输或者赋值)。
虽然GF100的SM数量从GT200的30个下降为16个,但SP总数却达到了512个(GT200为30×8=240个),实际的单周期理论性能则提升了近1倍甚至更多(例如双精度浮点运算)。另外,一个SP每个周期可以实现一个Thread的一条浮点指令或者整数指令。在浮点运算方面,G80、GT200的单精度运算都是采用IEEE 754-1985标准的浮点算法,而GF100在单精度浮点指令上提供了对次常数(subnormal number,即denormal number 或者 denormalized number)以及IEEE754-2008标准的所有四种舍入模式(nearest、zero、positive infinity、negative infinity)的支持。
效率更高的纹理单元
在GF100中,每个SM配备了四个纹理单元,共计64个纹理单元。和上一代GT200以及竞争对手Cypress动辄80个纹理单元相比,GF100的纹理单元数量不但没有提升,反而下降(GeForce GTX 480由于被屏蔽了一组SM,实际上只有60个纹理单元。)。NVIDIA这样设计意欲何为呢?
在GT200架构中,最多三个SM共享一个纹理引擎,该纹理引擎包括八个纹理定址单元和过滤单元。而G92则是两个SM共享一个纹理引擎。但NVIDIA认为单纯地添加纹理单元的数量并不能有效提升GPU的纹理贴图能力,甚至造成部分单元闲置浪费。因此在GF100中,NVIDIA通过将纹理单元移植到SM中的设计来提升纹理单元的使用效率和时钟频率——每个SM都配备了四个纹理单元和一个纹理高速缓存。一个纹理单元在一个时钟周期内能够计算一个纹理地址并获取四个纹理采样,可以支持包括双线性、三线性在内的各向异性过滤模式。
Shared memory和L1/L2缓存
在GF100中,每个SM里面拥有一个容量很小的内存空间,即Shared Memory,可以用于数据交换,程序员可以方便自由使用。有了Shared memory后,同一个Threadblock内的线程可以共享数据,极大地提升了NVIDIAGPU在进行GPU Computing应用时的效率。虽然Sharedmemory对许多计算都有帮助,但它并不适用于所有的问题。最佳化的内存层次架构方案就是同时提供sharedmemory和cache,GF100就采用了这样的设计。在G80和GT200中,每个SM都有16KB的Shared memory。而在Fermi中,每个SM拥有64KB的Shared memory,能配置为48KB Shared memory+16KB L1 cache或者16KBShared memory+48KB L1 cache的模式(G80和GT200不具备L1/L2 cache)。程序员可以自己编写一段小的程序,把Shared memory当成Cache来使用,由软件负责实现数据的读写和一致性管理。而对那些不具备上述程序的应用程序来说,也可以直接自动从L1 Cache中受益,显著缩减运行CUDA程序的时间。过去,GPU的寄存器如果发生溢出的话,会大幅度地增加存取时延。有了L1 cache以后,即使临时寄存器使用量增加,程序的性能表现也不至于大起大落。
另外,GF100提供了768KB 的一体化L2 cache, L2cache为所有的Load/Store以及纹理请求提供高速缓存。对所有的SM 来说,L2 cache上的数据都是连贯一致的,从L2 cache上读取到的数据就是最新的数据。有了L2c a che后,就能实现GPU高效横跨数据共享。对于那些无法预知数据地址的算法,例如物理解算器、光线追踪以及稀疏矩阵乘法都可以从Fermi 的内存层次设计中显著获益。
改进的ROP单元 实现32x抗锯齿
在GF100上,NVIDIA对ROP单元进行了全新设计,大幅提升了数据吞吐量与效率,提升了8xMSAA的性能。
GF100包含六个ROP分区,一个ROP分区包括了八个ROP单元,共计48个ROP单元(GT200具备八个ROP分区,并与八个64-bit的显存控制器绑定,一个ROP分区包含四个ROP单元。)。一个ROP单元能够在一个时钟周期内输出一个32-bit整数像素。理论上,由于ROP的压缩效率和ROP单元数量的提升,GF100在8x抗锯齿下的性能会得到明显改善。
此外,得益于更多的原子操作单元以及L2缓存,GF100的原子内存操作性能相对以往的架构来说得到了巨大的提升。对同一地址的原子内存操作,GF100的运算速度是GT200的20倍,而对相邻内存区域的操作则达到7.5倍。另一方面,GF100还新增32x覆盖采样抗锯齿(CSAA)模式(实际上是8xMSAA+24xCSAA),利用该模式可提供更高的图像质量。
3D Vision Surround
3D Vision最大的作用是带给我们真实的立体、三维的游戏世界。如今NVIDIA再次将该技术升级,3DVision Surround——利用三台显示器拼接显示,三台显示器均显示立体的画面。由于目前NVIDIA显卡(包块GF100显卡)均不支持单卡同时输出三个画面,因此NVIDIA为双卡SLI系统单独编写了驱动程序以支持3DVision Surround。要体验3D Vision Surround就必须使用双卡SLI系统,增加了组建成本。
光线追踪
光线追踪并不是什么新的技术,它早就存在,只是由于应用门槛过高,民用级显卡根本无法“驾驭”它。对大多数用户来说,光线追踪只是一个传说,但这并不妨碍它成为未来GPU发展的趋势。准确说,光线追踪是一项可以大幅增加场面真实感的渲染技术,能够利用计算机构建出以假乱真的视觉画面,是最高级的3D渲染艺术。我们可以简单地认为:这项技术直接操控屏幕的背光,让每个像素都对应真实场景的光反射——你可以反过来理解:就是把显示屏幕当作一个空白的方框,方框内的场景都是绝对真实,而非虚构渲染的。如果从人眼的角度来看,光线追踪与真实视觉的原理相同,区别仅在于真实视觉系统中,光线的数量可以分解为无穷大,而计算机的光线追踪系统中,光线的数量是有限的——不过当光线的数量达到一定临界点时,人眼就无法再加以区分,而认为所见到的都是“真实的拍摄画面”。
由于光线追踪需要反复循环地进行工作和渲染,具有不确定性和不可预测性,这需要大规模的随机存储读取,而GPU也必须反复进行着相同的操作,很耗费资源。为了提升效率,GPU一般以线性块的方式执行存取操作。
有鉴于此,GF100图形架构为光线追踪做出了特别优化。GF100是首款在硬件上支持循环操作的GPU,即与光线追踪的的工作轨迹同步。此外,L1和L2缓存还提升了效率和带宽。
……
为Tessellation而生 Raster Engine和PolyMorph Engine在深入理解Raster Engine和PolyMorph Engine的作用之前,我们先来看看过去GPU是如何对三角形进行光栅化的——通过一个前端电路控制模块来Assemble(汇集)、Fetch(获取)和对三角形实现光栅化。类似固定的流水线操作可以达到的几何运算性能是一定的,并不会因为并行核心的增删而改变。在一段时间以内,这种设计是可行的,因为当时的几何运算并不算复杂。随着几何运算的复杂性逐步增加,这种设计已经不堪大用甚至成为GPU发展的障碍。
实际需求推动了几何运算技术的发展,因此DirectX11引入了Tessellation。但Tessellation能将特定帧中的三角形密度增加数十倍,给光栅化等串行化运算单元带来很大的压力,因此对图形流水线的优化就迫在眉睫。
NVIDIA认为成熟的GT200架构已经无法适应大规模的Tessellation计算,决定为DirectX 11产品设计全新的基于并行处理设计的图形架构。而并行化的Raster Engine和PolyMorph Engine就是并行处理架构上的关键模块。
可扩展的PolyMorph Engine能实现较高的三角形速率,每个PolyMorph Engine均拥有专属的顶点获取单元以及Tessellator,极大地提升了几何性能。与之呼应的则是四个并行的Raster Engine,它们能够在每个时钟周期内设置最多四个三角形,并且在三角形Fetch、Tessellation以及光栅化操作方面具备很强的性能。
大量创新 SM阵列细看
在了解完GPC以及PolyMorph Engine和RasterEngine以后,下面我们将以一组SM阵列为例进一步来看看GF100的图形架构。在上一篇文章中,我们已经提到GF100拥有512个流处理器,一组SM阵列拥有32个流处理器(Streaming Processor内核,简称“SP”)。虽然在CUDA的概念里,CUDA Core或者SP指的就是一个处理核心。但其实SP只是一个功能单元,真正比较接近于我们常说的内核则是SP的上一级单位——从一个GPC来看,一个GPC由四组SM阵列组成,共计512个流处理器Streaming Multiprocessor(即本文所说的“SM”)。
因为目前只有在SM这一级才具备Program Counter(程序计数器)、调度资源以及分离的寄存器堆块,即才能进行CUDA计算。在AMD统一着色器架构的GPU中,类似SM等级的部件是SIMD Core,例如RV870拥有20个SIMD Core。
在GF100中,每个SP都有全流水线化的整数算术逻辑单元(ALU)和浮点单元(FPU)。ALU支持64bit和扩展指令,支持算术、shift(位移)、Boolean(布尔)、comparision(比较)以及 move(数据传输或者赋值)。
虽然GF100的SM数量从GT200的30个下降为16个,但SP总数却达到了512个(GT200为30×8=240个),实际的单周期理论性能则提升了近1倍甚至更多(例如双精度浮点运算)。另外,一个SP每个周期可以实现一个Thread的一条浮点指令或者整数指令。在浮点运算方面,G80、GT200的单精度运算都是采用IEEE 754-1985标准的浮点算法,而GF100在单精度浮点指令上提供了对次常数(subnormal number,即denormal number 或者 denormalized number)以及IEEE754-2008标准的所有四种舍入模式(nearest、zero、positive infinity、negative infinity)的支持。
效率更高的纹理单元
在GF100中,每个SM配备了四个纹理单元,共计64个纹理单元。和上一代GT200以及竞争对手Cypress动辄80个纹理单元相比,GF100的纹理单元数量不但没有提升,反而下降(GeForce GTX 480由于被屏蔽了一组SM,实际上只有60个纹理单元。)。NVIDIA这样设计意欲何为呢?
在GT200架构中,最多三个SM共享一个纹理引擎,该纹理引擎包括八个纹理定址单元和过滤单元。而G92则是两个SM共享一个纹理引擎。但NVIDIA认为单纯地添加纹理单元的数量并不能有效提升GPU的纹理贴图能力,甚至造成部分单元闲置浪费。因此在GF100中,NVIDIA通过将纹理单元移植到SM中的设计来提升纹理单元的使用效率和时钟频率——每个SM都配备了四个纹理单元和一个纹理高速缓存。一个纹理单元在一个时钟周期内能够计算一个纹理地址并获取四个纹理采样,可以支持包括双线性、三线性在内的各向异性过滤模式。
Shared memory和L1/L2缓存
在GF100中,每个SM里面拥有一个容量很小的内存空间,即Shared Memory,可以用于数据交换,程序员可以方便自由使用。有了Shared memory后,同一个Threadblock内的线程可以共享数据,极大地提升了NVIDIAGPU在进行GPU Computing应用时的效率。虽然Sharedmemory对许多计算都有帮助,但它并不适用于所有的问题。最佳化的内存层次架构方案就是同时提供sharedmemory和cache,GF100就采用了这样的设计。在G80和GT200中,每个SM都有16KB的Shared memory。而在Fermi中,每个SM拥有64KB的Shared memory,能配置为48KB Shared memory+16KB L1 cache或者16KBShared memory+48KB L1 cache的模式(G80和GT200不具备L1/L2 cache)。程序员可以自己编写一段小的程序,把Shared memory当成Cache来使用,由软件负责实现数据的读写和一致性管理。而对那些不具备上述程序的应用程序来说,也可以直接自动从L1 Cache中受益,显著缩减运行CUDA程序的时间。过去,GPU的寄存器如果发生溢出的话,会大幅度地增加存取时延。有了L1 cache以后,即使临时寄存器使用量增加,程序的性能表现也不至于大起大落。
另外,GF100提供了768KB 的一体化L2 cache, L2cache为所有的Load/Store以及纹理请求提供高速缓存。对所有的SM 来说,L2 cache上的数据都是连贯一致的,从L2 cache上读取到的数据就是最新的数据。有了L2c a che后,就能实现GPU高效横跨数据共享。对于那些无法预知数据地址的算法,例如物理解算器、光线追踪以及稀疏矩阵乘法都可以从Fermi 的内存层次设计中显著获益。
改进的ROP单元 实现32x抗锯齿
在GF100上,NVIDIA对ROP单元进行了全新设计,大幅提升了数据吞吐量与效率,提升了8xMSAA的性能。
GF100包含六个ROP分区,一个ROP分区包括了八个ROP单元,共计48个ROP单元(GT200具备八个ROP分区,并与八个64-bit的显存控制器绑定,一个ROP分区包含四个ROP单元。)。一个ROP单元能够在一个时钟周期内输出一个32-bit整数像素。理论上,由于ROP的压缩效率和ROP单元数量的提升,GF100在8x抗锯齿下的性能会得到明显改善。
此外,得益于更多的原子操作单元以及L2缓存,GF100的原子内存操作性能相对以往的架构来说得到了巨大的提升。对同一地址的原子内存操作,GF100的运算速度是GT200的20倍,而对相邻内存区域的操作则达到7.5倍。另一方面,GF100还新增32x覆盖采样抗锯齿(CSAA)模式(实际上是8xMSAA+24xCSAA),利用该模式可提供更高的图像质量。
3D Vision Surround
3D Vision最大的作用是带给我们真实的立体、三维的游戏世界。如今NVIDIA再次将该技术升级,3DVision Surround——利用三台显示器拼接显示,三台显示器均显示立体的画面。由于目前NVIDIA显卡(包块GF100显卡)均不支持单卡同时输出三个画面,因此NVIDIA为双卡SLI系统单独编写了驱动程序以支持3DVision Surround。要体验3D Vision Surround就必须使用双卡SLI系统,增加了组建成本。
光线追踪
光线追踪并不是什么新的技术,它早就存在,只是由于应用门槛过高,民用级显卡根本无法“驾驭”它。对大多数用户来说,光线追踪只是一个传说,但这并不妨碍它成为未来GPU发展的趋势。准确说,光线追踪是一项可以大幅增加场面真实感的渲染技术,能够利用计算机构建出以假乱真的视觉画面,是最高级的3D渲染艺术。我们可以简单地认为:这项技术直接操控屏幕的背光,让每个像素都对应真实场景的光反射——你可以反过来理解:就是把显示屏幕当作一个空白的方框,方框内的场景都是绝对真实,而非虚构渲染的。如果从人眼的角度来看,光线追踪与真实视觉的原理相同,区别仅在于真实视觉系统中,光线的数量可以分解为无穷大,而计算机的光线追踪系统中,光线的数量是有限的——不过当光线的数量达到一定临界点时,人眼就无法再加以区分,而认为所见到的都是“真实的拍摄画面”。
由于光线追踪需要反复循环地进行工作和渲染,具有不确定性和不可预测性,这需要大规模的随机存储读取,而GPU也必须反复进行着相同的操作,很耗费资源。为了提升效率,GPU一般以线性块的方式执行存取操作。
有鉴于此,GF100图形架构为光线追踪做出了特别优化。GF100是首款在硬件上支持循环操作的GPU,即与光线追踪的的工作轨迹同步。此外,L1和L2缓存还提升了效率和带宽。
关注读览天下微信,
100万篇深度好文,
等你来看……