ETH官方钱包

創(chuàng)作內(nèi)容

5 GP

Rendering: 再回頭看StructuredBuffer對齊16 bytes這件事

作者:巧克力喬斯達(dá)│2022-02-12 01:26:03│巴幣:1,008│人氣:125
struct Foo
{
    float4 Position;
    float Radius;
};
StructuredBuffer <Foo> FooBuf;

如要在shader中使用struct,那建立一個StructuredBuffer就是必須的
而很久以前開始學(xué)的時候,我有看到NVIDIA提到對齊對於效能的提升
這篇將上述結(jié)構(gòu)修改,變成:

struct Foo
{
    float4 Position;
    float Radius;
    float pad0;
    float pad1;
    float pad2;
};
StructuredBuffer <Foo> FooBuf;

內(nèi)文提到僅僅只是讓它變成16bytes的倍數(shù),就能讓效能變好
不過這已經(jīng)是2015年的文章了,已經(jīng)到了可以反問自己的時候:
「現(xiàn)在設(shè)計StructuredBuffer還有必要對齊16 bytes嗎?」

最近的Rendering Work剛好有討論到這個,老外跟我說家機上效能並不會受惠於struct padding
想想也是,畢竟對齊16 bytes也是N家提的,並不一定適用AMD的GCN架構(gòu)
然後老外分享了一個GPU效能測試程式給我 (GitHub)
裡面基本上做了海量的資料結(jié)構(gòu)讀取測試,全部跑在Compute Shader上
簡單來說,buffer大小越大,會讀得更久

那麼16 bytes規(guī)則的表現(xiàn)會如何? NV那篇認(rèn)為32效能>20 bytes
在好奇心驅(qū)使之下,我下載了並修改了這個程式
分別建立了20/32 bytes的buffer,來測試這個規(guī)則是否還能夠增加效能,結(jié)果:

登愣! 公司電腦的顯卡是RTX2070,連N卡自己都推翻了以前自己說的規(guī)則
我沒有AMD卡可以測試,但根據(jù)老外的家機開發(fā)經(jīng)驗
資料結(jié)構(gòu)是越小效能越好,不用刻意去對齊16 bytes


結(jié)論:
又學(xué)到新東西了~
我想那個16bytes規(guī)則只適用於舊硬體 (2015那個時候的硬體)
隨著硬體架構(gòu)的進步,16 bytes對齊也已經(jīng)不是那麼必要了
做軟體有時候也要考慮硬體的改變來進行最佳化

引用網(wǎng)址:http://www.jamesdambrosio.com/TrackBack.php?sn=5386094
All rights reserved. 版權(quán)所有,保留一切權(quán)利

相關(guān)創(chuàng)作

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

5喜歡★ltes50414 可決定是否刪除您的留言,請勿發(fā)表違反站規(guī)文字。

前一篇:UE4的雷區(qū): 小心FT... 後一篇:終於開始橫跨PC、PS5...


face基於日前微軟官方表示 Internet Explorer 不再支援新的網(wǎng)路標(biāo)準(zhǔn),可能無法使用新的應(yīng)用程式來呈現(xiàn)網(wǎng)站內(nèi)容,在瀏覽器支援度及網(wǎng)站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現(xiàn)和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業(yè)系統(tǒng)版本才可使用)

face我們了解您不想看到廣告的心情? 若您願意支持巴哈姆特永續(xù)經(jīng)營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學(xué)】