Beyond3D的Xenon專刊發表….

http://www.beyond3d.com/articles/xenos/
解釋了不少疑惑,不過也製造了更多疑惑。(汗)

總之,有幾個要注意的地方:

1. FP10
C1有個新格式,s7e3、10-10-10-2,所以使用的話和Int8的負擔相同。
不過這個格式看來限制蠻大的…. 顯然是對效能上的取捨。
和OpenEXR提供的FP16(s10e7)出發點不同。
FP Filtering / Blending 看來也是對這個格式提供的,那自然規模就可以比較小些。

2. Tiled Access
10MB eDRAM只放Back Buffer(Color),
Front Buffer(內含Color 和 Z)則放Main Memory。
720p 和 1080i 的 2x FSAA都會超過10MB,所以要用tiled分別寫出。
能夠做到這點的原因是因為先做了個Z-pass。
而且還具備了 Hierarchical Stencil Buffer。
另外有Alpha-to-Mask,可以處理未sorting的Alpha。

3. Shader ALU結構
Shader是純FP32,沒有別的精確度模式;
在使用大約兩個 loop、兩個tex和6個shader op的時候,還能維持最大fillrate;
整個Shader Array在一般的繪圖狀況下,可以達到的使用率是95%左右。
(ATI宣稱目前的傳統結構,效率大概是50%~60%….)

記憶體直接存取是透過F-Buffer的交換….(MEMEXPORT)

ALU之間的資料傳遞可能是透過loop來交換的。
因為所有的指令都會通過Arbiter,然後分配到不同的thread,再交由底下的ALU Array處理;
所以ALU Array計算的結果,進入 loop,再由 Arbiter 接收,分配給不同的ALU。

這樣子提示出一個有趣的地方:
對Aribter來說,同一個 pixel、vertex,在一個 loop 之後,有可能不是由同一個 ALU處理的。
所以 ALU其實可以不用管接收到的是 Vertex 或者是 pixel op,只需要處理Arbiter給的所有工作就好了。
因為其實這等於把ALU切成兩塊,fetch/decode都由Arbiter做,execute 才是後面的 "子ALU"。
而且別忘了,thread實質上是隱藏在Arbiter裡面的,外界其實不需要考慮C1的threading。
(所以"虛擬地"來說,C1等於有64個VS、和64個PS)

反過來說,我們可以看到,所有可能的瓶頸都集中在Arbiter上….
久多良木健在PCWatch的訪談中提出的疑問也應該是在指這個地方。
那個Arbiter有多大?
先前XGI的人指出,光那個Arbiter大概就有ARM9以上的規模,
因為工作量大概真的有那麼大。

直接記憶體存取靠的是MEMEXPORT這個延伸,看來是F-Buffer的一部份。
可以把F-Buffer的內容整個送到主記憶體裡面。

—-
另外,關於那95%的ALU使用率….
其實我覺得那個95%的數字的說法還是蠻奇怪的。
因為C1的ALU結構畢竟還是4D + 1D…..

這邊可能可以從兩個方向去看:

為什麼會做 Mini-ALU,就是要用在不同的指令,
避免比方說NV2x那樣,4D單元一次都只能吃一個2D/3D/4D….甚至有1D(scalar)進來就更慘了。
co-issue就是指"以特定順序進來的指令"可以填滿整個shader;
而C1就是去除掉這個限制,讓所有的shader pool的資源,而不需要有指令順序的依存性。

但是,因為是4D + 1D,所以遇到2D/3D/4D照樣還是吃掉一個4D….
1D的指令蠻多的,所以有做1D可以理解。
但是這個95%怎麼算的?如果進來的大多是2D/3D的話,
那48個4D即使利用到滿,還是會有很多ALU是"半滿"的啊。

如果類似先前一開始傳的48個1D的話,
那效率大概真的只有mispredition的狀況會低下,
說成95%就非常有說服力;不過設計的複雜度大概就很難接受了….

降低一個層次,如果用"有用到就好"來算的話:
比方說R300是3D+1D,還外加 mini-ALU也是3D+1D。
但是因為mini-ALU的指令種類有限制,所以大部分狀況下可能Mini-ALU都是閒置的。
從ALU數量(4個)來算,就真的會是50~60%了。
NV4x….. well,前後兩個Shader可以處理的指令種類也不完全一樣,
所以從這個觀點來看,效率也是會受限。

但是,至少第一個 ALU(3D+1D)的部份,如果有使用到就算的話,利用率應該都很好吧?
這樣的話,要改善效率,一開始直接就做成所有的ALU直接面對前端就好了。

所以,我是覺得如果照ATI那種算法的話,
像R520這樣,32個 Pixel shader直接面對Triangle Setup,
那不需要用Arbiter來管理,效率也不會差得很多….
只要不要塞在前面的VS上的話。

這邊就會出現另外一個狀況,也就是VS與PS之間的關連性問題:
VS不足的時候,如果程式本身真的有很多小三角面,
那真的有可能塞在VS上;但是現在通常不會遇上這種狀況。
現在我們提高了 Pixel Shader的能力,使用normal map,減少無謂的polygon…..

C1這種結構,應該就可以直接涵蓋掉這個"PS等VS"的情況。
所以光這個部份的話C1還是比R520好,因為沒辦法去除掉程式會有這個可能性。

另外,同理可證,
結構接近32×1的R520,效率上會比G70的24×2般的結構好,
即使G70的Shader看起來比較多,規模可能比R520大….
這個未來應該會反映在 Benchmark result 上。

—-
總之,C1的結構是一種新的觀念,指的是說
"因為GPU的ALU佔的比例越來越高,所以我們需要提高這些ALU的使用率,而不是只靠塞更多ALU。"
關於這部份未來可能會有更多的研究。
也就是所謂"Free的部份不用就會成為浪費"的觀念,所以要避免"結構上有太多Free但是卻用不到的資源"。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料