跳轉到主要內容
PIX 包含 CPU 取樣分析工具,可在進行時間擷取時選擇性執行。收集 CPU 樣本可讓您分析遊戲中的函式如何影響效能。 如需影片逐步解說,請參閱分析 PIX 時間擷取中的 CPU 樣本。 CPU 樣本通常是依據取樣間隔收集,但也可以依據效能監視計數器 (PMC) 值收集。例如,依據 PMC 溢出值收集 CPU 樣本,可讓您找出遊戲中造成最多資料快取遺漏的函式。 PIX 的取樣分析工具也包含 C++ 原始程式碼檢視。原始程式碼檢視會使用色彩將收集到的 CPU 樣本對應到原始程式碼行,藉此識別函式中的熱點。 收集樣本之後,可以在 Timeline 或 Range Details 檢視中分析樣本。在 Timeline 檢視中檢視樣本,有助於判斷在遊戲中 PIX 事件檢測稀少或完全沒有檢測的部分,執行緒或核心上正在執行哪些程式碼。在此情境中,使用 CPU 樣本診斷效能問題,會比在遊戲中新增額外檢測、重新建置並重新部署更有效率。在 Range Details 檢視中檢視樣本,可讓您分析在相對較長的擷取中所取得之 CPU 樣本的彙總檢視。以這種方式分析樣本,可用來找出最常執行以及執行時間最長的函式。

收集 CPU 樣本

收集樣本之前,必須先設定 PIX 以找到遊戲的 PDB。PDB 中的符號資訊會用來顯示 PIX 所收集之 CPU 樣本的函式名稱。如需詳細資訊,請參閱設定 PIX 存取 CPU PDB。 若要依據取樣間隔收集 CPU 樣本,請在時間擷取選項窗格的 CPU 區段中選取 CPU Samples 核取方塊。也必須使用 Sampling Rate 下拉式清單指定取樣間隔。取樣間隔的三個內建選項,可讓您在更多 CPU 樣本帶來的更高解析度,與更高取樣率所產生的額外負荷之間取得平衡。 若要依據 PMC 資料收集 CPU 樣本,請選取 PMC Rollover Samples 核取方塊。 在時間擷取中收集 CPU 樣本 開啟時間擷取時,PIX 會在 Timeline、Element Details 與 Range Details 檢視中顯示所收集樣本的相關資訊。

在 Timeline 檢視中分析 CPU 樣本

依據取樣間隔收集的個別 CPU 樣本,會在 Timeline 中的執行緒與核心通道上,以垂直黑線的形式顯示在執行緒或核心指示列的正上方。選取樣本會在 Element Details 檢視中填入該樣本的呼叫堆疊。 下圖顯示名為 RunSimulation 的 PIX 事件,該事件需要數毫秒才能完成,且沒有子 PIX 事件。選取個別樣本可提供更多詳細資料,了解在遊戲未以更細緻之 PIX 事件檢測的這段時間內,正在執行哪些程式碼。例如,查看下圖中所選樣本的呼叫堆疊,可以看出名為 UpdateEnemyPositions 的函式正在執行,且正在使用 memcpy 函式複製記憶體。 Timeline 與 Element Details 檢視中的 CPU 樣本 PIX 也會為每個執行緒建立 CPU 樣本的火焰圖。火焰圖會顯示在執行緒通道中 PIX 事件正下方的子通道中。火焰圖中每個函式的開始與結束時間以及持續時間都是近似值,因為此圖是使用樣本建立,而不是檢測每個函式的開頭與結尾。請注意,開始擷取前選擇的取樣率越高,火焰圖就越準確。 下圖顯示同一個 UpdateEnemyPositions 函式在 RunSimulation 底下執行,但火焰圖視覺效果提供了所執行函式的完整樹狀結構,因此能提供更多內容。 Timeline 中的 CPU 樣本火焰圖 時間軸設定 Threads with Callstacks 會自動為每個執行緒顯示 PIX events 與 Sampled Functions 子通道。

自訂 CPU 樣本的顯示

可以使用執行緒或核心通道旁的齒輪圖示,或使用 Lane Configuration 面板,自訂 CPU 樣本的顯示方式。可以自訂代表樣本的垂直黑線高度,以及是否要在通道中顯示樣本,如下圖所示。 自訂遊戲中 CPU 樣本的顯示 對於執行緒通道,也可以切換 Sampled Functions 子通道的顯示。

使用 Range Details 檢視分析彙總的 CPU 樣本

在 Timeline 中選取時間範圍時,可以使用 Range Details 檢視查看所選時間範圍內發生之所有樣本的彙總。樣本會跨所有執行緒與核心彙總,並可以堆疊樹狀結構或平面函式清單的形式檢視。有數個選項可用來變更所顯示的樣本集合,以及自訂這些樣本在堆疊樹狀結構中的組織方式。如需詳細資訊,請參閱下列主題。 從 Range Details 的 Items to show 下拉式清單中選取 Sampled Functions,即可檢視彙總的樣本。 以堆疊樹狀結構檢視彙總的樣本,可讓您查看所選時間範圍內最常出現的呼叫堆疊。對於堆疊樹狀結構中的每個函式,會以欄的形式顯示樣本落在該函式中的次數 (包含與不包含子系),以及包含與不包含子系的百分比。 下圖顯示所選時間範圍的彙總堆疊樹狀結構。堆疊樹狀結構中的 Inc % 欄顯示,有 33.33% 的樣本發生在 UpdateEnemyPositions 函式或其子系中。 在 Range Details 檢視中以堆疊樹狀結構顯示的彙總 CPU 樣本 若要以平面清單檢視彙總的樣本,請開啟 Display Options 面板,並將滑桿從 Stack Tree 切換為 Function List。Display Options 面板也可用來自訂事件清單中顯示哪些欄。 在 Range Details 檢視中以平面函式清單顯示的彙總 CPU 樣本

依執行緒或核心將堆疊樹狀結構分組

根據預設,所有執行緒與核心的 CPU 樣本會在堆疊樹狀結構中分組在一起。不過,在某些情境中,您可能想將分析重點放在只從部分執行緒與核心收集的樣本上。Display Options 面板中的 Group by 下拉式清單提供依執行緒、核心,或先依核心再依執行緒將樹狀結構分組的選項。 選取分組選項後,堆疊樹狀結構會重新組織,依所選的分組選項,每個執行緒或核心各有一個根節點。下圖顯示依執行緒分組的堆疊樹狀結構。樹狀結構中的每個根節點都包含為單一執行緒收集的樣本。 依執行緒分組的堆疊樹狀結構

依據 PMC 溢出值分析樣本

根據預設,Range Details 檢視中的堆疊樹狀結構與函式清單,是從依據取樣間隔收集的 CPU 樣本建立。依據間隔檢視樣本,可讓您知道哪些函式與呼叫路徑的執行時間最長或最常被呼叫。 堆疊樹狀結構與函式清單也可以從 PMC 值「溢出」(即達到特定發生次數) 時收集的樣本建立。依據 PMC 計數檢視樣本,可讓您知道在溢出事件發生時,正在執行哪些函式與呼叫路徑。例如,此分析可用來判斷哪些函式造成最多分支預測錯誤。 PIX 會從四個內建 PMC 收集樣本:
  • 資料快取遺漏 (DcacheMisses)
  • 分支預測錯誤 (BranchMispredictions)
  • 資料快取存取 (DcacheAccesses)
  • 總發出指令數 (TotalIssues)
從 Profile Source 下拉式清單中選取其中一個 PMC,即可依據 PMC 溢出值檢視樣本。 將取樣函式檢視切換為依據 PMC 溢出 依據 PMC 溢出的 CPU 樣本,每當事件發生 64k 次時收集一次。例如,每發生 64k 次分支預測錯誤,就會收集一個 CPU 樣本。

使用 PIX 事件限制所顯示的樣本集合

堆疊樹狀結構或平面函式清單中顯示的樣本集合,可以限制為在一或多個 PIX 事件執行個體執行期間所收集的樣本。以這種方式限制樣本,可讓您分析在 PIXBeginEvent 與 PIXEndEvent 呼叫之間執行的函式。 使用 Display Options 索引標籤中的 PIX Events 篩選控制項,選取一或多個 PIX 事件。視遊戲發出的事件數量而定,篩選控制項一開始可能會指出事件太多而無法顯示。 PIX 事件篩選器中的事件太多 在下拉式清單中輸入字串,即可篩選 PIX 事件集合。下圖顯示篩選為包含字串 Update 之 PIX 事件的清單。 依包含字串 Update 的 PIX 事件篩選 選取一或多個 PIX 事件,會使用在指定事件之所有執行個體執行時所收集的樣本,重新計算堆疊樹狀結構或函式清單。按一下 Apply 按鈕即可重建堆疊樹狀結構或函式清單。 下圖顯示在 PIX 事件 Physics::Process 執行個體執行時所收集之 CPU 樣本的堆疊樹狀結構。分組選項可用來依核心或執行緒組織樹狀結構。 篩選為 PIX 事件期間發生之樣本的堆疊樹狀結構

聚焦於函式

將函式選取為「焦點函式」,會依據對該函式的所有呼叫重建堆疊樹狀結構。焦點函式會成為樹狀結構中的頂端節點,其完整呼叫樹狀結構則顯示為子系。以這種方式檢視樣本,可讓您分析函式的呼叫樹狀結構,找出最常被呼叫、執行時間最長等的呼叫路徑。 若要選取要聚焦的函式,請以滑鼠右鍵按一下 Range Details 檢視中的函式,然後從操作功能表中選擇 Set Focus Function,如下圖所示。 焦點函式操作功能表選項 堆疊樹狀結構會以所選函式為焦點重建。依執行緒與核心分組,以及依據一或多個 PIX 事件限制樣本集合的選項,可用來進一步自訂資料的顯示方式。下圖顯示以 UpdateEnemyPositions 函式為焦點函式的堆疊樹狀結構。 聚焦於函式的堆疊樹狀結構

取樣分析工具 C++ 原始程式碼檢視

取樣分析工具原始程式碼檢視可用來識別指定函式的熱點,也就是大多數樣本落在其上的程式碼行。 若要檢視函式的附註原始程式碼,請在 Range Details 檢視中選取該函式,並將 Element Details 檢視從 Details 切換為 Source Analysis,如下圖所示。 C++ 原始程式碼分析檢視 指定原始程式碼行上反白顯示的深淺,與執行該行時所發生之樣本的百分比相關。行的顏色越深,表示該行執行得越頻繁。根據預設,原始程式碼檢視會以百分比顯示樣本頻率。如有需要,可以使用檢視上的 Display Options 面板,將顯示切換為樣本計數。 在 C++ 原始程式碼分析檢視中檢視樣本計數 取樣分析工具會使用遊戲 PDB 中儲存的原始程式檔路徑,來找出相符的原始程式檔。如果找不到該檔案,原始程式碼分析檢視會包含下列文字: Could not find “filename”.cpp with a matching checksum 使用 Display Options 面板或主要 Settings 頁面中的 Source Paths 控制項,指定一或多個目錄,供 PIX 在預設位置找不到原始程式檔時搜尋。 新增自訂原始程式碼搜尋路徑

另請參閱

時間擷取 PIX
最後修改於 2026年10月8日