被人家叫來看這篇XDa
http://forum.gamer.com.tw/C.php?bsn=60001&snA=9541
360 GPU “Xenos” Fill-Rate Performance測試
(by WaffenSS)
Source:
http://forum.beyond3d.com/showpost.php?p=1150172&postcount=107
http://forum.beyond3d.com/showthread.php?p=1150172#post1150172
“RSX Secrets” post#107
現在對eDRAM歌功頌德好像沒什麼意思,不過有數據總是好事。
這些相關數據裡面主要的問題是,color compression和z-compression的作用就是用來避免「MSAA開了以後效率就掉一半」的狀況,但是G72M並不具備這個功能;還有雖說TMU會佔走shader unit 0的指令slot,但是一來PS也不是和Tex的指令數量1:1,二來C1的TMU和RSX的TMU數量和功能對比都不均等,這篇數據是忽視了這些部分,只用”G72M乘六倍”來推估RSX的性能是不太恰當;當然原文有提示這點,問題就是各討論版的看官了。_A_
個人認為,這篇反而”證實” C1的unified shader ALU總資源大約與RSX的Pixel Shader ALU總資源相仿。_A_
友人言:OO 頻寬的 XX 效率不是很好,所以 ZZ 匯流排在 WW 系統上的表現要靠 AA 的頻率拉到 BB 才行,可是這樣一來 (下略
結論:嘴砲萬歲!
>fp16 nrm在FP16的normal mapping的時候取法向量的時候會用到,
>所以其實可以替補某些sh0的作用。
這麼說起來的話,
只要遊戲中對normal mapping之類的應用較多的話,
RSX會較吃香囉?
再問Eji大一個問題,
那就是mini-ALU有MADD指令嗎?
>fp16 nrm在FP16的normal mapping的時候取法向量的時候會用到,
>所以其實可以替補某些sh0的作用。
這麼說起來的話,
只要遊戲中對normal mapping之類的應用較多的話,
RSX會較吃香囉?
再問Eji大一個問題,
那就是mini-ALU有MADD指令嗎?
個人推這句
–
如果嫌這測試不夠真實, 之前B3D有跨平台開發者,把真正遊戲故意關掉LOD減面功能,
未經最佳化測出來數據也高達300MTris/s.
有這種效能難怪不需要像PS3開發者, 常要用SPE去預先處理頂點及砍面數.
360的開發者卻只要把所有東西丟給Xenos就好了…….它有太足夠的頂點效能讓你浪費
–
我長期以來一直懷疑某些人完全不清楚其實 PS 在現在或是近未來的世代中是比 VS 要來的重要的,另外就算頂點增大吃的也是 GS 非 VS……
至於他拿全部 Xenos 的 ALU 去跟 RSX 的 PS ALU 相比然後順便提一下在 VS 下他們不用靠 CPU 去看頂點跟面數…….? 是忽略了一邊有 VS ALU 而他們已經把所有的 ALU 都拿去跑 PS 了嗎?這點我比較難以理解的是拿 Xenos 全部的 ALU 去跟 RSX 的 PS ALU 或是 VS ALU 比說他們在兩方面都比較好,這邏輯有強,或許我該學起來。
當然最厲害的是拿 Go G74 來推論 RSX 的性能,這點也是一定要學的。
結論:嘴砲萬歲!
個人推這句
–
如果嫌這測試不夠真實, 之前B3D有跨平台開發者,把真正遊戲故意關掉LOD減面功能,
未經最佳化測出來數據也高達300MTris/s.
有這種效能難怪不需要像PS3開發者, 常要用SPE去預先處理頂點及砍面數.
360的開發者卻只要把所有東西丟給Xenos就好了…….它有太足夠的頂點效能讓你浪費
–
我長期以來一直懷疑某些人完全不清楚其實 PS 在現在或是近未來的世代中是比 VS 要來的重要的,另外就算頂點增大吃的也是 GS 非 VS……
至於他拿全部 Xenos 的 ALU 去跟 RSX 的 PS ALU 相比然後順便提一下在 VS 下他們不用靠 CPU 去看頂點跟面數…….? 是忽略了一邊有 VS ALU 而他們已經把所有的 ALU 都拿去跑 PS 了嗎?這點我比較難以理解的是拿 Xenos 全部的 ALU 去跟 RSX 的 PS ALU 或是 VS ALU 比說他們在兩方面都比較好,這邏輯有強,或許我該學起來。
當然最厲害的是拿 Go G74 來推論 RSX 的性能,這點也是一定要學的。
結論:嘴砲萬歲!
補充一點
長期以來我都認為會用 SPE 去做 pre-vertex 處理的遊戲是非常少的,頂多只有 PSedge/Phyreengine 或是少數第一廠的遊戲有做,這樣說起來的話似乎是種常態?
–
我老實承認我喜歡說反話……
補充一點
長期以來我都認為會用 SPE 去做 pre-vertex 處理的遊戲是非常少的,頂多只有 PSedge/Phyreengine 或是少數第一廠的遊戲有做,這樣說起來的話似乎是種常態?
–
我老實承認我喜歡說反話……
有沒有RSX Shader ALU資源經過實測的分析數據?希望不要只是由實測數據對比單元數量、頻率計算出來的成果喔。
話說shader unit 0的free fp16 normalize有何作用?
難道這free fp16 normalize沒有幫RSX(G7x)的PS減少某些負擔嗎?
話說RSX的shader unit 0要負擔Tex,但C1何嘗不是要US分扮VS和PS?
話說shader unit 0的free fp16 normalize有何作用?
難道這free fp16 normalize沒有幫RSX(G7x)的PS減少某些負擔嗎?
話說RSX的shader unit 0要負擔Tex,但C1何嘗不是要US分扮VS和PS?
> RSX實測
目前沒有XD
拿G71和G70大概都和RSX有一點點差距,畢竟G71有稍微刪減一點點指令slot。
> 話說shader unit 0的free fp16 normalize有何作用?
> 難道這free fp16 normalize沒有幫RSX(G7x)的PS減少某些負擔嗎?
fp16 nrm在FP16的normal mapping的時候取法向量的時候會用到,所以其實可以替補某些sh0的作用。
這個測試並沒有提到這點的關係,所以的確是有點偏頗;當然G8x的時候就不再強調這些free指令了。
> 話說RSX的shader unit 0要負擔Tex,但C1何嘗不是要US分扮VS和PS?
所以某種意味上,US總和與人家PS相同,不就是代表VS真的是多出來的。XD
> RSX實測
目前沒有XD
拿G71和G70大概都和RSX有一點點差距,畢竟G71有稍微刪減一點點指令slot。
> 話說shader unit 0的free fp16 normalize有何作用?
> 難道這free fp16 normalize沒有幫RSX(G7x)的PS減少某些負擔嗎?
fp16 nrm在FP16的normal mapping的時候取法向量的時候會用到,所以其實可以替補某些sh0的作用。
這個測試並沒有提到這點的關係,所以的確是有點偏頗;當然G8x的時候就不再強調這些free指令了。
> 話說RSX的shader unit 0要負擔Tex,但C1何嘗不是要US分扮VS和PS?
所以某種意味上,US總和與人家PS相同,不就是代表VS真的是多出來的。XD
沒有RSX 的實測也沒關係,建議Eji可以計算G72M的PS ALU理論性能,再與這份日本人作的測試成果作比較。
沒有RSX 的實測也沒關係,建議Eji可以計算G72M的PS ALU理論性能,再與這份日本人作的測試成果作比較。
> 這麼說起來的話,
> 只要遊戲中對normal mapping之類的應用較多的話,
> RSX會較吃香囉?
在材質之中normal mapping比例比較多的話可能會有利吧。
不過一來fp16 tex才有用、二來材質太多的話texture讓sh0閒置的比例反而會更難忽視的關係,我是比較支持TMU和shader無依存性的(G80這樣)。
mini-ALU的MADD….
哪個ALU?sh1嗎?sh1的話是有MADD的啊。
> 這麼說起來的話,
> 只要遊戲中對normal mapping之類的應用較多的話,
> RSX會較吃香囉?
在材質之中normal mapping比例比較多的話可能會有利吧。
不過一來fp16 tex才有用、二來材質太多的話texture讓sh0閒置的比例反而會更難忽視的關係,我是比較支持TMU和shader無依存性的(G80這樣)。
mini-ALU的MADD….
哪個ALU?sh1嗎?sh1的話是有MADD的啊。
原來是sh1的mini-ALU才有MADD指令,
疑惑終於解開了XD
話說sh1的mini-ALU才有MADD而sh0沒有,
是因什麼原因造成sh0和sh1的設計不同?
難道是和Tex有關?
原來是sh1的mini-ALU才有MADD指令,
疑惑終於解開了XD
話說sh1的mini-ALU才有MADD而sh0沒有,
是因什麼原因造成sh0和sh1的設計不同?
難道是和Tex有關?
to shady:
> 原來是sh1的mini-ALU才有MADD指令,
> 疑惑終於解開了XD
我沒這樣說XD 我只是想問你講的mini-ALU是哪個XD
對NV4x/G7x來說,mini-ALU指的是成組的”另外一半邊”,比方說我們都知道NV4x/G7x都是3+1D(sh0)和2+2D(sh1),這時候sh0的3D和sh1的其中一個2D是主ALU、然後sh0的1D和sh1的另外一個2D是mini-ALU。
> 話說sh1的mini-ALU才有MADD而sh0沒有,
> 是因什麼原因造成sh0和sh1的設計不同?
> 難道是和Tex有關?
呃,你忘記了:sh0沒有MADD是NV4x,G7x最大的改善就是sh0補上MADD;NV4x的sh1本來就有MADD了。
http://techreport.com/articles.x/8466/1
to shady:
> 原來是sh1的mini-ALU才有MADD指令,
> 疑惑終於解開了XD
我沒這樣說XD 我只是想問你講的mini-ALU是哪個XD
對NV4x/G7x來說,mini-ALU指的是成組的”另外一半邊”,比方說我們都知道NV4x/G7x都是3+1D(sh0)和2+2D(sh1),這時候sh0的3D和sh1的其中一個2D是主ALU、然後sh0的1D和sh1的另外一個2D是mini-ALU。
> 話說sh1的mini-ALU才有MADD而sh0沒有,
> 是因什麼原因造成sh0和sh1的設計不同?
> 難道是和Tex有關?
呃,你忘記了:sh0沒有MADD是NV4x,G7x最大的改善就是sh0補上MADD;NV4x的sh1本來就有MADD了。
http://techreport.com/articles.x/8466/1
>對NV4x/G7x來說,mini-ALU指的是成組的”另外一半邊”,
>比方說我們都知道NV4x/G7x都是3+1D(sh0)和2+2D(sh1),
>這時候sh0的3D和sh1的其中一個2D是主ALU、
>然後sh0的1D和sh1的另外一個2D是mini-ALU。
小弟一直以為sh0和sh1的mini-ALU只是個Scalar Unit…_A_
>呃,你忘記了:sh0沒有MADD是NV4x,
>G7x最大的改善就是sh0補上MADD;
>NV4x的sh1本來就有MADD了。
不,小弟沒忘記這一點,而以下這句:
>>是因什麼原因造成sh0和sh1的設計不同?
本來是要打成:
>>是因什麼原因造成sh0和sh1的mini-ALU設計不同?
所以小弟本意是要問sh0和sh1兩者的mini-ALU,
而有此疑問是因為小弟誤會只有sh1的mini-ALU才有MADD指令XD
>對NV4x/G7x來說,mini-ALU指的是成組的”另外一半邊”,
>比方說我們都知道NV4x/G7x都是3+1D(sh0)和2+2D(sh1),
>這時候sh0的3D和sh1的其中一個2D是主ALU、
>然後sh0的1D和sh1的另外一個2D是mini-ALU。
小弟一直以為sh0和sh1的mini-ALU只是個Scalar Unit…_A_
>呃,你忘記了:sh0沒有MADD是NV4x,
>G7x最大的改善就是sh0補上MADD;
>NV4x的sh1本來就有MADD了。
不,小弟沒忘記這一點,而以下這句:
>>是因什麼原因造成sh0和sh1的設計不同?
本來是要打成:
>>是因什麼原因造成sh0和sh1的mini-ALU設計不同?
所以小弟本意是要問sh0和sh1兩者的mini-ALU,
而有此疑問是因為小弟誤會只有sh1的mini-ALU才有MADD指令XD
> 小弟一直以為sh0和sh1的mini-ALU只是個Scalar Unit…_A_
你說的是這張圖吧:
http://pc.watch.impress.co.jp/…701/kaigai_5a.gif
來源是這篇:
http://pc.watch.impress.co.jp/…701/kaigai195.htm
老實說,除了後藤老爹的專欄之外,似乎沒有其他地方在討論NV4x/G7x的時候把mini-ALU當成和main-ALU獨立的1D ALU….
也就是「只有後藤老爹這篇把VS和PS都算成總計5D的unit」, 所以我覺得這篇本身有問題的機會比較大。
此外,在RSX的發表會上,把mini-ALU寫成”SFU(Special function unit)”。
http://pc.watch.impress.co.jp/…701/kaigai_3a.gif
現在回想起來,在G8x時代,SFU指的是sin/cos等複雜的multi-cycle指令,由4D共用的一個mini-ALU;等到CUDA的規格公開之後,我們開始發現G8x並不是一堆1D ALU構成,而是每兩個支援scatter(移位)的4D unit構成一組8D,所以本來以為是4個1D共用的一個mini-ALU,實際上就是每個4D提供的SFU;而先前G8x宣稱的MAD+MUL,實際上應該就是只有MAD而已。
經歷了G8x的SFU疑慮,再回頭看RSX的SFU/mini-ALU,我想應該可以很清楚地說,那個指的不是獨立的1D scalar;當然這樣說的話,講3D+1D/2D+2D的半邊unit也有問題就是了,SFU是有特定定義的部分….不好意思又誤導了。
—-
其實WaffenSS那篇後面也有討論別的東西:
http://forum.gamer.com.tw/C.php?bsn=60001&snA=9541
FP16 nrm_pp以他的說法比較合理,不過他的說法順便也cover到shader結構。
在這裡面提到,NV4x有issue最大7個指令的能力,ALU0+ALU1+NRM,兩個ALU各自有1個vector和1個scalar,NRM則拆成dp3+mul+rsq三個指令。
http://techreport.com/articles.x/6627/4
這篇NV40的訪談也是把mini-ALU描述成和4D ALU獨立,不過沒有指出是scalar,指的是SFU的機會比較大。
> 小弟一直以為sh0和sh1的mini-ALU只是個Scalar Unit…_A_
你說的是這張圖吧:
http://pc.watch.impress.co.jp/…701/kaigai_5a.gif
來源是這篇:
http://pc.watch.impress.co.jp/…701/kaigai195.htm
老實說,除了後藤老爹的專欄之外,似乎沒有其他地方在討論NV4x/G7x的時候把mini-ALU當成和main-ALU獨立的1D ALU….
也就是「只有後藤老爹這篇把VS和PS都算成總計5D的unit」, 所以我覺得這篇本身有問題的機會比較大。
此外,在RSX的發表會上,把mini-ALU寫成”SFU(Special function unit)”。
http://pc.watch.impress.co.jp/…701/kaigai_3a.gif
現在回想起來,在G8x時代,SFU指的是sin/cos等複雜的multi-cycle指令,由4D共用的一個mini-ALU;等到CUDA的規格公開之後,我們開始發現G8x並不是一堆1D ALU構成,而是每兩個支援scatter(移位)的4D unit構成一組8D,所以本來以為是4個1D共用的一個mini-ALU,實際上就是每個4D提供的SFU;而先前G8x宣稱的MAD+MUL,實際上應該就是只有MAD而已。
經歷了G8x的SFU疑慮,再回頭看RSX的SFU/mini-ALU,我想應該可以很清楚地說,那個指的不是獨立的1D scalar;當然這樣說的話,講3D+1D/2D+2D的半邊unit也有問題就是了,SFU是有特定定義的部分….不好意思又誤導了。
—-
其實WaffenSS那篇後面也有討論別的東西:
http://forum.gamer.com.tw/C.php?bsn=60001&snA=9541
FP16 nrm_pp以他的說法比較合理,不過他的說法順便也cover到shader結構。
在這裡面提到,NV4x有issue最大7個指令的能力,ALU0+ALU1+NRM,兩個ALU各自有1個vector和1個scalar,NRM則拆成dp3+mul+rsq三個指令。
http://techreport.com/articles.x/6627/4
這篇NV40的訪談也是把mini-ALU描述成和4D ALU獨立,不過沒有指出是scalar,指的是SFU的機會比較大。
http://www.behardware.com/…geforce-7800-gtx.html
這網頁中的PS結構圖是把SFU和mini-ALU分開…
小弟已經被搞混了…到底SFU和mini-ALU是否為同一個Unit_A_
http://www.pcperspective.com/…150/g70summary.jpg
小弟真正的疑問是,
這官方資料的理論值是用後藤老爹的方式計算的嗎?
http://www.behardware.com/…geforce-7800-gtx.html
這網頁中的PS結構圖是把SFU和mini-ALU分開…
小弟已經被搞混了…到底SFU和mini-ALU是否為同一個Unit_A_
http://www.pcperspective.com/…150/g70summary.jpg
小弟真正的疑問是,
這官方資料的理論值是用後藤老爹的方式計算的嗎?
> 小弟已經被搞混了…到底SFU和mini-ALU是否為同一個Unit_A_
我也搞混啦XD
這篇的SFU是”Main-ALU的部分指令由SFU”提供的style。
> http://www.pcperspective.com/…150/g70summary.jpg
> 小弟真正的疑問是,
> 這官方資料的理論值是用後藤老爹的方式計算的嗎?
如果這張圖確定是來自官方的話,那就是和後藤老爹一模一樣的算法了。
> 小弟已經被搞混了…到底SFU和mini-ALU是否為同一個Unit_A_
我也搞混啦XD
這篇的SFU是”Main-ALU的部分指令由SFU”提供的style。
> http://www.pcperspective.com/…150/g70summary.jpg
> 小弟真正的疑問是,
> 這官方資料的理論值是用後藤老爹的方式計算的嗎?
如果這張圖確定是來自官方的話,那就是和後藤老爹一模一樣的算法了。
>這篇的SFU是”Main-ALU的部分指令由SFU”提供的style。
不太了解這句話的意思_A_
>如果這張圖確定是來自官方的話,那就是和後藤老爹一模一樣的算法了。
那這麼說起來官方也是將mni-ALU(還是SFU XD)當作1D囉?
總覺得愈討論愈混亂_A_
>這篇的SFU是”Main-ALU的部分指令由SFU”提供的style。
不太了解這句話的意思_A_
>如果這張圖確定是來自官方的話,那就是和後藤老爹一模一樣的算法了。
那這麼說起來官方也是將mni-ALU(還是SFU XD)當作1D囉?
總覺得愈討論愈混亂_A_
小弟用google找了些資料,
由於太多且雜亂,
所以沒有連結,
而官方理論值小弟確定是與後藤老爹的計算結果一樣,
但算法就可能有所不同了,
因為小弟找到的資料有人將mini-ALU和SFU當作同一Unit,
然而有些人則將兩者分開…
所以實際算法到底是如何,
只有nVidia才知道了…XD
小弟用google找了些資料,
由於太多且雜亂,
所以沒有連結,
而官方理論值小弟確定是與後藤老爹的計算結果一樣,
但算法就可能有所不同了,
因為小弟找到的資料有人將mini-ALU和SFU當作同一Unit,
然而有些人則將兩者分開…
所以實際算法到底是如何,
只有nVidia才知道了…XD
我是那篇的分析文作者,亂逛不小心就來了.
本身有在寫遊戲的shader. 也是遊戲開發者.
其實normalize指令跟normal map的貼圖存取沒有關係.
FP16的限制是精度差異,跟貼圖無關.
normalize指令是用來把長度跑掉的法向量正規化.
那只是normal mapping所需的一部份計算.
其他大部分的計算都不需要normalize指令.
只是一般人看到”normalize”以為這就是專做normal mapping計算……字面上很像,其實是不一樣的.
所以其實專用的nrm_pp即使在做normal mapping
也不會一直使用到.因為它只能做向量正規化.
以整個shader程式碼來看,實質上使用量是蠻低的.
目前我還沒有看過”normalize”比例上超過1/4的shader
程式碼, 所以不要高估其重要性.
它是有加分的效果,但是沒有到有大幅影響效能的程度.
所以後來的GPU架構已經不再實做NRM unit.
不過FP16的限制有點惱人~
我自己從來沒用過FP16做normalize……
我問過的shader coder也沒人在用.
由於那nrm_pp在gpu硬體發展上,只是曇花一現,
很快消失了,基本上也沒有充分的文件告訴你,
什麼情形下適合FP16,怎樣在FP32的運算中加入FP16?
要運用它需要花時間去研究,但是恐怕很少人會去摸
這種已經要消失的東西.
我是那篇的分析文作者,亂逛不小心就來了.
本身有在寫遊戲的shader. 也是遊戲開發者.
其實normalize指令跟normal map的貼圖存取沒有關係.
FP16的限制是精度差異,跟貼圖無關.
normalize指令是用來把長度跑掉的法向量正規化.
那只是normal mapping所需的一部份計算.
其他大部分的計算都不需要normalize指令.
只是一般人看到”normalize”以為這就是專做normal mapping計算……字面上很像,其實是不一樣的.
所以其實專用的nrm_pp即使在做normal mapping
也不會一直使用到.因為它只能做向量正規化.
以整個shader程式碼來看,實質上使用量是蠻低的.
目前我還沒有看過”normalize”比例上超過1/4的shader
程式碼, 所以不要高估其重要性.
它是有加分的效果,但是沒有到有大幅影響效能的程度.
所以後來的GPU架構已經不再實做NRM unit.
不過FP16的限制有點惱人~
我自己從來沒用過FP16做normalize……
我問過的shader coder也沒人在用.
由於那nrm_pp在gpu硬體發展上,只是曇花一現,
很快消失了,基本上也沒有充分的文件告訴你,
什麼情形下適合FP16,怎樣在FP32的運算中加入FP16?
要運用它需要花時間去研究,但是恐怕很少人會去摸
這種已經要消失的東西.
之前看過nvidia NV40文件裡的參考shader code.
它是用組語的方式呈現,
每一cycle都照硬體規格限制呈現.
NV40架構每cycle發放3~7個指令(包含Tex).
不過有NRM_pp時同時指令數是比較少的.
(也就是說Nrm_pp一個指令應該當作3個指令來看)
沒辦法6個指令+1個nrm_pp那樣.
可以確定Nrm_pp是可以和Tex指令在同一cycle.
所以Tex unit佔用的不是Nrm_pp的硬體.
至於ALU0就比較複雜,Tex指令時ALU0還是能有計算指令.
不過都是一些rcp之類的特別指令或是1D的指令
大概可以判定Tex指令佔用了大部分ALU0的硬體.
此時只能再處理1D或SFU的指令.
之前看過nvidia NV40文件裡的參考shader code.
它是用組語的方式呈現,
每一cycle都照硬體規格限制呈現.
NV40架構每cycle發放3~7個指令(包含Tex).
不過有NRM_pp時同時指令數是比較少的.
(也就是說Nrm_pp一個指令應該當作3個指令來看)
沒辦法6個指令+1個nrm_pp那樣.
可以確定Nrm_pp是可以和Tex指令在同一cycle.
所以Tex unit佔用的不是Nrm_pp的硬體.
至於ALU0就比較複雜,Tex指令時ALU0還是能有計算指令.
不過都是一些rcp之類的特別指令或是1D的指令
大概可以判定Tex指令佔用了大部分ALU0的硬體.
此時只能再處理1D或SFU的指令.
>我是那篇的分析文作者,亂逛不小心就來了.
>本身有在寫遊戲的shader. 也是遊戲開發者.
我想有不少人知道吧…_A_?
>其他的恕刪XD
如果照閣下所說,”normalize”佔shader code只有1/4以下,
但如果不用的話,當需要normalize時,會比NRM Unit來得慢,
而這只佔shader code 1/4以下的code也會變大.
所以話說回來NRM Unit應用的問題,
對小弟來說是不知道它還有何用處,
但既然它已經是封閉系統之一部份,
只要它還有用且環境允許去開發或研究,
它還是有些許的幫助,至少對G7x核心而言.
>至於ALU0就比較複雜,Tex指令時ALU0還是能有計算指令.
>不過都是一些rcp之類的特別指令或是1D的指令
>大概可以判定Tex指令佔用了大部分ALU0的硬體.
>此時只能再處理1D或SFU的指令.
那個1D是mini-ALU嗎?
>我是那篇的分析文作者,亂逛不小心就來了.
>本身有在寫遊戲的shader. 也是遊戲開發者.
我想有不少人知道吧…_A_?
>其他的恕刪XD
如果照閣下所說,”normalize”佔shader code只有1/4以下,
但如果不用的話,當需要normalize時,會比NRM Unit來得慢,
而這只佔shader code 1/4以下的code也會變大.
所以話說回來NRM Unit應用的問題,
對小弟來說是不知道它還有何用處,
但既然它已經是封閉系統之一部份,
只要它還有用且環境允許去開發或研究,
它還是有些許的幫助,至少對G7x核心而言.
>至於ALU0就比較複雜,Tex指令時ALU0還是能有計算指令.
>不過都是一些rcp之類的特別指令或是1D的指令
>大概可以判定Tex指令佔用了大部分ALU0的硬體.
>此時只能再處理1D或SFU的指令.
那個1D是mini-ALU嗎?
>如果照閣下所說,”normalize”
>佔shader code只有1/4以下,
>但如果不用的話,當需要normalize時,會比NRM Unit
>來得慢,而這只佔shader code 1/4以下的code
>也會變大.
1/4? 印象中是更低….有些shader code甚至不做nrm.
如果面數高,頂點密集,PS甚至可以不做nrm.
因為nrm是處理從VS到PS時,因為向量被插補造成的
向量長度改變.
面數很密時,插補造成的長度改變量太小了,可以不管它.
我是常找一些機會省掉PS的normalize.
反正VS一定會做normalize.
只要你確定向量傳到PS時不會有明顯改變,
就不一定要再做一次.
例如地板是平的,它的所有法向量都會是平行的,長度相同.
向量插補後長度不會變….那就不必去normalize.
不過這算是針對特定物件做效能最佳化的範圍了.
標準的程式碼是一定會做nrm.
當然有專屬NRM Unit一定會快一點.
不用nrm_pp,shader code不會變大.
因為不管有沒有用專屬nrm unit.
HLSL指令都是一個normalize();
到GPU也都是分解成dp3+rsq+mul.
只是nv40~G70會把這組fp16指令丟到專屬的nrm_pp
單位. 其他GPU丟到一般泛用shader單位執行.
雖然理論上nrm_pp是免費的,
但是多做這些計算會用到較多的register.
影響到thread的效能.
nv40的register不太夠,G70稍微改善一點.
實際上nrm_pp可能也不完全是免費.
>>大概可以判定Tex指令佔用了大部分ALU0的硬體.
>>此時只能再處理1D或SFU的指令.
>那個1D是mini-ALU嗎?
G70的shader core是4D+1D.
1D就是之前一代架構的Mini-Alu
以前叫”mini alu”是因為功能有限,只能處理少數指令.
不算完整的1D
現在功能完整化,所以很少文件再叫它Mini-Alu了.
>如果照閣下所說,”normalize”
>佔shader code只有1/4以下,
>但如果不用的話,當需要normalize時,會比NRM Unit
>來得慢,而這只佔shader code 1/4以下的code
>也會變大.
1/4? 印象中是更低….有些shader code甚至不做nrm.
如果面數高,頂點密集,PS甚至可以不做nrm.
因為nrm是處理從VS到PS時,因為向量被插補造成的
向量長度改變.
面數很密時,插補造成的長度改變量太小了,可以不管它.
我是常找一些機會省掉PS的normalize.
反正VS一定會做normalize.
只要你確定向量傳到PS時不會有明顯改變,
就不一定要再做一次.
例如地板是平的,它的所有法向量都會是平行的,長度相同.
向量插補後長度不會變….那就不必去normalize.
不過這算是針對特定物件做效能最佳化的範圍了.
標準的程式碼是一定會做nrm.
當然有專屬NRM Unit一定會快一點.
不用nrm_pp,shader code不會變大.
因為不管有沒有用專屬nrm unit.
HLSL指令都是一個normalize();
到GPU也都是分解成dp3+rsq+mul.
只是nv40~G70會把這組fp16指令丟到專屬的nrm_pp
單位. 其他GPU丟到一般泛用shader單位執行.
雖然理論上nrm_pp是免費的,
但是多做這些計算會用到較多的register.
影響到thread的效能.
nv40的register不太夠,G70稍微改善一點.
實際上nrm_pp可能也不完全是免費.
>>大概可以判定Tex指令佔用了大部分ALU0的硬體.
>>此時只能再處理1D或SFU的指令.
>那個1D是mini-ALU嗎?
G70的shader core是4D+1D.
1D就是之前一代架構的Mini-Alu
以前叫”mini alu”是因為功能有限,只能處理少數指令.
不算完整的1D
現在功能完整化,所以很少文件再叫它Mini-Alu了.
> 這麼說起來的話,
> 只要遊戲中對normal mapping之類的應用較多的話,
> RSX會較吃香囉?
nrm_pp是用來對把被插補的向量長度回歸到一單位.
normal map裡的法向量原本就是存成單位1的向量.
不需要插補,自然也不必做normalize
所以有了normal map,反而更少用到normalize指令.
normal mapping時你只需要對光的向量和cam的向量
做nrm,就可以算光照了.
對法向量的nrm可以省掉.
> 這麼說起來的話,
> 只要遊戲中對normal mapping之類的應用較多的話,
> RSX會較吃香囉?
nrm_pp是用來對把被插補的向量長度回歸到一單位.
normal map裡的法向量原本就是存成單位1的向量.
不需要插補,自然也不必做normalize
所以有了normal map,反而更少用到normalize指令.
normal mapping時你只需要對光的向量和cam的向量
做nrm,就可以算光照了.
對法向量的nrm可以省掉.
我是覺得別把360的eDRAM拿去跟PS2的比…
一來年代差太遠,二來效率和功能也不太相同…
PS2當年會被批容量太小,不是沒有原因的….
我是覺得別把360的eDRAM拿去跟PS2的比…
一來年代差太遠,二來效率和功能也不太相同…
PS2當年會被批容量太小,不是沒有原因的….