GPU內部各個模組之間的同步是如何實現的?

時間 2021-05-06 01:43:38

1樓:Right

你這個 case 實際上只需要:D3D12_RESOURCE_TRANSITION_BARRIER (d3d12.h)

2樓:浙濱

驅動內部實現會有一種fence的同步機制。每乙個draw call提交時,驅動會收集當前draw命令啟動所依賴的fence集合,以及draw完成後需要signal的fence集合

例如在你的場景中,draw0提交後,會把RT1跟乙個write fence(假設WF0)關聯在一起,當draw0完成,會去signal WF0。而draw1提交時,會把RT1跟乙個read fence(假設RF1)關聯在一起,並且這裡會有read after write(RAW)競爭風險,所以WF0就被新增到了draw1的依賴fence集合中,也就是draw1會等待WF0被signal之後才會開始執行。執行完之後會去signal RF1。

這種wait和signal操作,往往被實現成去監聽/更新乙個記憶體位址裡的內容。既可以由驅動來實現,也可以由硬體實現(如果支援的話)

3樓:fangcun

可以參考Vulkan對指令執行的並行設計來理解

Vulkan提交給佇列執行的指令如果不存在依賴關係按照提交順序執行,但這個提交順序執行並不是乙個完成後開始下乙個,而是僅僅執行開始的順序,開始執行乙個指令後不等待其完成,開始執行下乙個沒有依賴關係的指令。

fangcun:Vulkan的指令和訪問同步

4樓:

其實邏輯就是和軟體一樣。會有乙個和其它正常資料不同的訊號,告訴下乙個模組說一組東西已經發完了準備切換到另乙個組。

這個「組」根據不同的單元、不同的功能大小也不同。比如在指令轉譯單元上,乙個DrawCall就是一組,而到了Rasterizer這裡,一般來說,乙個Tile(比如64x64)、乙個三角形和乙個DrawCall都會有訊號告訴它結束了。然後電路拿到訊號後,可以去做預取、切換狀態暫存器、清空命令佇列或者等待之類的事情。

並行的話,就類似於Map Reduce,在處理過程中始終把Key帶著傳播,一直傳播到要處理結果的地方。

還有一點是,GPU的模組之間的聯絡(基本上)是乙個DAG而不是乙個點對點的完全圖,所以不會有那種兩兩都需要同步的複雜需求。

5樓:

在draw0的命令佇列當中插入一條繪製完更新記憶體上某個標誌位的命令。在draw1的命令佇列開始的地方插入一條等待該記憶體標誌位變為特定值的命令。

AKB48 內部各個偶像間的關係是怎麼樣的?

圈圈子 現在看看優菜這對像是炒出了感情一樣233雖然我是優菜推但是不可否認以前有炒作嫌疑。現在過節他倆總粘在一起,十週年演唱會小眼神啊,握手會這些,難道還不是愛嗎 伊吹 我微微的關注一點開閉 特別心水島崎遙香露露妹子 然後那時候關注她的表演,也挺喜歡大場美奈的感覺美奈妹子脖子短了點但是越看越好看 當...

《會飲篇》中各個發言之間的結構是怎樣的?

孤獨 理順發言者的身份,就知道那個發言的作用和位置。有的是鋪墊,有的是裝飾,有的是靶子。看似每個人都是蘇格拉底的愛人朋友,甚至是粉絲信徒,但是只要知道他們的身份,再知道蘇格拉底的觀點,就能清晰的讀了。 最近一直忙於睡覺 你只要讀完這個就能理解了 plato.stanford.edu entries ...

先秦時期的諸子百家的各個思想流派之間是有區別還是有相同之處的?是不同大於相同,還是相同大於不同?

褚大通 慶餘年看沒看過?挺好看的,在宿舍沒事可以瞅兩眼首先能確定,你沒怎麼看四書,看過的話不至於這麼糾結,至於老莊的話更沒認真看了 儒家講率性之謂道,老子講道法自然,盡性就是盡人之自然,也就能無不為了,孔子精於此道 老子也講無為,莊子本身側重於無為,後世的道教也如此反而是荀子教出的法家徒弟韓非子無為...