NVIDIA顯卡爆發式飛躍揭秘:悄然上平鋪式 - 3C

By Tom
at 2016-08-02T22:36
at 2016-08-02T22:36
Table of Contents
※ 引述《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誰在前面,
確保一定先畫前面
http://img.tomshardware.com/us/2001/04/25/a_speedy_tiler/tbr_texturing.gif
NV30和Radeon 200以後的GPU,基本上也有作TBR的情況,只是不以
Deferred Rendering的方式,而是EarlyZ/HyperZ,提早在pipeline前端
切掉超過範圍的東西.......算了 早點進入主題
現代GPU普遍的使用Tile Based Rendering,但他可能是基於其他理由.
根據實驗,Intel 的Haswell GPU的繪圖順序如此圖
http://i.imgur.com/y5gJL63.png
這個是把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實在是無法浪費多少電給你在記憶體頻寬上
--
: 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誰在前面,
確保一定先畫前面
http://img.tomshardware.com/us/2001/04/25/a_speedy_tiler/tbr_texturing.gif

NV30和Radeon 200以後的GPU,基本上也有作TBR的情況,只是不以
Deferred Rendering的方式,而是EarlyZ/HyperZ,提早在pipeline前端
切掉超過範圍的東西.......算了 早點進入主題
現代GPU普遍的使用Tile Based Rendering,但他可能是基於其他理由.
根據實驗,Intel 的Haswell GPU的繪圖順序如此圖
http://i.imgur.com/y5gJL63.png
這個是把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實在是無法浪費多少電給你在記憶體頻寬上
--
Tags:
3C
All Comments

By Kama
at 2016-08-04T13:51
at 2016-08-04T13:51

By Olga
at 2016-08-06T21:14
at 2016-08-06T21:14

By Harry
at 2016-08-11T14:22
at 2016-08-11T14:22

By Queena
at 2016-08-15T21:36
at 2016-08-15T21:36

By Sandy
at 2016-08-19T22:05
at 2016-08-19T22:05

By Tracy
at 2016-08-23T14:35
at 2016-08-23T14:35

By Belly
at 2016-08-25T23:17
at 2016-08-25T23:17

By Lily
at 2016-08-27T11:41
at 2016-08-27T11:41

By Elvira
at 2016-08-31T04:09
at 2016-08-31T04:09

By Bethany
at 2016-09-02T15:31
at 2016-09-02T15:31

By Lily
at 2016-09-06T20:05
at 2016-09-06T20:05

By Daph Bay
at 2016-09-08T03:23
at 2016-09-08T03:23

By Elvira
at 2016-09-11T04:31
at 2016-09-11T04:31

By Elma
at 2016-09-12T18:48
at 2016-09-12T18:48

By Emma
at 2016-09-14T17:06
at 2016-09-14T17:06

By Lauren
at 2016-09-16T21:24
at 2016-09-16T21:24

By Oliver
at 2016-09-19T11:48
at 2016-09-19T11:48

By Brianna
at 2016-09-23T16:33
at 2016-09-23T16:33

By Gilbert
at 2016-09-26T11:16
at 2016-09-26T11:16

By Ophelia
at 2016-09-28T13:13
at 2016-09-28T13:13

By Todd Johnson
at 2016-10-03T01:07
at 2016-10-03T01:07

By Poppy
at 2016-10-05T01:41
at 2016-10-05T01:41

By Una
at 2016-10-09T01:35
at 2016-10-09T01:35

By Daph Bay
at 2016-10-11T02:28
at 2016-10-11T02:28

By George
at 2016-10-11T20:56
at 2016-10-11T20:56

By Selena
at 2016-10-12T06:47
at 2016-10-12T06:47

By Isabella
at 2016-10-15T03:10
at 2016-10-15T03:10

By Aaliyah
at 2016-10-19T23:14
at 2016-10-19T23:14

By Candice
at 2016-10-22T04:20
at 2016-10-22T04:20

By John
at 2016-10-26T12:16
at 2016-10-26T12:16

By Liam
at 2016-10-27T18:01
at 2016-10-27T18:01

By Ophelia
at 2016-10-30T07:19
at 2016-10-30T07:19

By Andrew
at 2016-11-03T07:50
at 2016-11-03T07:50

By Skylar Davis
at 2016-11-07T09:35
at 2016-11-07T09:35

By Lauren
at 2016-11-08T21:32
at 2016-11-08T21:32

By Madame
at 2016-11-13T21:29
at 2016-11-13T21:29

By Edward Lewis
at 2016-11-14T22:38
at 2016-11-14T22:38
Related Posts
新手組40K電腦 搭配 請各位評估

By Iris
at 2016-08-02T22:06
at 2016-08-02T22:06
第一次換主機板+CPU問題

By Catherine
at 2016-08-02T22:04
at 2016-08-02T22:04
新手發問

By Linda
at 2016-08-02T21:39
at 2016-08-02T21:39
AMD RX 480 8GB 非公版 評測總匯

By Edith
at 2016-08-02T21:21
at 2016-08-02T21:21
3dmark Pascal Nvidia Titan X

By Erin
at 2016-08-02T21:17
at 2016-08-02T21:17