【譯】拆解D3D12和Vulkan中的Barrier(二)
現(xiàn)在讓我們看看MJP-3000的基本原理。命令處理器在命令緩沖區(qū)中遇到DISPATCH命令時,會將32個請求的線程排入線程隊(duì)列中。1個周期后,16個著色器核心的每一個都讀取程序A中的一個線程并開始執(zhí)行它們。同時,線程隊(duì)列中還剩下16個線程。100個周期之后,第一批線程完成并結(jié)果存儲在內(nèi)存中。下一個周期也就是第103個周期時,第二批16個線程也將著色器內(nèi)核上執(zhí)行。此時線程隊(duì)列為空。最后,在總共203個周期之后,所有線程全部完成,它們的結(jié)果存儲在內(nèi)存中。
了解GPU的基本原理后,接下來將介紹同步的概念。在GPU中,需要以某種方式等待所有線程達(dá)到特定點(diǎn)后才能繼續(xù)。當(dāng)執(zhí)行大量新線程時,可以轉(zhuǎn)化為“等待一組中的所有線程完成,然后第二組中的線程開始執(zhí)行”的情況。為了處理這種情況,可以插入一個同步點(diǎn),讓命令處理器等待,直到dispatch A的所有線程運(yùn)行完畢,然后再處理dispatch B。這種操作稱為刷新(FLUSH),它將執(zhí)行以下操作:命令處理器執(zhí)行刷新操作時,它將一直等待,直到所有著色器核心都運(yùn)行完線程從而閑置下拉。
使用刷新進(jìn)行同步,可以確保dispatch B不會與dispatch A重疊,從而確保dispatch B可以正確訪問dispatch A的輸出結(jié)果。這種操作與在D3D12中使用D3D12_RESOURCE_UAV_BARRIER類似,后者也希望所有正在等待被執(zhí)行的寫入命令都被執(zhí)行完。但是性能的代價是增加總處理時間,例如,從304個周期增加到406個周期,增加了25%。這取決于線程數(shù)量以及執(zhí)行時間等因素。
對于線程數(shù)量較多的dispatch,使用刷新或barrier并無太大差異。但對于線程數(shù)量較小的dispatch,使用barrier的性能影響就更大。例如,如果有兩個dispatch都是獨(dú)立的,并且它們之間沒有依賴關(guān)系,那么我們讓它們同時執(zhí)行也沒什么問題。而對線程數(shù)非常大的dispatch,是否使用flush/barrier并無太多差別,但對于線程數(shù)很小的dispatch,差別就大了。例如,如果有8個線程的dispatch,并使用flush,它們執(zhí)行完成需要200個周期,但如果并行執(zhí)行的話只要100個周期!
如果你把這種方法對應(yīng)到CPU上的話,這種重疊可以被認(rèn)為是一種指令級并行(Instruction Level Parallelism),并行操作是在命令流中顯式指定的,這使其與VLIW體系結(jié)構(gòu)的工作原理有些相似。
另一種提高性能的方法是,當(dāng)C只需要執(zhí)行100個周期時,可以利用執(zhí)行A時候的空閑核心去執(zhí)行C。但如果現(xiàn)在C很復(fù)雜,需要執(zhí)行400個周期怎么辦?在這種情況下,雖然A和C之間有部分是同時執(zhí)行,但A執(zhí)行完后仍然還要等待300個周期C才執(zhí)行完,這段時間一半著色器核心都處在空閑狀態(tài)。這是因?yàn)槲覀兪褂昧薋lush命令,要求命令處理器需要等待未被執(zhí)行完成的A或C執(zhí)行完成,才能繼續(xù)執(zhí)行下一個命令。這時,可以通過使用MJP-3000的SIGNAL_POST_SHADER和WAIT_SIGNAL命令來解決這個問題。這些命令可以由命令處理器解析和執(zhí)行,允許命令處理器在前面的dispatch仍然在執(zhí)行的時候就處理下一個命令。同時,通過消除dispatch C上的長時間閑置,可以提高效率。
在實(shí)際的GPU上,這種split barrier的優(yōu)點(diǎn)更多。例如,如果只是簡單的使用barrier,那么成本并不低,甚至比閑置的著色器核心更加浪費(fèi)資源。但是同時執(zhí)行這些Draw / Dispatch的能力完全取決于GPU架構(gòu)的細(xì)節(jié)。即使我們使用了Split barrier,但在特定條件同時執(zhí)行不同的dispatch時的能力也非常有限。如果依賴圖非常復(fù)雜,這種方式可能仍然不太高效。在第三章中將重新討論這個事情,討論使用一些硬件上的更新來克服這些限制。
【譯】拆解D3D12和Vulkan中的Barrier(二)
使用刷新進(jìn)行同步,可以確保dispatch B不會與dispatch A重疊,從而確保dispatch B可以正確訪問dispatch A的輸出結(jié)果。這種操作與在D3D12中使用D3D12_RESOURCE_UAV_BARRIER類似,后者也希望所有正在等待被執(zhí)行的寫入命令都被執(zhí)行完。但是性能的代價是增加總處理時間,例如,從304個周期增加到406個周期,增加了2...
Vulkan 資源綁定和狀態(tài)管理
Vulkan的Pipeline狀態(tài)管理參考的是Mantel,提供了Pipeline State Object(PSO)進(jìn)行狀態(tài)管理:Dynamic state Vulkan的資源綁定涉及到以下幾個概念:了解DirectX12(D3D12)的同學(xué)更容易接受Descriptor Set、Descriptor binding這些概念,因?yàn)閂ulkan的綁定模型(Binding model)一部分參考了DirectX12(D3D12)的設(shè)計(jì)理念...
游戲引擎隨筆 0x23:再論現(xiàn)代圖形 API 的 Bindless(上)
Vulkan 的進(jìn)步則體現(xiàn)在 Vulkan Synchronization Validation 的更新,使其同步功能更加完善,我在開發(fā)中使用它驗(yàn)證了 Bindless 的問題。D3D12 在Bindless實(shí)現(xiàn)上相對穩(wěn)定,但依然存在資源類型和訪問方式的復(fù)雜性問題。然而,每個 API 都有自己的挑戰(zhàn):Metal 的Argument Encoder要求根據(jù)資源類型和訪問方式創(chuàng)建不同的...
游戲引擎隨筆 0x13:現(xiàn)代圖形 API 的 Bindless
假 Bindless 是一種誤解,指的是 Shader 可以使用數(shù)組類型資源,但與真正 Bindless 技術(shù)原理及使用方式完全不同。有限 Bindless 在 D3D12 和 Vulkan 中通過 Descriptor 數(shù)組實(shí)現(xiàn),可以在 Shader 中索引多個單獨(dú)的資源。Vulkan 1.1 中增加了動態(tài)索引功能,允許在運(yùn)行時動態(tài)索引資源數(shù)組。而真 Bindless 則...
游戲引擎隨筆 0x07:現(xiàn)代圖形 API 的同步
探索現(xiàn)代圖形API的同步奧秘——圖形引擎隨筆0x07 在視覺效果日益精進(jìn)的游戲中,圖形API的同步機(jī)制如同指揮家的指揮棒,精準(zhǔn)地調(diào)和CPU與GPU之間的交響樂。現(xiàn)代API如Vulkan、D3D12和Metal,通過一系列同步原語如Fence、Semaphore、Pipeline Barriers和Event,為我們提供了精細(xì)的控制,以最大化并行性能,同時避免...
剖析虛幻渲染體系(10)- RHI(01)
RHI(Render Hierachy Interface)是虛幻引擎中用于封裝和抽象圖形API差異的關(guān)鍵組件,它提供了一個跨平臺的渲染接口,使得游戲渲染邏輯可以更好地在不同圖形API(如D3D11、D3D12、OpenGL、Vulkan、Metal)之間進(jìn)行管理。Game-Renderer-RHI結(jié)構(gòu)中,RHI線程負(fù)責(zé)將游戲線程的指令轉(zhuǎn)譯和執(zhí)行。基礎(chǔ)概念中,F(xiàn)Render...
游戲引擎隨筆 0x27:現(xiàn)代圖形 API 的最新進(jìn)展(2022年2月)
現(xiàn)代圖形 API 如 Vulkan、D3D12、Metal 在過去的七年中經(jīng)歷了顯著的演變,這些 API 旨在滿足不斷發(fā)展的行業(yè)需求和主機(jī)世代的更新。本文將聚焦于從去年到今年 2 月份這些現(xiàn)代圖形 API 的最新進(jìn)展,旨在揭示行業(yè)發(fā)展的趨勢。Vulkan 在 2022 年 1 月 25 日發(fā)布了 1.3 版本,這是繼兩年后的最大更新...
相關(guān)評說:
唐山市背錐: ______ 中國廣電網(wǎng)絡(luò)客服電話是96655
唐山市背錐: ______ 閃退的大部分原因是路徑問題你再檢查游戲安裝路徑是否有中文字符,如果不是我也愛莫能助了,可能電腦有一些軟件沒安裝吧... (注意:游戲安裝路徑不得出現(xiàn)中文 是指從最高一級目錄到最低一級的目錄 均不得出現(xiàn)中文 例如“E:\\單機(jī)游戲\\NBA2K9\\nba 2k9” \"E:\\NBA2K9\\單機(jī)游戲\\nba 2k9 \" 都是不可行的! 將“單機(jī)游戲” 改為任意英文數(shù)字組合即可 如果有中文字符,那么建議您重新安裝該游戲 另系統(tǒng)用戶名也不能是中文的)
唐山市背錐: ______ FX3u-PLC有三角函數(shù)和反三角函數(shù).此圖中arccos說明是反余弦函數(shù),為簡化運(yùn)算,把a(bǔ)rc后面的計(jì)算式換成下圖所示: 分配寄存器 D1D0:存放L1值(浮點(diǎn)數(shù)) D3D2:存放L2值(浮點(diǎn)數(shù)) D5D4:存放L3值(浮點(diǎn)數(shù)) D7D6~D15D14:存...
唐山市背錐: ______ 1,紫鉆放T(但房主要是紫鉆就不好用了)2.滿員的區(qū)你也可以進(jìn)出自如3.自商城購買東西有優(yōu)惠4.每次游戲結(jié)束后系統(tǒng)給加分(本人認(rèn)為沒給加,我以前沖過紫鉆,不好使..)5.你是房主時...
唐山市背錐: ______ 鍋貼豆腐是一道河南開封的漢族傳統(tǒng)名菜,屬于豫菜.作為開封民樂亭飯莊的鎮(zhèn)店名菜,早在30年代已飲譽(yù)開封.幾十年來,經(jīng)過廚師們不斷改進(jìn),已由常規(guī)鍋貼演變?yōu)檎旱扒搴蟀爰灏胝?成品色澤微黃而酥焦...
唐山市背錐: ______ 應(yīng)該是中毒了,用管理軟件掃一下
唐山市背錐: ______ 首先下個RIVATUNER超頻軟件,安裝后,在D3D選項(xiàng)里把MIP值調(diào)到1.5,然后在DEPTH BUFFERING中把里面的24BIT的所有勾選項(xiàng)去掉.之后到游戲里設(shè)定把畫質(zhì)調(diào)到LOW,分辨率640*480,亮度8,最后保存.另外玩游戲之前,首先把網(wǎng)絡(luò)斷掉,最好把任務(wù)欄里應(yīng)用程序關(guān)掉,像QQ,殺毒軟件等,要知道這些東西暴吃資源的.這些工作做好了,保證你玩起來爽快!!我用的也是MX440,此方法很有效的~~祝你游戲愉快!!!
唐山市背錐: ______ 首先,要看你的WINDOWS版本..我只知道這個東東只能在XP或2003以下環(huán)境中使用,如果是V系統(tǒng)可以試試 以管理員方式 啟動該程序. 其次,D3D版本.如果是OPENGL游戲可能要主意了,有些OPENGL以D3D模式啟動本身就會初問題 不過8成不是D3D程序的問題,至少你能玩游戲 再其次,游戲本身不允許帶有命令的啟動方式,通俗的說,就是不讓你給窗口化了. 當(dāng)然如果游戲本身就有窗口化,也沒有必要大費(fèi)周章去用D3DW,不過那也不可能吧.
唐山市背錐: ______ 我也遇到過這樣的情況: 1:可能天氣太熱.最好玩會休息半小時.不過家里一直看空調(diào)應(yīng)該沒事. 2:cpu太小.建議換個雙核的.3600+以上的. 3:硬件老化.綜合兼容性不太好了.如果不經(jīng)常出錯.幾天還不見1次.那正常.如果經(jīng)常出錯.建議把機(jī)器清灰.硬件提高下.系統(tǒng)重新做.wow重新安裝.一般這樣沒問題了(我就是買了新機(jī)器.沒這問題了) 4:不排除中病毒,木馬的可能.下個卡巴殺下最好.
唐山市背錐: ______ 中斷優(yōu)先級控制寄存器的格式如下表:IPD7D6D5D4D3D2D1D0///PSPT1PX1PT0PX0位地址///BCHBBHBAHB9HB8H有的單片機(jī)IP的D5是PT2,即為定時/計(jì)數(shù)器T2的中斷優(yōu)先級控制位.IP有效控制位的含義:PX0:外部中斷0的中斷優(yōu)先級控制位,PX01,外部中斷0被定義為高優(yōu)先級中斷;PX00,外部中斷0定義為低優(yōu)先級中斷