> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# PIX GPU 時間軸

> PIX GPU 時間軸

Timeline 索引標籤 (如下圖所示) 可讓您查看每個 API 呼叫花費的時間。這是開始分析畫面的好地方。任何極端值都應該很容易看出來。

讓我們看看下列內容：

* [控制項](#IDTIMELINECONTROLS)
* [CPU 更新](#IDTIMELINECPUUPDATES)
* [圖形 EOP](#IDTIMELINEGRFXEOP)
* [內容輪替](#IDTIMELINECTXROLL)
* [執行持續時間](#IDTIMELINEEXECUTNDURATN)
* [佔用率](#IDTIMELINEOCCUPANCY)
* [ESRAM 對應](#IDTIMELINEESRAM)
* [瓶頸](#IDTIMELINEBOTTLENECKS)
* [計數器](#IDTIMELINECOUNTERS)
* [解壓縮](#IDTIMELINEDECOMPRESSION)
* [啟動](#IDTIMELINEKICKOFFS)
* [排清](#IDTIMELINEFLUSHES)
* [閒置的著色器引擎](#IDTIMELINEIDLESE)

<img src="https://mintcdn.com/microsoft-4404708b/cbgdF-D3rUKJ-fFH/images/gdk/tools/pix_gpu_timeline.png?fit=max&auto=format&n=cbgdF-D3rUKJ-fFH&q=85&s=ded378ad53b601dadc7a9af74752901c" alt="PIX GPU Timeline 索引標籤" width="2511" height="1341" data-path="images/gdk/tools/pix_gpu_timeline.png" />

<a id="IDTIMELINECONTROLS" />

## 控制項

* 在 Timeline 索引標籤中，您可以執行下列動作：
  * 左右或上下捲動：按住滑鼠右鍵並拖曳。
  * 選取時間範圍：按住滑鼠左鍵並拖曳。以滑鼠右鍵按一下可查看多個縮放選項。
  * 開啟時間軸計數器：按一下 <img src="https://mintcdn.com/microsoft-4404708b/cbgdF-D3rUKJ-fFH/images/gdk/tools/pix_gpu_timeline_counters.png?fit=max&auto=format&n=cbgdF-D3rUKJ-fFH&q=85&s=1e6ca28aab3ef7b19444ab735f607679" alt="PIX GPU 時間軸計數器圖表圖示" width="22" height="23" data-path="images/gdk/tools/pix_gpu_timeline_counters.png" />，這是視窗右上角篩選列旁的小圖表圖示。如需詳細資訊，請參閱 [PIX 計數器](/zh-TW/tools/tools-console/pix/gpu/pix-counters)。
  * 連結所有\_信號\_及其相關聯的\_等待\_呼叫：在 **Settings** 下，選取 **Display correlation between all events**。
* 在 Timeline Counters 索引標籤中，您可以執行下列動作：
  * 使用 **Counter Set** 下拉式清單選取計數器組。
  * 使用 **Filter** 列篩選計數器清單。
  * 從 **Counters** 清單中選取特定計數器。

<Note>
  在任何時間軸上選取值，都會醒目提示其他時間軸中的對應值以及事件清單中的事件。
</Note>

<a id="IDTIMELINECPUUPDATES" />

## CPU 更新

顯示 CPU 正在修改 GPU 於目前畫面中使用之緩衝區的時間範圍。

這可能表示 CPU 與 GPU 程式碼之間有同步錯誤。理想情況下，CPU 更新應該是空的。

<a id="IDTIMELINEGRFXEOP" />

## 圖形 EOP

圖形事件清單中每個事件的階層式表示。

此時間軸上的每個矩形區塊都會顯示事件自上一個事件結束後完成所花費的時間 (因此稱為管線結束 (EOP))。假設事件清單中只有兩個繪製呼叫，而且它們重疊。我們稱它們為 D1 與 D2。D1 從 0.03 毫秒開始並在 0.07 毫秒結束，而 D2 從 0.05 毫秒開始並在 0.09 毫秒結束。在圖形 EOP 時間軸中，您會看到 D1 的區塊從 0.03 毫秒到 0.07 毫秒，而 D2 的區塊從 0.07 毫秒到 0.09 毫秒。

<a id="IDTIMELINECTXROLL" />

## 內容輪替

顯示發生內容輪替的時間。

內容輪替代表對內容暫存器的更新，代價很高。此時間軸會顯示內容輪替發生的時間。內容暫存器只有八個。八次內容輪替就會回到第一個暫存器。如果第一個暫存器仍在使用中，GPU 就會停滯，因為我們要等待使用該內容暫存器的繪製呼叫完成。

隨著內容輪替的密度增加，時間軸的顏色會變得更深。由於內容輪替的代價很高，您應該盡量減少其次數。

<a id="IDTIMELINEEXECUTNDURATN" />

## 執行持續時間

顯示每個作業實際花費的時間。

延續圖形 EOP 中的範例，在執行持續時間時間軸中，您可以預期看到兩個代表繪製呼叫的矩形，一個是 D1 從 0.03 毫秒到 0.07 毫秒，另一個是 D2 從 0.05 毫秒到 0.09 毫秒。

<a id="IDTIMELINEOCCUPANCY" />

## 佔用率

顯示以色彩標示的圖表，呈現一系列繪製呼叫在任何特定時間有哪些波類型處於作用中狀態。選取繪製呼叫會醒目提示屬於該繪製呼叫的波。

波類型與每個著色器相關聯。佔用率越高越好，因為這表示處理單元以更高的容量使用。佔用率時間軸中的間隙並不理想，因為它們表示 GPU 在該時間處於閒置狀態。

GPU 時間軸中會以堆疊的色彩標示圖表顯示 4 種佔用率 (依使用該資源的著色器階段以色彩標示)

1. *波佔用率*：繪製硬體上隨時間使用的波數目。
2. *執行緒佔用率*：繪製 GPU 上隨時間的總執行緒使用率。對於 XBOX Series X|S 主機，波可以 32 個 (wave32) 或 64 個 (wave64) 工作項目為一組執行。因此，單憑波佔用率圖表無法傳達硬體執行緒的使用程度。
3. *VGPR 佔用率*：繪製 GPU 上隨時間的向量一般用途暫存器 (VGPR) 總使用率。此時間軸可找出造成效能損失的暫存器溢出。
4. *LDS 佔用率*：繪製 GPU 上隨時間的區域資料共用 (LDS) 記憶體使用率。LDS 記憶體通常用於儲存單一階段中多個執行緒共用的資料，以及在著色器階段之間傳輸資料。

執行緒、VGPR 與 LDS 佔用率只適用於 XBOX Series X|S 主機。

<a id="IDTIMELINEESRAM" />

## ESRAM 對應

顯示任何時間 ESRAM 中的內容。

在任何時間，您都可以看到 ESRAM 中的內容、資源類型，以及該資源的位址。

ESRAM 只適用於 XBOX One 與 XBOX One S 硬體。

<a id="IDTIMELINEBOTTLENECKS" />

## 瓶頸

顯示瓶頸實驗所追蹤的每個 GPU 元件所花費的時間。

將滑鼠指標停留在瓶頸上可查看其峰值效能 (例如，每個時脈可處理 32 個\_像素\_)。此時間軸會顯示當時執行中的瓶頸佔此峰值的百分比。

如需深入了解瓶頸實驗，請參閱 [Dr. PIX](/zh-TW/tools/tools-console/pix/gpu/pix-drpix)。

<a id="IDTIMELINECOUNTERS" />

## 計數器

顯示所選效能計數器快照的圖表。

這些圖表代表效能計數器的瞬間讀數。請從 Timeline Counters 索引標籤中選取您感興趣的計數器。

<a id="IDTIMELINEDECOMPRESSION" />

## 解壓縮

顯示解壓縮各種紋理或點陣圖所花費的時間。

GPU 的記憶體有限。因此，紋理與點陣圖會以壓縮形式儲存，並在必須使用時才解壓縮。此時間軸會顯示解壓縮期間花費的時間。

<a id="IDTIMELINEKICKOFFS" />

## 啟動

當命令佇列的封包 (或區段) 提交至 GPU 時，會顯示此事件。這是命令處理器從命令佇列取得封包並將其推送到圖形管線的時候。

PIX 會以 GPU 排清處理大部分的命令佇列封包啟動。這與執行階段不同。如果擷取中有許多區段啟動，計時結果與追蹤結果可能會被誇大。

時間軸上的每個刻度代表一次命令佇列封包的提交。

<a id="IDTIMELINEFLUSHES" />

## 排清

由於 GPU 上的封包是高度平行執行的，因此需要同步。排清代表圖形管線中使用者定義的屏障 (或柵欄)，用於清空作業並允許這類同步事件。

#### 表面同步

當命令處理器收到相關表面與記憶體一致的確認時，就會發生表面同步事件。表面同步的代價很高，可能需要一百到一千個週期。在大多數情況下，表面同步也意味著內容輪替。表面同步事件會：

* 等待先前存取特定表面的圖形內容停止。
* 排清各種快取。
* 寫回快取。
* 要求預先擷取剖析器 (PFP) 等待微引擎 (ME) 完成排清。

時間軸上的每個刻度代表一個表面同步事件。

#### 部分排清

部分排清是一種屏障，會讓特定類型之波的分派封鎖，直到 VS、PS 或 CS 下游的所有工作都完成為止。

時間軸上的每個刻度代表一個頂點著色器、像素著色器或計算著色器部分排清事件。

#### 快取排清

GPU 上有多個快取。當快取的排清或排清/失效完成時，就會發生快取排清事件。

時間軸上的每個刻度代表任何排清/失效事件。

<a id="IDTIMELINEIDLESE" />

## 閒置的著色器引擎

在時間軸上指出著色器引擎何時閒置。

我們希望盡量減少著色器引擎的閒置時間，因此為了獲得更好的效能，我們可以考慮最佳化其使用率。

## 另請參閱

[分析 GPU 效能](/zh-TW/tools/tools-console/pix/gpu/gpu-performance)

[PIX](/zh-TW/tools/tools-console/pix/pix)


## Related topics

- [PIX GPU 擷取與效能分析](/zh-TW/tools/tools-console/pix/gpu/index.md)
- [NDA 主題目錄 - Microsoft Learn 線上連結](/zh-TW/nda/nda-topic-directory.md)
- [XBOX Series 主機上的 PIX GPU 追蹤擷取](/zh-TW/tools/tools-console/pix/gpu-trace/index.md)
- [PIXSetMarker 概觀](/zh-TW/reference/tools/pix3/functions/pixsetmarker_4.md)
- [PIXSetMarker 函式參考](/zh-TW/reference/tools/pix3/functions/pixsetmarker_3.md)
