DIY硬件 > 正文

缔造视觉计算王国,NVIDIA Fermi深入解读与测试

2010-04-08 22:47 zhanli A+

§2.5 第三代Streaming Multiprocessor流处理器群

  关于SM的架构在第一章也作了详细说明,这里仅对它在图形方面的特性作些补充。

  每个SM中包含有32个CUDA Core、16个Load/Store单元、4个SFU单元、1个多形体引擎、64kb可配置的共享内存/L1缓存,以及两个Warp调度器和指令发送器。

  ·增强的纹理性能

  每个SM里还配置有4个纹理单元(Texture Unit),每个纹理单元在一个周期内能完成一个纹理地址计算并获取四个纹理采样,返回的结果是可以过滤的,也可以是没有过滤的,它支持双线性、三线性和各向异性过滤。

  GF100通过提升效率来提升纹理性能,这主要是通过将纹理单元移至SM内来实现,它提升了纹理缓存的效率,同时纹理单元和纹理缓存的工作频率也更高。

  在上代的GT200架构,每三个SM(一个TPC)共享一个包含有8个纹理过滤单元的纹理引擎,一共有80个纹理单元,在GF100架构中,虽然纹理单元减少到了64个(4*16),但每个SM都有自己独立的纹理单元和独立的纹理缓存,这种整合的方式使得其性能直线增长。比如在Crysis游戏中,GF100的纹理性能是GT200的170%。

  同时,在实际应用中它会带来积极的作用,比如阴影绘图和SSAO(Screen Space Ambient Occlusion,屏幕环境光遮蔽)方面。

  GF100的专用L1纹理缓存(12KB)也作了重新设计,可以实现更高的效率,而且,通过统一的L2缓存(768KB),纹理可用的缓存容量达到GT200的三倍,为纹理密集的着色器提升了命中率。

  另外,在上一代架构中,纹理单元的频率与核心频率相同,但在GF100中,纹理单元的工作频率更高,因此对性能的提升是显而易见的。

  GF100的纹理单元还支持DirectX 11的BC6H和BC7压缩格式,在HDR纹理或渲染目标时可以减少内存占用量。

  ·从硬件上实现抖动采样(jittered sampling)

  抖动采样(jittered sampling)是针对阴影边缘和后期处理一项技术,通过对邻近texel(纹理像素)进行采样来计算并创建更柔和的阴影边缘效果。借助于DirectX 11的four-offset Gather4特性,GF100的纹理单元支持抖动采样,允许通过一条纹理指令从64x64的像素网格中拾取4个texel。

  不同的是,GF100从硬件上实现了DirectX 11的four-offset Gather4,能大大加速阴影绘图、环境光遮蔽和后处理算法,有了抖动采样的帮助,游戏能提高柔和阴影(soft shadow)或纹理过滤效率。对游戏开发商来说,意味着消耗的硬件资源更少;对玩家来说,则意味着画质更好。

  在上图左边显示的是3DMark 2006中的柔和阴影图样,它是通过右边的纹理网格执行抖动采样来完成的。GF100从硬件上实现抖动采样,性能较之以前提升了2倍。

§2.6 L2缓存设计

  GF100特别拥有768KB的统一的L2缓存,为所有的存取和纹理请求服务,L2缓存为GPU提供高效高速的数据共享。一些不能预知数据地址的算法,比如物理解算、光线追踪等都能从硬件缓存中受益。后处理过滤通常要求多个SM从内存中读取相同的数据,L2缓存在此时就能有效提升带宽效率。

  GT200只有256KB的L2缓存,还是只读的。GF100就不同了,除了容量大三倍外,并且能够进行读写操作,这也是GF100能够支持C/C++程序的重要因素。L2缓存有助于流水线上阶段间的数据交流,减少对片外内存的访问。 另外还采取了优先算法来清除L2中的数据,包括各种检查确保需要的数据居留在缓存中。

§2.7 新的ROP单元增强抗锯齿能力

  GF100一共有48个ROP单元,每8个一组分为6组,分别与6个64-bit的GDDR5内存控制器绑定。GF100的ROP单元也进行了重新设计,性能和效率都得到增强,是上一代的两倍。

  每个ROP单元每周期能输出32-bit整数像素,一个FP16像素只需要2个周期,一个FP32像素则需要4个周期。同时原子指令性能也得到极大提升,同一地址的原子操作性能比GT200快了20倍,连续内存地址的原子操作快了7.5倍。

  ·8xMSAA性能提升

  GF100在8xMSAA(MultiSampling Anti-Aliasing)的性能表现也有明显提升,这得益于在压缩效率上的改进。对于许多不能被压缩的很小的几何体,增加的ROP单元能带来更有效的渲染。

  一些测试显示,GF100在8xMSAA模式下的性能只比4xMSAA下损失9%,而对应的GT200性能损失在30%以上。

  ·支持32xCSAA

  在GF100中,还有一个很重要的设计,那就是支持32xCSAA(Coverage Sample Anti-Aliasing,覆盖采样抗锯齿),有提供更好的图像质量,利用alpha-to-coverage(透明至覆盖)来改善几何真实体的表现水平。

  CSAA是NVIDIA在MSAA基础上开发出来的,进一步节省显存使用量及带宽,它将边缘多边形里需要取样的子像素坐标覆盖掉,把原像素坐标强制安置在驱动程序预先算好的坐标中,能够高效率的执行边缘取样,效能提升非常的显著。 从G80时代就开始引入CSAA,不过最高只能支持到16xCSAA。

  32xCSAA实际上是8x的颜色采样(Color Sample)加上24x的覆盖采样(Coverage Sample),在750*750的采样坐标中8个蓝色点为实际采样点,通过驱动调度每个实际采样点周围再计算出3个覆盖采样,从而实现8xAA + 24xCSAA的32xCSAA效果。

  受限于API与GPU的计算能力,当今游戏能渲染的几何图形数量还是很有限的,比如树叶这样的细长物体就是一个老大难的问题,针对树叶的一种常用技术就是创建一个包含许多树叶的透明纹理包,利用alpha-to-coverage来消除树叶间的缝隙。覆盖采样的数量决定了边缘的质量,当覆盖采样只有4或8个时,将会出现很严重的锯齿和镶边效果。GF100能实现32xCSAA采样,采样达到32个,最大限度提升边缘质量。

  另外,TMAA(Transparency Adaptive Multisampling,透明动态多采样)也能从CSAA获益。由于DirectX 9 API不支持alpha-to-coverage,因此对于DirectX 9游戏,就需要TMAA的帮助。它采用一种叫“alpha test”的技术,为透明纹理产生硬边缘。TMAA能转换DirectX 9中旧有的着色器代码,使之能使用alpha-to-coverage,结合CSAA,能大幅提升画面质量。

  在上一代的GT200仅能实现最高16xCSAA(8xAA + 8xCSAA),在画面质量上是不能和GF100的32xCSAA相提并论,而且32xCSAA在性能上损失相当小,比如说32xCSAA下的性能只比8xAA下低7%。

§2.8 面向图形的计算架构

  虽然我们就Fermi通用计算架构作了讲解,在这里还是要针对它在图形计算方面的设计多费些口水,作为一款GPU,GF100很多设计是专为图形计算作了优化。

  像光栅化、光线追踪以及Reyes都是为人们所广泛认可的通用渲染算法,迄今为止,GPU已经专为光栅化而进行了设计。随着开发人员不断探索全新的方式来改进其图形引擎,GPU将需要在各种不断发展的图形算法上实现出色的性能。这些算法是通过通用计算API来执行的,因此一个强大的计算架构对GPU的图形功能来说是至关重要的。

  由于程序存储器的本地性仅在运行时有效,因此像光线追踪、物理效果以及人工智能等诸多算法无法利用共享存储器。GF100的高速缓存架构在设计过程中考虑到了这些问题。凭借每个SM所配备的最多48KB的L1高速缓存以及一个全局L2高速缓存,在运行时存取存储器同一位置的线程将自动加速运行,无论这些线程选用了那种算法都会实现加速。

  GF100计算架构针对游戏的另一个改进方面是调度。在游戏应用程序中,并不会执行单个占主导地位的内核,而是执行各种较小的内核(例如布料、流体、刚性体)。在GF100上,这些内核能够并行地执行,从而最大限度地利用了诸多CUDA Core。

  在利用计算的游戏当中,每一帧都会出现上下文切换,这一点使其性能很难达到灵敏帧速率的要求。GF100将上下文切换的时间缩短至约20微妙,使其能够在每帧多个内核之间执行精细的上下文切换。例如,一款游戏可以使用DirectX 11来渲染场景、切换至CUDA以实现选择性光线追踪、调用一个DirectCompute内核来执行后期处理以及利用PhysX执行流体模拟。

  计算算法在性质上是通用的,它们可用于解决各种各样的视觉计算与模拟算法等问题,在下面就两个实例作些探讨,即光线追踪和平滑粒子流体力学。

§2.8.1 光线追踪(Ray tracing)

  当光线透射到物体表面时,光会被吸收或反射和折射,特别是当光被折射到不同方向时,光谱就会发生变化,光线在经过一系列的衰减最后进入人的眼睛。光线追踪就是要计算出光线发出后经过一系列衰减再进入人眼时的情况,这种技术非常有助于提高游戏场景的真实感。

  光线追踪在电影制作中被广泛运用,但是PC游戏要求实时渲染,光线追踪所需的运算量极其庞大,这么多年来,CPU或GPU都无法胜任这项工作。但是无论是光线追踪本身还是它与光栅化的结合都被视为图形处理的未来发展趋势。

  现在,随着GF100的问世,交互式光线追踪首次在标准PC上成为可能。GF100在设计期间就专门将光线追踪考虑在内,它是首款在硬件上支持循环的GPU,能执行高线的光线追踪和其它图形算法。GF100的L1和L2高速缓存大幅提升了光线追踪的效率,L1缓存为邻近的光线增加了存储器的本地性,L2缓存则增大了至显存间的带宽。

  GF100不仅在光线追踪中有不错的表现,在路径追踪(Path tracing)等高级全局照明算法中也有表现不凡。路径追踪采用大量光线来收集场景中的环境光照信息。早期估算,GF100的路径追踪性能是GT200的四倍。

  为了维持一定的性能,游戏可以选择性地运行光线追踪。比如光栅化用来执行场景的第一个通道,被确定为反射光的像素将通过光线追踪来作进一步处理,这种混合渲染模式能提供更好的性能和更好的质量,相信会更容易被游戏厂商接受。

§2.8.2 平滑粒子流体力学(SPH)

  逼真的流体模拟一直被应用在电影中,以创造出各种奇特效果。虽然游戏设计师们非常渴望制作出类似的效果,但流体模拟的复杂度阻碍了它在实时应用程序中的应用。

  随着平滑粒子流体力学(Smoothed Particle Hydrodynamics,简称SPH)算法被集成到PhysX API中,流体模拟开始在游戏中得以突破。或许你还记得首个PhysX SPH游戏《Cryostasis》(雪域危机),它在极短的时间内模拟出了3万个流体微粒。

  然而《雪域危机》中的水粒子数量太少,还不足以达到以假乱真的地步,而且图形互操作极高的成本也限制了实际性能。

  GF100是首款能实现高保真流体模拟所需性能的GPU,GF100搭配改进型的SPH解算器,可以帮助设计师在整个游戏环景中加入高质量的SPH流体效果。GF100能模拟每帧128000个以上的SPH粒子,足以支持大量水及其它流体的特效表现,比如可以制作出自然形成的水花四溅和水漩涡效果。

  SPH算法一般不利用共享内存,上一代的共享内存架构制约了它的性能,而GF100的高速缓存架构能大大减少片外内存的通信量,能够在不耗尽存储器带宽的情况下模拟出大量粒子,而高速的上下文切换机制也进一步降低了模拟的开销 。总而言之,对于GF100来说,流体模拟达到了前所未有的高效。

§2.9 NVIDIA 3D Vision Surround

  NVIDIA的3D Vision Surround技术是在三台显示器上以全立体3D显示的方式呈现完全身临其境的游戏效果,从而将3D游戏推向一个新的高度。

  3D Vision Surround的渲染能力可以达到每秒7.46亿像素(1920*1080*120*3),当开启了Tessellation、PhysX等效果后要求就更变态了,这样就给了强大的GF100用武之地。GF100的每组ROP有8个ROP单元,相比前代产品翻了一番,其并行的多形体引擎和光栅引擎在像Tessellation这样任务繁重的场景中保持高性能。

  三台1920*1080分辨率的3D显示器可以组建成3D Vision Surrond系统,分辨率可以达到5760*1080。对于那些非3D显示器,也可以组建NVIDIA Surround,只要分辨率相同的多台显示器即可。除了GF100之外,GT200系列也同样支持3D Vision Surround技术,但都要求是双卡SLI以上,以保证游戏的流畅运行,目前针对这项技术的专用256驱动还没有发布。

  3D Vision Surround还包含有控制部分,可以让用户调整显示器,以补偿显示器的边框和间隙问题,从而呈现更加逼真的全屏游戏显示效果。

分享到:

网友都在说
表情
登录
发表