Re: [情報] NVIDIA顯卡爆發式飛躍揭秘:悄然上平鋪式

作者: jk21234 (BL2400PT真不錯)   2016-08-02 22:36:11
※ 引述《KotoriCute (Lovelive!)》之銘言:
: http://news.mydrivers.com/1/493/493738.htm
我去查了原文 , 他是說Maxwell採用的是Tile-Based Immediate Rendering
不過既然講到Tile Based Rendering,
就可以順便提一下歷史上的PowerVR
PowerVR 1 = Matrox M3D
PowerVR 2 -> Sega Dreamcast,Naomi
PowerVR 3 = Kyro (PC獨立顯卡)
然後就從NEC手中被英國公司Imagination收購,
這家公司又剛好在ARM對面.最後PowerVR和ARM
也聯手也分別打下Mobile市場
PowerVR雖然是最早以Tile Based Rendering命名技術的
不過他的做法因為後來又出現其他種Tile Based Rendering,
所以比較精確指稱的話,他可以稱為Tile Based Deffered Rendering
相對的後來其他家不太一樣,也叫自己為Tile Based Rendering的做法就有差
所以本文後面除非回到歷史名詞,不然會以TBDR代稱PowerVR的技術
TBIR代稱其他家的TBR.
那TBDR最重要的是Deferred Rendering,意思是說,畫面上通常會有很多個物件
沒有畫以前會有重疊的可能,傳統做法是一個相關的物件一起畫,但可能A畫好,
B又把他蓋掉,等於浪費掉了(overdraw)
所以能早點知道B在A前面,就直接先畫B,再畫A沒被蓋到的部分,
這樣最節省頻寬.PowerVR會切成小Tile再排序A和B誰在前面,
確保一定先畫前面


NV30和Radeon 200以後的GPU,基本上也有作TBR的情況,只是不以
Deferred Rendering的方式,而是EarlyZ/HyperZ,提早在pipeline前端
切掉超過範圍的東西.......算了 早點進入主題
現代GPU普遍的使用Tile Based Rendering,但他可能是基於其他理由.
根據實驗,Intel 的Haswell GPU的繪圖順序如此圖


這個是把Pixel繪圖的順序,變成B+G+R的顏色.
也就是Pixel 1就是(0,0,1),Pixel 255就是(0,0,255),
Pixel 65535就是(0,255,255)
可以看出 他繪圖的順序是8x8個pixel為一個小單元,然後小單元之間
像是貪食蛇這樣連接,而不是單純以X,Y軸為順序
這樣是做甚麼?
我們把情況簡化,假設螢幕總解析度是4x4
如果最傳統的圖學,資料順序是
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
當我們照這個順序的時候,有很多機會 你要去查鄰近的Pixel是甚麼顏色
7如果查旁邊6/8兩個 還算連續,3/11就跟你不連續了
如果你是1080P的畫面 已經在幾百kB外的資料了
但記憶體傳遞可以是連續的,一次很多,那如果能傳進來的時候,
同時把你四周的點都準備好 那可能會比較省時間
從2x2來看
1 2
3 4 好像隨便排都很近
把這想法先擴大一倍看看
1 2 5 6
3 4 7 8
9 10 13 14
11 12 15 16
至少我保證只要一次傳4個pixel,有一半的機會你的鄰居也好了
如果不這樣做就是
1 2 3 4 當你要查6的時候,要等下次
5 6 7 8
9 10 11 12
13 14 15 16
類似的實行法不只上面那個,我舉的這種叫做Z-ORDER CURVE
wiki上有圖示會比較清楚
https://en.wikipedia.org/wiki/Z-order_curve
還有比較複雜的比如Hilbert Curve
https://en.wikipedia.org/wiki/Hilbert_curve
那麼 綜合而言,TBIR(如果不考慮捨棄overdraw的三角面)
是打算達成甚麼效果呢?
1.先將要畫圖的畫面,切成N*N的pixel的方塊 一次進入顯示卡的
Pipeline或者同一單位的Shader群繪製
為什麼?因為縮減了範圍,Data Locality相對提高
針對貼圖的Cache命中率就會高很多
2.不同Tile的順序是以Z-order Curve或者Hilbert Curve等順序完成
這可以得到兩個效果
A.由記憶體連續送進來的東西比較有機會是你會用到的
反之也可以說是 你和你的鄰居可以被打包成一次傳送
B.你要重新查詢隔壁的東西 他很有機會還在Cache中沒被擠出去
不用再讀取一次
3.(順便的) 貼圖的儲存順序也會照同一個方式儲存
如果說要用這種方式儲存
那記憶體位置跟X,Y軸的對應關係就變得很複雜了
所以所有相關的電路都會因此多花費電晶體但省掉記憶體頻寬
事實上GPU的進步中這是很常見的事情 用更多的電晶體
換更少的記憶體頻寬消耗量,記憶體頻寬才是有限資源.
如果要說有無採用TBIR,我認為目前的AMD/nVidia/Intel/ARM GPU都是
並不是nVidia專屬,當然這個東西也不影響畫出來的效果,不屬於任何
投機的範圍
(ARM有一個專利 因為TBR有Tile,可以數出已經畫了畫面上的百分之多少,
如果已經超額完成任務 可以把GPU的記憶體存取暫停讓給CPU使用.
另外Samsung和nVidia也有申請TBR的相關專利....)
==
補充:PowerVR敗退自PC原因是因為自身的TBDR,雖然省了記憶體頻寬
但需要較多的記憶體量 成本優勢有限 加上TBDR會在透明色/多重貼圖/
Vertex Shader的情況有較多劣勢....
但成為Mobile GPU無可跨越的霸主也可算是在TBDR.
因為Mobile GPU實在是無法浪費多少電給你在記憶體頻寬上
作者: greenpeace21 (夢見街)   2016-08-02 23:25:00
難怪Dreamcast的遊戲不太用透明色和多重貼圖

Links booklink

Contact Us: admin [ a t ] ucptt.com