我對GPU如何執行同步有一些疑問。 據我所知,當一個經紗遇到障礙(假設它在OpenCL中),並且它知道同一組的其他經紗尚未到達那裏。所以它必須等待。但在等待期間,這種扭曲究竟做了什麼? 它仍然是一個活躍的扭曲?或者它會做一些空操作?GPU中的同步
正如我注意到的,當我們在內核中進行同步時,指令的數量會增加。我不知道這個增量的來源是什麼。同步分解成許多更小的GPU指令嗎?或者因爲空轉經紗執行一些額外的指示?
最後,我非常想知道,與沒有同步功能(比如barrier(CLK_LOCAL_MEM_FENCE))相比,同步添加的成本是否受工作組(或線程塊)中的變形數量影響? 謝謝
感謝您的詳細解答。如果您可以分享您從中獲得知識的某些文檔,那將會很好。我想引用我的研究成果。你能解釋一下爲什麼內存綁定的內核會暴露內存延遲?正如我現在所理解的,一個同步附近的內存請求(出現在同步之前)應該被一些計算隱藏,直到數據到達時纔會停止。這是對的嗎?另一方面,如果內核不是內存綁定的,那麼同步會暴露什麼?指令流水線延遲? (沒有任何分歧,是的,這與分歧有什麼關係?) – Zk1001