幾周前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)