sync (sm5 - asm)

執行緒群組同步處理或記憶體屏障。

sync[_uglobal|_ugroup][_g][_t]

 

備註

同步 處理有選項_uglobal、_ugroup、_g和_t。

在圖元著色器中,只允許 sync_uglobal

在計算著色器中,必須指定 (_uglobal 或 _ugroup*) 和/或 _g。 此外,_t是選擇性的。

_uglobal

全域 u# (UAV) 記憶體柵欄。

此執行緒依程式順序讀取/寫入此執行緒的所有先前 u# 記憶體讀取/寫入,都會讓整個 GPU 上的所有線程看見,再讓此執行緒存取任何後續的 u# 記憶體。 定義的完整 GPU 部分會在一個案例中由小於全域範圍取代,如下所述。

這適用于目前著色器階段系結的所有 UAV 記憶體。

_uglobal可在計算著色器或圖元著色器中使用。

對於著色器尚未宣告為全域一致性的任何系結 UAV,_uglobal u# 記憶體柵欄只會在該 UAV 的目前計算著色器執行緒群組中具有可見度,就像是_ugroup而不是_uglobal一樣。 此問題僅適用于計算著色器,因為圖元著色器必須將所有 UAV 宣告為全域一致性。

_ugroup

執行緒群組範圍 u# (UAV) 記憶體柵欄。

此執行緒依程式順序讀取或寫入所有先前的 u# 記憶體,都會對執行緒群組中的所有線程顯示,再讓此執行緒存取任何後續的 u# 記憶體。

這適用于目前著色器階段系結的所有 UAV 記憶體。

_ugroup僅適用于計算著色器。

如果公開_ugroup,則為某些實作。 指定_ugroup而非_uglobal的優點是 同步 作業可以更快完成。

其他實作不會區分_ugroup與_uglobal,因此這兩個作業都相等,且行為就像_uglobal。 應用程式可以藉由要求所需的最窄 同步 範圍來指定其意圖。

即使特定 UAV 宣告為全域一致性,如果不需要全域屏障,_ugroup 同步 處理作業仍會更有效率地在該 UAV 上運作。

_g

g# (執行緒群組共用記憶體) 柵欄。

在此執行緒存取任何後續的 g# 記憶體之前,此執行緒會依程式順序讀取或寫入此執行緒的所有線程都可以看到執行緒群組中的所有線程。

這適用于所有目前線程群組的 g# 共用記憶體。

_g僅適用于計算著色器。

_t

執行緒群組同步處理。單一線程群組內的所有線程 (可以共用一組共用暫存器空間的執行緒,) 將會執行到到達此指令的點,再繼續任何執行緒。

_t無法放在動態流程式控制制中, (分支線上程群組內可能會有所不同) ,但可以存在於統一流程式控制制中,其中群組中的所有線程都會挑選相同的路徑。

_t僅適用于計算著色器。

以下是計算著色器 'sync' 變體的清單。

  • sync_g
  • sync_ugroup*
  • sync_uglobal
  • sync_g_t
  • sync_ugroup_t*
  • sync_uglobal_t
  • sync_ugroup_g*
  • sync_uglobal_g
  • sync_ugroup_g_t*
  • sync_uglobal_g_t

*具有 _ugroup 的 Variant 可能不是 HLSL 編譯器的目標,請依照上述_ugroup一節中的先前討論。

圖元著色器同步變體清單僅包含sync_uglobal。

記憶體柵欄可防止編譯器或硬體在柵欄上重新排列受影響的指令。

著色器調用無法以記憶體屏障分隔或寫入位址的多個讀取,可以折迭在一起。 這同樣適用於寫入。 無法合併或移動以屏障分隔的存取。

不同執行緒對指定位址的不可部分完成作業不需要記憶體柵欄,才能正常運作。 從其他執行緒的觀點來看,當不可部分完成和/或載入/存放區作業需要彼此同步處理時,需要柵欄。

在圖元著色器中, 捨棄 指令表示sync_uglobal柵欄,在該指示中,無法在 捨棄之間重新排序。 sync_uglobal協助程式圖元 (僅支援衍生) 或捨棄的圖元,可能會有任何影響。 如果捨棄時,如果捨棄,則不允許協助程式或捨棄的圖元寫入至 UAV,如果是捨棄,則會在捨棄之後發出寫入。 不允許從 UAV 傳回的值參與衍生計算。 因此,不論sync_u是否接受協助程式圖元,或在捨棄之後發出時,都接受。

cs_4_0和cs_4_1支援此指示。

本指示適用于下列著色器階段:

頂點 船體 網域 幾何形狀 像素 計算
X X

 

由於 Direct3D 11.1 的所有著色器階段都提供 UAV,因此本指示的sync_uglobal變體適用于 Direct3D 11.1 執行時間的所有著色器階段,從 Windows 8 開始提供。

頂點 船體 網域 幾何形狀 像素 計算
X X X X X X

 

最小著色器模型

下列著色器模型支援此指示:

著色器模型 支援
著色器模型 5
著色器模型 4.1
著色器模型 4
著色器模型 3 (DirectX HLSL)
著色器模型 2 (DirectX HLSL)
著色器模型 1 (DirectX HLSL)

 

著色器模型 5 元件 (DirectX HLSL)