自頂向下的微體系結構分析方法

自頂向下的微體系結構分析方法

使用此配方可瞭解應用程序如何利用可用的硬件資源以及如何利用CPU微體系結構。獲得此知識的一種方法是使用片上性能監視單元(PMU)。

內容專家傑克遜·馬魯薩斯DJ)

PMU是CPU內核中的專用邏輯,用於對特定硬件事件(在系統中發生)進行計數。這些事件的示例可能是“高速緩存未命中”或“分支錯誤預測”。可以觀察並組合這些事件以創建有用的高級指標,例如每條指令的週期(CPI)。

特定的微體系結構可以通過其PMU提供數百個事件。但是,確定哪些事件對於檢測和修復特定的性能問題通常不是很明顯。通常,它需要對微體系結構設計和PMU規範都有深入的瞭解,才能從原始事件數據中獲取有用的信息。但是,您可以受益於使用預定義的事件和指標以及自上而下的表徵方法,將數據轉換爲可操作的信息。

探索PMU分析配方,以瞭解該方法及其在英特爾®VTune™放大器中的使用方式:

自頂向下的微體系結構分析方法概述

現代CPU使用流水線以及諸如硬件線程,亂序執行和指令級並行性之類的技術來儘可能有效地利用資源。儘管如此,某些類型的軟件模式和算法仍會導致效率低下。例如,鏈接的數據結構通常在軟件中使用,但是會導致間接尋址,這可能會使硬件預取器失敗。在許多情況下,此行爲會在檢索數據且沒有其他指令要執行時在管道中造成閒置氣泡。鏈接的數據結構可能是解決軟件問題的適當方法,但可能會導致效率低下。在軟件級別上還有許多其他示例對基礎CPU管道有影響。基於自上而下表徵方法的自上而下的微體系結構分析方法旨在深入瞭解您是否已通過算法和數據結構做出明智的選擇。見英特爾®64和IA-32體系結構優化參考手冊,附錄B.1中有關自頂向下的微體系結構分析方法的更多詳細信息。

自上而下的特徵是基於事件的指標的層次結構,用於確定應用程序中主要的性能瓶頸。其目的是平均顯示運行應用程序時CPU管道的使用情況。以前的用於解釋事件的框架都依賴於CPU時鐘信號-確定CPU時鐘信號的哪一部分花在了哪種類型的操作上(例如,由於L2緩存未命中而檢索數據)。相反,此框架基於對管道資源的考慮。要了解自頂向下的特性,請在下面深入探討一些微體系結構概念。微體系結構的許多細節都在此框架中抽象化,使您無需硬件專家即可使用和理解它。

現代高性能CPU的管線非常複雜。在簡化視圖中,管道在概念上分爲前端和後端兩部分。前端負責獲取體系結構指令中表示的程序代碼,並將其解碼爲一個或多個稱爲微操作(uOps)的低級硬件操作。然後,將uOps通過分配過程饋送到後端。一旦分配,後端將負責監視uOp的數據操作數何時可用,並在可用執行單元中執行uOp。uOp執行的完成稱爲退役,並且uOp的結果將提交到架構狀態(CPU寄存器或寫回內存)。通常,大多數uOps會完全通過管道並退休,但是有時以推測方式獲取的uOps可能會在退休之前被取消-就像分支預測錯誤的情況一樣。

現代亂序的Intel CPU管道

最近的英特爾微體系結構上的流水線前端可以每個週期分配四個uOps,而後端可以每個週期淘汰四個uOps。從這些功能可以得出流水線槽的抽象概念。流水線插槽代表處理一個uOp所需的硬件資源。自上而下的特性假定每個CPU內核在每個時鐘週期上都有四個可用的流水線插槽。然後,它使用經過特殊設計的PMU事件來衡量這些管道插槽的利用率。流水線插槽的狀態在分配點(在上圖中用星號標記)處獲取,其中uOps離開前端進入後端。應用程序運行時可用的每個管道插槽將根據上述簡化的管道視圖分爲四個類別之一。

在任何循環中,管道插槽可以爲空,也可以填充uOp。如果在一個時鐘週期內某個插槽爲空,則歸因於停頓。對該管道插槽進行分類所需的下一步是確定管道的前端部分還是後端部分導致了停頓。這是使用指定的PMU事件和公式完成的。自上而下表徵的目的是確定主要瓶頸,因此,將停頓歸因於前端或後端是一個需要考慮的關鍵點。通常,如果停頓是由於前端無法用uOp填充插槽而引起的,則它將被歸類爲此週期的“前端綁定”插槽,這意味着性能受到前端下某些瓶頸的限制綁定類別。如果前端已經準備好uOp但由於後端尚未準備好處理而無法交付,則空管道插槽將歸類爲“後端綁定”。後端停頓通常是由後端耗盡某些資源(例如,加載緩衝區)引起的。但是,如果前端和後端都停止,則該插槽將被歸類爲“後端綁定”。這是因爲,在這種情況下,修復前端中的停頓很可能不會提高應用程序的性能。後端是阻塞瓶頸,在解決前端問題之前,首先需要將其刪除。例如,加載緩衝區。但是,如果前端和後端都停止,則該插槽將被歸類爲“後端綁定”。這是因爲,在這種情況下,修復前端中的停頓很可能不會提高應用程序的性能。後端是阻塞瓶頸,在解決前端問題之前,首先需要將其刪除。例如,加載緩衝區。但是,如果前端和後端都停止,則該插槽將被歸類爲“後端綁定”。這是因爲,在這種情況下,修復前端中的停頓很可能不會提高應用程序的性能。後端是阻塞瓶頸,在解決前端問題之前,首先需要將其刪除。

如果處理器沒有停止運行,則流水線插槽將在分配點處填充一個uOp。在這種情況下,如何對插槽進行分類的決定因素是uOp是否最終退出。如果確實退休,則該插槽被分類爲“退休”。如果不是,則可能是由於前端的分支預測不正確,也可能是由於自修改代碼導致的清除事件(如管道刷新),該插槽將被歸類爲不良推測。這四個類別構成了“自頂向下特徵”的頂層。爲了表徵應用程序,將每個流水線插槽準確分類爲以下四個類別之一:

這四個類別中的管道插槽分配非常有用。儘管基於事件的度量標準已經可以使用很多年了,但是在進行表徵之前,還沒有方法確定哪些可能的性能問題影響最大。將性能指標放入此框架後,您可以看到需要首先解決的問題。從第2代Intel Core處理器家族和IntelXeon®處理器E5家族中使用的英特爾®微體系結構代號Sandy Bridge開始,就可以將管道插槽分爲四類。隨後的微體系結構可能允許將這些高級類別進一步分解爲更詳細的性能指標。

VTune放大器的自頂向下分析方法

英特爾®VTune™放大器提供了“ 微體系結構探索”分析類型,該分析類型已預先配置爲收集自上而下表徵中定義的事件,從英特爾微體系結構代碼名稱Ivy Bridge開始。微體系結構探索還收集計算許多其他有用性能指標所需的事件。默認情況下,在“ 微體系結構探索”視圖中顯示“微體系結構探索”分析的結果。

微體系結構探索結果顯示在層次結構列中,以增強表徵的自上而下的本質。“ 摘要”窗口給出了整個應用程序在每個類別中管線插槽的百分比。您可以通過多種方式探索結果。探索結果的最常見方法是在功能級別查看指標:

對於每個功能,顯示了每個類別中流水線槽的比例。例如,price_out_impl上面選擇的功能在“前端綁定”類別中佔2.2%的管道插槽,在“不良推測”中佔7.4%,在“內存綁定”中佔64.2%,在“核心綁定”中佔8.4%,在“退休”類別中佔17.8%。可以擴展每個類別以查看該類別下的指標。自動突出顯示用於將您的注意力吸引到潛在的問題區域,在這種情況下,用於price_out_impl。

微體系結構調整方法

在進行任何性能調整時,重點放在應用程序的熱點上很重要。熱點地區是佔用最多CPU時間的功能。專注於這些地方將確保優化影響整體應用程序性能。VTune放大器具有兩種特定收集模式的熱點分析:用戶模式採樣和基於硬件事件的採樣。在“微體系結構探索”觀點內,可以通過確定具有最高Clockticks事件計數的功能或模塊來確定熱點,該事件或計數測量CPU Clockticks的數量。爲了從微體系結構調整中獲得最大收益,請確保已應用算法優化(例如添加並行性)。通常,首先執行系統調整,然後是應用程序級算法調整,然後是體系結構和微體系結構調整。此過程也稱爲“自頂向下”,就像自上而下的軟件調整方法一樣。它以及性能調整的其他重要方面(如工作負載選擇)在本文檔中進行了描述。消除神祕的軟件性能優化文章。

 

  1. 選擇一個熱點功能(其中一個佔應用程序總時鐘的百分比很大)。

  2. 使用自上而下的方法和下面給出的準則評估該熱點的效率。

  3. 如果效率不高,則向下鑽取代表主要瓶頸的類別,然後使用子級別的下一級別來確定原因。

  4. 優化問題。VTune Amplifier 調整指南包含針對每個類別中許多潛在性能問題的特定調整建議。

  5. 重複直到評估了所有重要的熱點。

 

如果度量標準值超出預定義的閾值並出現在熱點中,則VTune Amplifier會自動在GUI中突出顯示度量標準值。如果VTune放大器對某個應用程序中的某個應用程序的總時鐘頻率大於總時鐘頻率的5%,則VTune Amplifier會將其歸類爲熱點。確定特定類別的管道插槽的給定部分是否構成瓶頸可能取決於工作量,但下表提供了一些常規準則:

 

 

調整好的熱點中此類別中管道槽的預期範圍:

類別

客戶/桌面應用

服務器/數據庫/分佈式應用程序

高性能計算(HPC)應用程序

退役

20-50%

10-30%

30-70%

後端綁定

20-40%

20-60%

20-40%

前端綁定

5-10%

10-25%

5-10%

不良投機

5-10%

5-10%

1-5%

 

這些閾值基於對英特爾實驗室中某些工作負載的分析。如果熱點的類別(而不是退休)中花費的時間比例處於高端或大於指示的範圍,則進行調查可能會有用。如果對於多個類別都適用,則應首先調查時間比例最大的類別。請注意,預計熱點在每種類別中花費的時間都將佔一定比例,並且以下正常範圍內的值可能並不表示有問題。

關於自上而下方法的重要一點是,您無需花費時間優化未被識別爲瓶頸的類別中的問題-這樣做可能不會顯着提高性能。

調整後端綁定類別

大多數未調整的應用程序將是“後端綁定”。解決後端問題通常是與解決延遲源有關,這將導致退休花費的時間超過必要時間。在英特爾微體系結構代碼名稱Sandy Bridge上,VTune Amplifier具有“後端綁定”指標,用於查找高延遲源。例如,LLC Miss(上級高速緩存未命中)度量標準標識需要訪問DRAM以獲得數據的代碼區域,而Split Loads和Split Stores度量標準指出會損害性能的內存訪問模式。有關英特爾微體系結構代碼名稱Sandy Bridge指標的更多詳細信息,請參閱《調優指南》。從英特爾微體系結構代碼名稱Ivy Bridge(在第三代英特爾酷睿處理器家族中使用)開始,可以使用事件將“後端綁定”分類分解爲“內存綁定”和“核心綁定”子指標。前4個類別下的指標可以使用管道插槽域以外的域。每個指標將基於基礎PMU事件使用最合適的域。有關更多詳細信息,請參見每個指標或類別文檔

使用與執行單元的利用率相對應的事件來確定“內存”和“核心綁定”子度量標準,這與頂級分類中使用的分配階段相反。因此,這些指標的總和不一定與頂層確定的“後端綁定”比率匹配(儘管它們具有很好的相關性)。

“內存綁定”類別中的停頓具有與內存子系統有關的原因。例如,緩存未命中和內存訪問可能導致內存綁定停頓。核心綁定停頓是由於每個週期內CPU可用執行單元的使用不盡人意引起的。例如,連續競爭多個除法單元的多個多週期除法指令可能會導致內核綁定停頓。對於此故障,只有在插槽停止且沒有未完成的內存訪問的情況下,插槽才被歸類爲“核心綁定”。例如,如果有掛起的負載,則該週期被歸類爲“內存綁定”,因爲在負載尚未返回數據時,執行單元正處於飢餓狀態。PMU事件被設計到硬件中,專門允許這種類型的故障,這有助於確定應用程序中的真正瓶頸。

“內存綁定”類別下的大多數度量標準都確定了從L1緩存到內存的哪個內存層次結構級別是瓶頸。同樣,仔細確定了用於此確定的事件。後端停止後,指標將嘗試將暫掛的負載的停頓歸因於特定級別的緩存或運行中的存儲。如果將熱點綁定到給定級別,則意味着正在從該緩存級別或內存級別檢索其大部分數據。優化應該集中在使數據更靠近核心。Store Bound也稱爲子類別,它可以指示相關性-例如何時管道中的負載取決於先前的存儲。在每個類別下,都有一些指標可以識別導致內存綁定執行的特定應用程序行爲。例如,

核心綁定停頓通常在後端綁定中不常見。當可用的計算資源沒有得到充分利用和/或在沒有顯着內存需求的情況下使用時,可能會發生這些情況。例如,一個緊密循環對適合緩存的數據執行浮點(FP)算術計算。VTune Amplifier提供了一些指標來檢測此類別中的行爲。例如,“除法器”度量標準標識大量使用除法器硬件的週期,而“端口利用率”度量標準則標識對離散執行單元的競爭。

後端綁定類別

注意

指標值顯示爲灰色表示該指標收集的數據不可靠。例如,如果爲PMU事件收集的樣本數量太少,則可能會發生這種情況。您可以忽略此數據,也可以在數據收集時間,採樣間隔或工作量增加的情況下重新運行收集。

調整前端綁定類別

前端綁定類別涵蓋了其他幾種類型的管線停轉。管道的前端部分成爲應用程序的瓶頸的可能性較小。但是,在某些情況下,前端可能會導致機器停頓。例如,JIT代碼和解釋代碼會導致前端停頓,因爲指令流是動態創建的,沒有事先編譯器代碼佈局的好處。在“前端綁定”類別中提高性能通常將與代碼佈局(共定位熱代碼)和編譯器技術有關。例如,分支代碼或具有較大佔用空間的代碼可能會突出顯示“前端綁定”類別。在許多情況下,諸如代碼大小優化和編譯器配置文件引導的優化(PGO)之類的技術可能會減少停頓。

英特爾微體系結構代號爲Ivy Bridge的自上而下方法將前端綁定的停頓分爲兩類,即前端延遲和前端帶寬。前端延遲度量標準報告週期,其中一個週期中前端未發出任何微指令,而後端則準備使用它們。回想一下,前端集羣每個週期最多可以發出4微分。“前端帶寬”度量標準報告了發出少於4微秒的週期,這表示對前端功能的使用效率低下。在每個類別下都將確定其他指標。

分支錯誤預測(通常在不良推測類別中得到了解決)也可能導致前端效率低下,如前端延遲下的“分支Resteers”瓶頸指標所表示的那樣,前端效率低下是從英特爾微體系結構代碼名稱Ivy Bridge開始的。

前端綁定類別

VTune Amplifier列出了可以識別前端綁定代碼原因的指標。如果這些類別中的任何一個在結果中顯着顯示,請更深入地研究度量標準以確定原因以及如何糾正它們。例如,ITLB開銷(指令轉換後備緩衝區開銷)和ICache丟失(指令緩存未命中)度量標準可能指出受前端綁定執行影響的區域。有關調整建議,請參見《 VTune放大器調整指南》。

調整不良推測類別

第三個頂級類別不良推測,表示管道何時忙於獲取和執行無用的操作。錯誤的推測管道插槽是由發出的指令浪費的插槽,它們在計算機從錯誤的推測中恢復時從未退役或停止。錯誤的推測是由分支的錯誤預測和機器清除引起的,而較少的情況是由諸如Self-Modifying-Code這樣的情況引起的。可以通過諸如Profile-Guided Optimization(PGO)之類的編譯器技術來減少不良推測,避免間接分支,並消除導致機器清除的錯誤情況。糾正不良投機問題也可能有助於減少前端綁定停頓的數量。有關特定的調整技術,請參考適用於您的微體系結構的《 VTune放大器調整指南》。

不良投機類別

退休類別調

頂層的最後一個類別是“退休”。它表示管道何時忙於通常有用的操作。理想情況下,一個應用程序應具有儘可能多的此類插槽。但是,即使具有很大一部分流水線槽退出的代碼區域也可能有改進的空間。即將落入退役類別的一個性能問題是大量使用微型序列發生器,它通過產生大量微指令以解決特定情況來輔助前端。在這種情況下,儘管有許多退休的案例,但可以避免其中的一些。例如,通常可以通過編譯器選項(例如DAZ或FTZ)來減少在出現異常時應用的FP助手。選擇代碼生成還可以幫助緩解這些問題-有關更多詳細信息,請參見VTune Amplifier調整指南。在英特爾微體系結構代碼名稱Sandy Bridge中,“協助”被標識爲“退休”類別下的一個指標。在英特爾微體系結構代碼名稱Ivy Bridge及更高版本中,理想退休類別中的流水線槽分爲一個子類別,稱爲“一般退休”,並且分別標識了微代碼序列發生器。

退休類別

如果尚未完成,那麼諸如並行化和向量化之類的算法調整技術可以幫助提高屬於退休類別的代碼區域的性能。

結論

自上而下的方法及其在VTune放大器中的可用性代表了使用PMU進行性能調整的新方向。花費在開發人員熟悉該特性上的時間將是值得的,因爲對它的支持已被設計到最新的PMU中,並且在可能的情況下,層次結構在將來的英特爾微體系結構上得到了進一步擴展。例如,在英特爾微體系結構代碼名稱Sandy Bridge和英特爾微體系結構代碼名稱Ivy Bridge之間,該特性得到了顯着擴展。

自頂向下方法的目標是確定應用程序性能中的主要瓶頸。VTune放大器的微體系結構探索分析和可視化功能的目標是爲您提供可操作的信息,以改善您的應用程序。這些功能加在一起,不僅可以顯着提高應用程序性能,而且可以極大地提高優化效率。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章