英特爾追蹤分析器和收集器入門

英特爾追蹤分析器和收集器產品入門

英特爾® 追蹤分析器和收集器入門

使用此入門文件和預先收集的跟踪 file 使用英特爾® 追蹤分析器和收集器進行基本 MPI 性能分析。
英特爾追蹤分析器和收集器可協助探索訊息傳遞介面 (MPI) 使用效率並識別通訊熱點、同步瓶頸和負載平衡。有關該產品的更多信息,請參閱英特爾跟踪分析器和收集器產品頁面。

下載英特爾追蹤分析器和收集器

  • 作為英特爾® oneAPI HPC 工具組的一部分
  • 作為獨立工具

先決條件

  • 在執行英特爾追蹤分析器和收集器之前,請確保您已安裝最新的英特爾® MPI 函式庫和英特爾® oneAPI DPC++/C++ 編譯器或英特爾® Fortran 編譯器。
  • 這將為編譯器、英特爾 MPI 庫以及英特爾追蹤分析器和收集器設定所需的環境變量,然後您就可以追蹤您的應用程式了。
  • 有關更多信息,請參閱:英特爾® oneAPI HPC 工具套件系統要求。

了解工作流程

  1. 追蹤您的申請
  2. 分析最活躍的 MPI 函數
  3. 識別有問題的交互
  4. 透過替換引起問題的函數來提高應用程式效能

追蹤您的 MPI 應用程式

生成踪跡 file 收集事件日誌以進行以下應用程式行為分析。

  1. 透過從 oneAPI 安裝控制器執行 setvars 腳本來設定啟動英特爾® 追蹤分析器和收集器的環境
    筆記
    預設情況下,英特爾追蹤分析器和收集器安裝到 Linux* 作業系統的 /opt/intel/oneapi/itac 和 Program Files (x86)\Intel\oneAPI\itac\latest 適用於 Windows* 作業系統。
    在 Linux 上:
    $ 來源 /opt/intel/oneapi/setvars.sh
    在 Windows 上:
    “C:\程式 Files (x86)\Intel\oneAPI\setvars.bat”
  2. 運行 MPI 應用程式並使用 -trace 選項產生追蹤。
    在 Linux 上:
    $ mpirun -trace -n 4 ./poisson_sendrecv.single
    在 Windows 上:
    編譯應用程式並收集追蹤。
    對於 Intel oneAPI DPC++/C++ 編譯器,運行:
    > mpiicc -trace poisson_sendrecv.single.c
    對於英特爾 Fortran 編譯器,運行:
    > mpiifort -trace poisson_sendrecv.single.f
    這個前任ample 為 as 產生追蹤 (stf*)ample poisson_sendrcv.single MPI 應用程式
  3. 打開生成的.stf file 帶有英特爾追蹤分析器 帶有英特爾追蹤分析器和收集器。
    在 Linux 上:
    $traceanalyzer ./ poisson_sendrecv.single.stf
    在 Windows 上:
    追蹤分析器 poisson_sendrecv.single.stf

筆記
出於測試目的,您可以下載預先收集的跟踪 file poisson_sendrecv.single.stf 用於本文檔中使用的泊松,並使用英特爾追蹤分析器和收集器開啟它。
.stf file 在摘要頁面中打開 view,它代表有關應用程式效能的一般資訊:英特爾-Trace-Analyzer-and-Collector-fig-1 入門英特爾-Trace-Analyzer-and-Collector-fig-2 入門筆記 有關英特爾追蹤分析器和收集器功能的更多信息,請參閱了解更多。

分析最活躍的 MPI 函數

分析 MPI 應用程式行為、尋找瓶頸並識別序列化,以找到提高應用程式效能的方法。

  1. 從摘要頁面開啟事件時間表 view 按一下繼續 > 圖表 > 事件時間軸以深入分析頂層 MPI 函數。
    此圖表顯示隨時間變化的各個流程活動。
    應用程式工作是迭代的,其中每次迭代都由計算部分和 MPI 通訊組成。
  2. 透過在所需的時間間隔上拖曳滑鼠來確定要關注的單一迭代並放大它:英特爾-Trace-Analyzer-and-Collector-fig-3 入門蹤跡 view 顯示您選擇的軌跡中的部分。事件時間軸圖表顯示選定迭代期間處於活動狀態的事件。
    • 水平條代表進程以及這些進程中呼叫的函數。
    • 黑線表示進程之間發送的訊息。這些線路連接發送和接收進程。
    • 藍線代表集體操作,例如廣播或歸約操作。
  3. 切換到平面專業版file 選項卡 (A) 可以更仔細地查看在事件時間軸中選擇的時間點執行的函數。英特爾-Trace-Analyzer-and-Collector-fig-4 入門
  4. 取消組合 MPI 函數以分析應用程式中的 MPI 進程活動。
    為此,請右鍵單擊 Flat Pro 中的所有進程 > 群組 MPI (B)file 並選擇取消分組MPI。此操作公開各個 MPI 呼叫。
  5. 在迭代開始時使用 MPI_Sendrecv 分析與其直接鄰居通訊的進程。對於前amp樂:英特爾-Trace-Analyzer-and-Collector-fig-5 入門
    • A。在年代amp如圖所示,MPI_Sendrecv 資料交換有一個瓶頸:在與前一個程序的交換完成之前,該程序不會與其下一個鄰居交換資料。事件時間表 view 將這個瓶頸顯示為樓梯。
    • b.迭代結束時的 MPI_Allreduce 重新同步所有進程;這就是為什麼這個街區有反向樓梯的外觀。
  6. 使用 Function Pro 識別序列化file 和訊息專業版file views.
    • A。同時開啟圖表:
      在功能 Pro 中file 圖表,開啟負載平衡標籤。
    • 前往圖表選單以開啟 Message Profile.
    • b.在負載平衡標籤中,展開 MPI_Sendrecv 和 MPI_Allreduce。負載平衡表明,MPI_Sendrecv 所花費的時間隨著進程數量的增加而增加,而 MPI_Allreduce 所花費的時間則減少。
    • C。檢查訊息 Profile 圖表向下到右下角。
      區塊的顏色編碼表明,從較高層級傳輸到較低層級的訊息需要成比例更多的時間,而從較低層級傳輸到較高層級的訊息則顯示出弱偶數-奇數類型的模式:英特爾-Trace-Analyzer-and-Collector-fig-6 入門

對比分析結果表明,應用程式中不存在複雜的交換模式,僅與相鄰進程進行交換。這些資訊對於透過更改通訊步驟來優化應用程式的通訊模型來提高應用程式效能至關重要。

識別不平衡的溝通

在理想環境下觀察您的應用並比較原始軌跡 file 與理想化的互動來隔離有問題的互動。

  1. 創造一個理想化的 file:
    • A。選擇進階 > 理想化或點選英特爾-Trace-Analyzer-and-Collector-fig-7 入門 (理想化)工具列按鈕。
    • b.在「理想化」對話方塊中檢查理想化參數(理想跡線) file 轉換的名稱和時間範圍)。
    • C。點擊“開始”以理想化您的追蹤。
  2. 將原始跡線與理想化跡線進行比較:
    • A。選擇進階 > 不平衡圖或點選 英特爾-Trace-Analyzer-and-Collector-fig-8 入門(不平衡圖)工具列按鈕。
    • b.在“不平衡圖”對話方塊中,按一下“開啟另一個” File 按鈕,導航到理想化跡線,然後選擇它。
    • C。在不平衡圖視窗中,按一下總計模式按鈕並選擇擊穿模式。

英特爾-Trace-Analyzer-and-Collector-fig-9 入門

可以看到MPI_Sendrecv是最耗時的函數。不平衡重量顯示在
淺色,約佔 MPI_Sendrecv 函數的 10%。這是進程相互等待的時間。

透過改變通訊方式提高應用程式效能

  1. 透過將阻塞通訊變更為非阻塞通訊來提高 MPI 應用程式的效能。
    在您的程式碼中,將串列 MPI_Sendrcv 替換為非阻塞通訊:MPI_Isend 和 MPI_Irecv。對於前ample:原始碼片段:
    // 邊界交換
    無效交換(para* p, grid* gr){
    整數 i, j;
    MPI_狀態狀態_100、狀態_200、狀態_300、狀態_400;
    // 向下傳送第一行
    MPI_Send(gr->x_new[1], gr->lcol+2, MPI_DOUBLE, gr->down, 100, MPI_COMM_WORLD); MPI_Recv(gr->x_new[gr->lrow+1], gr->lcol+2, MPI_DOUBLE, gr->up, 100, MPI_COMM_WORLD,
    &status_100);
    // 傳送最後一行
    MPI_Send(gr->x_new[gr->lrow], gr->lcol+2, MPI_DOUBLE, gr->up, 200, MPI_COMM_WORLD);
    MPI_Recv(gr->x_new[0], gr->lcol+2, MPI_DOUBLE, gr->down, 200, MPI_COMM_WORLD, &status_200);
    使用英特爾追蹤分析器比較 view 將序列化的應用程式與修訂後的應用程式進行比較
    // 將左列複製到 tmp 數組
    如果(gr->左!= MPI_PROC_NULL){
    gr->x_new[i][gr->lcol+1] = right_col[i]; right_col[i] = gr->x_new[i][gr->lcol];
    // 向右傳送
    MPI_Send(right_col, gr->lrow+2, MPI_DOUBLE, gr->right, 400, MPI_COMM_WORLD); }
    if(gr->左!= MPI_PROC_NULL)
    {
    MPI_Recv(left_col, gr->lrow+2, MPI_DOUBLE, gr->left, 400, MPI_COMM_WORLD,&status_400); for(i=0; i< gr->lrow+2; i++
    {
    gr->x_new[i][0] = left_col[i];
    }
    }
    更新的程式碼片段
    MPI_Request 請求[7];
    // 向下傳送第一行
    MPI_Isend(gr->x_new[1], gr->lcol+2, MPI_DOUBLE, gr->down, 100, MPI_COMM_WORLD, &req[0]);
    MPI_Irecv(gr->x_new[gr->lrow+1], gr->lcol+2, MPI_DOUBLE, gr->up, 100, MPI_COMM_WORLD, &req[1]);
    ……
    MPI_Waitall(7, 請求, MPI_STATUSES_IGNORE);
    更正後,修訂後的應用程式的單次迭代將如下所示amp樂:英特爾-Trace-Analyzer-and-Collector-fig-10 入門
  2. 使用英特爾追蹤分析器比較 view 將序列化的應用程式與修訂後的應用程式進行比較。在比較的幫助下比較兩條軌跡 View, 去 View > 比較。比較 View 看起來類似:英特爾-Trace-Analyzer-and-Collector-fig-11 入門在比較中 View,您可以看到使用非阻塞通訊有助於消除序列化並減少進程的通訊時間。
    筆記 有關應用程式節點級性能的更多信息,請參閱相應工具的文檔:英特爾® VTune™ Profiler MPI 程式碼分析和使用英特爾® Advisor 分析英特爾® MPI 應用程式。

了解更多

探索以下資源,以了解有關英特爾追蹤分析器和收集器的更多資訊。英特爾-Trace-Analyzer-and-Collector-fig-12 入門英特爾-Trace-Analyzer-and-Collector-fig-13 入門

聲明和免責聲明

  • 英特爾技術可能需要啟用硬件,軟件或服務才能激活。
  • 沒有任何產品或組件是絕對安全的。
  • 您的費用和結果可能會有所不同。
  • © 英特爾公司。英特爾、英特爾標誌和其他英特爾標誌是英特爾公司或其子公司的商標。其他名稱和品牌可能被聲稱為其他人的財產。
  • 本文檔未授予任何智慧財產權許可(明示或暗示、透過禁止反言或其他方式)。
  • 所描述的產品可能包含設計缺陷或錯誤(稱為勘誤表),這可能導致產品偏離已發布的規格。目前特徵勘誤表可依要求提供。
  • 英特爾否認所有明示和默示保證,包括但不限於適銷性、特定用途適用性和不侵權的默示保證,以及因履行過程、交易過程或貿易使用產生的任何保證。

文件/資源

英特爾 英特爾追蹤分析器和收集器入門 [pdf] 使用者指南
英特爾追蹤分析器和收集器入門、英特爾追蹤分析器和收集器入門、收集器

參考

發表評論

您的電子郵件地址不會被公開。 必填欄位已標記 *