最近後藤老爹發了五篇關於G80的文章:
【12/ 1】メモリアクセス粒度が課題となるG80時代のGPUメモリ
【11/27】シェーダプログラムの進化と連動するGPUのマルチスレッディング化
【11/21】G80とG7xの最大の違いはマルチスレッディング
【11/14】GeForce 8800世代のキーとなるマルチスレッディング
【11/ 9】これがGPUのターニングポイント NVIDIAの次世代GPU「GeForce 8800」
其中12/1這篇提到了目前繪圖記憶體在存取單位大小的問題,這也是G80一個非常有爭議的地方。
GDDR4目前把GDDR3的prefetch4提升到prefetch8,但是因為這個prefetch必須是連續的,所以以64bit寬度的ROP來說,等於一次讀取的單位就是總計512bit/64byte的資料,但是其中其實可能只有8~16byte的資料有用處,剩下都浪費掉了。即使是GPU這樣資料結構經過特別最佳化的硬體都還是不容易遇到這麼大的連續讀取,更別提GPGPU了。
所以ATI R5x0為了對應這個問題,提早把ROP的寬度改為32bit,使得prefetch8也能維持和當初GDDR3的prefetch4類似的效率;但是因為DRAM本身是32bit的,也就是說未來還想要進展到Prefetch16的話,問題就無可迴避了。G80維持64bit的ROP,因而被認為是設計上沒有打算對應GDDR4。(不過目前看來R600似乎也是32/64 x 8的設計,或許實做32×16的結構真的對電晶體數量壓力太大了吧)
但是透過XDR2提供的Micro-Threading結構,就可以迴避這個問題,在prefetch16的長度內放入交錯於不同bank內的資料,進而有辦法實做更長的prefetch,讓傳輸更貼近銅線可傳輸的極限….這也是protocol based DRAM interface的初衷。所以,GDDR系的記憶體,遲早有必要實做類似Micro-Threading的結構;但是有可能會因此遇到與RAMBUS公司間的專利問題,而使得問題複雜化。
另一個可能,自然就是直接採用XDR2了。
由於同屬SONY在PS3的合作夥伴,NVIDIA和RAMBUS也算是有一度合作過的關係,不過RSX最後仍然沒有採用XDR。
以後會不會採用相當值得注目,畢竟NVIDIA在GPU上有PureVideo這個外來IP,雖然它還只是附加價值系的東西,重要性和Memory Controller相比是輕了許多。
這麼關鍵的環節,真的會放心交給外人嗎?值得注意。
此外,在CUDA programming guide裡面對G80的硬體spec描述如下:
G80 has the following characteristics:
1. The maximun number of threads per block is 512;
2. The amount of device memory is 1GB;
3. The amount fo shard memory abailable per multiprocessor is 16KB divided into 16 banks;
4. The amount of constant memory available is 64KB;
5 The warp size is 32 threads.
這個”device memory is 1GB”看起來像是在指出G80的on-board memory組成可達1GB,也就是64×8=512bit….
但是看到shader與新AA模式–CSAA的表現,其實感覺G80對512bit的需求並不急迫。
Shader真的蠻可怕的,512 threads per block(TCP),意思就是整個G80總共有4096個thread!
這足足是R5x0的8倍;但是從分支性能看來,其實反而比R520還差些,為什麼呢?考慮shader規模大約是兩倍(128個1D,相當於32個4D),每個thread看來很可能都是1D,所以4096個thread相當於1024個4D thread。(!!)
Shader Pool的時脈和其他部分相差兩倍左右,所以延遲也大了一倍左右,讓與R520同等thread比例(128thread–4個4D,512thread–16個1D)的G80,實際上可以處理的branch size不得不加倍(4×4 become 4x4x2)。
也就是說,理論上G80的shader時脈可以非定比例拉高沒錯(AFAIK up to 4GHz),但是延遲會跟著shader時脈比例增加,也就會遇上分支性能隨著時脈增加而弱化的問題,類似R580增加shader時分支開銷相較於R520弱化。
CSAA目前有種說法,是指出它其實是Matrox 過去提出的Fragment AA的完美版本….
每個pixel可以儲存4個fragment,並且每個fragment都可以儲存4個sample,所以4個fragment成為這16個sample的index….
和過去Matrox FAA相比,大概就是fragment有沒有儲存sub-sample帶來的差異,所以可以有比較好的汎用性;不過弱點還是類似,shadow volume。
這也造成AA效果大大改善,資源需求卻變少的狀況。
memory interface本身了無新意,但同時也因此展現出了Shader與新AA模式本身的潛力,真是非常有趣的狀況。