跳轉到主要內容
本主題說明如何分析著色器組譯器指令以判斷效能瓶頸。您必須對 Advanced Micro Devices, Inc. 的 Sea Islands 指令集架構有充分的了解。

著色器核心與指令

著色器指令負載可以透過 GPU 計數器在巨觀層級測量,但微觀層級的情況則需要在個別波一次執行一個指令時進行追蹤。例如,GPU 計數器可能顯示許多波花時間在停滯上,但追蹤可能會揭示這些停滯完全被其他正在執行有用工作的波所隱藏。 如需 VMEM 指令的詳細資訊,請參閱 How do VMEM Instructions Work? (XBOX Developer Downloads->XBOX One->All XBOX One XDK CHMs) 白皮書。 如需著色器核心的背景資訊,請參閱 XBOX One GPU Shader Cores 白皮書。

使用著色器指令追蹤

著色器指令追蹤功能不會顯示在預設的 PIX 配置中。若要檢視此功能,請按一下右上方的 Views。接著,按一下並拖曳 GPU Captures 下的 Shader Instruction Trace (如下圖所示),並視需要放到配置中。 PIX GPU 開啟檢視 下圖顯示含有著色器指令追蹤的新索引標籤。 PIX GPU 著色器指令追蹤 追蹤分為兩部分。在左側,每個橫條代表一個波。波的顏色表示著色器階段 (VS = 綠色、PS = 藍色、CS = 藍綠色、GS = 紅色)。如需完整的色彩清單,請參閱 Timeline 檢視。水平刻度以時脈刻度顯示時間。垂直刻度列出每個計算單元的不同單一指令多重資料單元 (SIMD)。實心橫條代表事件清單中所選的繪製呼叫。外框橫條代表相鄰的繪製呼叫。白色刻痕表示發出指令的時脈。 使用下列控制項檢查波資料。
  • 以滑鼠右鍵按住並拖曳,在檢視中平移。
  • 使用 Ctrl+滾輪放大時間軸。
  • 使用滾輪 (不按 Ctrl) 捲動檢視。
檢查右側的 GPU 指令與統計資料時,請尋找代價最高的指令。超過 100% 的值表示著色器正在迴圈。對於所有類別的指令,停滯成本都很重要。對於某些指令,發出成本也很重要。在上圖中,發出間隙為 108 表示著色器波在這麼多時脈週期內處於閒置狀態。此延遲可能是需要修正的效能問題,也可能是無法避免的,或者可能被其他正在執行的波所隱藏。 在上圖中,image_sample 指令 (紋理擷取) 有停滯,這就是看到記憶體延遲的地方。擷取在取得紋理定址 (TA) 存取權時停滯,因此 s_waitcnt 的成本全部都是記憶體延遲。 Offset 欄提供距著色器基底的位移 (以位元組為單位)。這在將二進位檔與追蹤對應,或判斷停滯是否與快取行邊界一致時很有用。 著色器指令追蹤檢視有一些限制:由於硬體限制,指令層級追蹤只適用於計算單元 CU0/SE0 與 CU0/SE1。這可能表示某些繪製呼叫如果未使用這些 CU,就不會出現在檢視中。

另請參閱

搭配著色器使用 PIX PIX
最後修改於 2026年10月8日