几周前ATi在伦敦召开了一次新闻媒体会议,在会议上ATi讨论了未来DirectX10的一些功能和特性,Elitebastards网站为此刊登了一篇简报文章,以下是ATi对关于众所周知的,统一Shader架构的看法:
正如我们所知,传统架构Pixel shader和Vertex shader单元是独立的,因此无法获得工作负载的动态分配或平衡,面对不同场景不同工作量的像素和顶点运算,无法获得高效处理方式,进而可能造成瓶颈。
从上图不难看出,在第一个场景中,该鲨鱼物体有大量多边形组成,而组成多边形或者说三角形的顶点都由GPU的Vertex shader来处理,因此Vertex shader一直处于繁忙状态,相反,这时Pixel shader却没有多少工作可做,这显然是在硬件上对芯片的浪费。
第二个场景是另外一个极端,在这个水波纹场景中,顶点很少,相反为了创建波纹,反射和折射效果,需要非常之多的像素。此时大多数Vertex shader都处于闲置状态,而Pixel shader则满负荷运行。
尽管这是两个极端的场合,但它说明了一个问题-传统的架构很少能完全利用所有的Shader单元。
而这正是统一架构的优势所在,它没有独立的pixel和Vertex shader单元,而是由一个能同时处理Pixel和Vertex的统一shader单元。
回到上面的例子也许能容易说明统一架构,与上面两个独立场景不同的是,ATi可以将多顶点鲨鱼和多像素的水混合成一个场景,而由于Vertex和Pixel处理共享一个单元,这样可以尽可能在同一时间完成更多工作,这意味着在处理Vertex和pixel数据时,除了硬件性能不足以外,由此带来的瓶颈已不复存在。
当然,统一架构并不是简单的将Vertex和Pixel数据送到单元中去,这显然不行,统一架构需要在单元入口对数据流进行组织和整理,以确定每个时钟所处理的数据类型,那么谁能来承担这个工作?
和很多CPU中的功能单元一样,该功能由线程仲裁器完成,线程仲裁器以最有效的方式将数据送入统一shader单元,数据同时被最优数据处理,以保证最快的处理速度。这意味着线程仲裁器要以指令方式通知shader单元处理的数据类型,时钟周期。
任何事物都不是完美的,统一架构也有自己的弱点,因为它增加了一个单元设计的复杂性,这也意味着成本的增加,与传统架构相比,统一shader单元无疑需要更多的晶体管,还有线程仲裁器所需要的晶体管,对此ATi的答复是“不便宜,但也不是很复杂”。
(2006-07-05)