RADEON X1900体系结构揭秘
——“把Shader Model 3.0作对”
进入2006年,不少游戏开发商已经采用DX9 shader model 3.0(着色器模型3.0,下缩写为SM 3.0)来编写着色器程序,一方面是因为NV4X、G70、RADEON X1000都是具备SM 3.0,另一方面像XBOX 360、Playstation 3这两个新游戏机平台的GPU其实也都是SM 3.0的衍生产品,大量使用SM 3.0的游戏可说是已经呼之欲出了。
| 在DX9中,shader model(着色器模型)有多个版本,包括SM 2.0、SM 2.0a、SM 2.0b以及SM 3.0,其中SM 2.0和SM 3.0是最主要的两个,两者的区别主要是SM3.0提供了更长指令数的着色器程序、动态分支、顶点纹理拾取以及全精度格式提升为FP32等,开发人员需要根据图形卡的硬件能力分配不同的着色器渲染路径。 |
和之前的SM 2.0相比,SM3.0的一个重要特性就是提供了动态流控制,可以让程序员决定不同条件下的像素执行不同的代码路径或者重复执行某段代码。例如在作阴影渲染的时候,我们如果想要更逼真的阴影,可能需要在阴影的边缘作柔化处理。
此时使用动态分支的话,我们就可以只对位于阴影边缘需要作柔化效果区域的像素作柔化效果的计算,避免对整个场景中的所有像素作这样复杂耗时的取样操作,从而提升渲染的性能。
但是动态分支对目前基于SIMD(单指令多数据)体系的像素着色器来说,会构成破坏并行性的潜在缺点,一旦出现SIMD的并行性被破坏,GPU的性能就会出现下降。
要避免或者说减缓这样的情况发生,就应该采用较小的像素包(batch),因为当batch比较小的话,batch内的像素出现不同渲染代码的情况就可以大大降低,SIMD并行性遭到破坏的情况也就大大降低了。
ATI去年发表的RADEON X1000系列就可以实现4x4像素batch下就能提供高效分支性能,相比之下,NVIDIA G70的最佳batch尺寸只能做到32x32的(遇到并行性遭到破坏的机会更大一些)。正是因为这样,ATI正非常努力地向玩家灌输其RADEON X1000 "shader model 3.0 done right(把SM3.0做对了)"的观念。