インテル® トレース・アナライザーおよびコレクターの使用を開始する

Intel トレース アナライザーおよびコレクター製品の使用を開始する

Intel® Trace Analyzer と Collector を使い始める

この「はじめに」ドキュメントと事前に収集されたトレースを使用します file Intel® Trace Analyzer および Collector を使用して基本的な MPI パフォーマンス分析を実行します。
Intel Trace Analyzer および Collector は、メッセージ パッシング インターフェイス (MPI) の使用効率を調査し、通信のホットスポット、同期のボトルネック、負荷分散を特定するのに役立ちます。製品の詳細については、Intel Trace Analyzer および Collector 製品ページを参照してください。

Intel Trace Analyzer および Collector をダウンロード

  • Intel® oneAPI HPC ツールキットの一部として
  • スタンドアロンツールとして

前提条件

  • Intel Trace Analyzer および Collector を実行する前に、最新の Intel® MPI ライブラリーと Intel® oneAPI DPC++/C++ コンパイラーまたは Intel® Fortran コンパイラーがインストールされていることを確認してください。
  • これにより、コンパイラ、Intel MPI ライブラリ、Intel Trace Analyzer および Collector に必要な環境変数が設定され、アプリケーションをトレースする準備が整います。
  • 詳細については、「Intel® oneAPI HPC Toolkit システム要件」を参照してください。

ワークフローを理解する

  1. アプリケーションを追跡する
  2. 最もアクティブなMPI関数を分析する
  3. 問題のあるやり取りを特定する
  4. 問題の原因となっている機能を置き換えることでアプリケーションのパフォーマンスを向上させる

MPI アプリケーションをトレースする

トレースを生成する file 次のアプリケーション動作分析のためのイベント ログを収集します。

  1. oneAPI インストール ディレクターから setvars スクリプトを実行して、Intel® Trace Analyzer および Collector を起動するための環境を設定します。
    注記
    デフォルトでは、Intel Trace Analyzer and CollectorはLinux* OSの場合は/opt/intel/oneapi/itacに、Programの場合は/opt/intel/oneapi/itacにインストールされます。 FileWindows* OS の場合は s (x86)\Intel\oneAPI\itac\latest です。
    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
    Intel Fortran コンパイラの場合は、次を実行します。
    > mpiifort -trace poisson_sendrecv.single.f
    この元ampleは、次のトレース(stf*)を生成します。ample poisson_sendrcv.single MPI アプリケーション
  3. 生成された.stfを開く file Intel Trace Analyzer と Intel Trace Analyzer および Collector を使用。
    Linuxの場合:
    $ トレースアナライザー ./ poisson_sendrecv.single.stf
    Windowsの場合:
    トレースアナライザー poisson_sendrecv.single.stf

注記
テスト目的で、事前に収集されたトレースをダウンロードすることができます file このドキュメントで使用されているポアソンの poisson_sendrecv.single.stf をダウンロードし、Intel Trace Analyzer and Collector で開きます。
.stfファイル file 概要ページが開きます viewこれは、アプリケーションのパフォーマンスに関する一般的な情報を表します。Intel トレース アナライザーおよびコレクターの使用開始 - 図 1Intel トレース アナライザーおよびコレクターの使用開始 - 図 2注記 Intel Trace Analyzer および Collector の機能の詳細については、「詳細情報」を参照してください。

最もアクティブな MPI 関数を分析する

MPI アプリケーションの動作を分析し、ボトルネックを見つけ、シリアル化を識別して、アプリケーションのパフォーマンスを向上させる方法を見つけます。

  1. 概要ページからイベントタイムラインを開きます view 上位の MPI 関数の詳細な分析については、[続行] > [チャート] > [イベント タイムライン] をクリックしてください。
    グラフには、時間の経過に伴う個々のプロセス アクティビティが表示されます。
    アプリケーション作業は反復的であり、各反復は計算部分と MPI 通信で構成されます。
  2. 注目する単一の反復を特定し、必要な時間間隔でマウスをドラッグしてズームインします。Intel トレース アナライザーおよびコレクターの使用開始 - 図 3痕跡 view 選択したトレース内のセクションが表示されます。イベント タイムライン グラフには、選択した反復中にアクティブだったイベントが表示されます。
    • 水平バーは、プロセスと、そのプロセスで呼び出される関数を表します。
    • 黒い線はプロセス間で送信されるメッセージを示します。これらの線は送信プロセスと受信プロセスを接続します。
    • 青い線は、ブロードキャスト操作や削減操作などの集合操作を表します。
  3. Flat Proに切り替えるfile タブ (A) をクリックすると、イベント タイムラインで選択した時点 () で実行されている関数を詳しく確認できます。Intel トレース アナライザーおよびコレクターの使用開始 - 図 4
  4. MPI 関数をグループ解除して、アプリケーション内の MPI プロセス アクティビティを分析します。
    これを行うには、Flat Proの「すべてのプロセス」>「グループMPI(B)」を右クリックします。file をクリックし、[UngroupMPI] を選択します。この操作により、個々の MPI 呼び出しが公開されます。
  5. 反復処理の開始時にMPI_Sendrecvを使用して、直接隣接プロセスと通信しているプロセスを分析します。例:amp上:Intel トレース アナライザーおよびコレクターの使用開始 - 図 5
    • a. 年代ample、MPI_Sendrecvデータ交換にはボトルネックがあります。プロセスは、前のプロセスとの交換が完了するまで、次の隣接プロセスとデータを交換しません。イベントタイムライン view このボトルネックを階段として表示します。
    • b. 反復処理の最後にある MPI_Allreduce はすべてのプロセスを再同期します。そのため、このブロックは逆階段のように見えます。
  6. Function Proを使用してシリアル化を識別するfile およびメッセージプロfile views.
    • a. チャートを同時に開きます。
      機能プロfile チャートを表示するには、[負荷バランス] タブを開きます。
    • チャートメニューに移動してメッセージプロを開きますfile.
    • b. [負荷分散] タブで、MPI_Sendrecv と MPI_Allreduce を展開します。負荷分散では、プロセス数に応じて MPI_Sendrecv に費やされる時間が増加し、MPI_Allreduce の時間が減少することが示されています。
    • c. メッセージプロを調べるfile 右下隅までチャートを表示します。
      ブロックの色分けは、上位ランクから下位ランクに移動するメッセージには比例して長い時間が必要であることを示していますが、下位ランクから上位ランクに移動するメッセージには弱い偶数と奇数のパターンが見られます。Intel トレース アナライザーおよびコレクターの使用開始 - 図 6

比較分析の結果、アプリケーションには複雑な交換パターンはなく、交換は隣接するプロセスとのみ実行されることが示されました。この情報は、アプリケーションの通信モデルを最適化するための「通信を変更してアプリケーションのパフォーマンスを向上させる」ステップに不可欠です。

不均衡なコミュニケーションを特定する

理想的な状況下でアプリケーションを観察し、元のトレースと比較します file 問題のある相互作用を分離するために、理想化されたものを使用します。

  1. 理想化された file:
    • a. 詳細設定 > 理想化を選択するか、Intel トレース アナライザーおよびコレクターの使用開始 - 図 7 (理想化) ツールバー ボタン。
    • b. 理想化ダイアログボックスで理想化パラメータを確認します(理想トレース file 変換の名前と時間範囲)。
    • c. [開始] をクリックして、トレースを理想化します。
  2. 元のトレースと理想化されたトレースを比較します。
    • a. 「詳細設定」>「不均衡図」を選択するか、 Intel トレース アナライザーおよびコレクターの使用開始 - 図 8(不均衡図) ツールバー ボタン。
    • b. 不均衡図ダイアログボックスで、別の図を開くをクリックします。 File ボタンをクリックし、理想化されたトレースに移動して選択します。
    • c. 不均衡図ウィンドウで、合計モード ボタンをクリックし、内訳モードを選択します。

Intel トレース アナライザーおよびコレクターの使用開始 - 図 9

MPI_Sendrecvが最も時間のかかる関数であることがわかります。不均衡な重みは次のように表示されます。
明るい色で、MPI_Sendrecv 関数の約 10% を占めます。これは、プロセスが互いを待機するのに費やす時間です。

通信を変更してアプリケーションのパフォーマンスを向上させる

  1. ブロッキング通信を非ブロッキング通信に変更することで、MPI アプリケーションのパフォーマンスを向上させます。
    コード内でシリアルMPI_Sendrcvを非ブロッキング通信MPI_IsendとMPI_Irecvに置き換えます。例:ample: 元のコードスニペット:
    // 境界交換
    void exchange(para* p, grid* gr){
    int 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,
    &ステータス_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);
    Intel Trace Analyzerの比較を使用する view シリアル化されたアプリケーションと修正されたアプリケーションを比較する
    // 左の列を tmp 配列にコピーします
    if(gr->left != 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->left != 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上:Intel トレース アナライザーおよびコレクターの使用開始 - 図 10
  2. Intel Trace Analyzerの比較を使用する view シリアル化されたアプリケーションと修正されたアプリケーションを比較します。比較機能を使用して2つのトレースを比較します。 View、行く View > 比較。比較 View 次のようなものになります:Intel トレース アナライザーおよびコレクターの使用開始 - 図 11比較では View非ブロッキング通信を使用すると、シリアル化が削除され、プロセスの通信時間が短縮されることがわかります。
    注記 アプリケーションのノードレベルのパフォーマンスの詳細については、各ツールのドキュメントを参照してください: Intel® VTune™ Profiler MPI コード分析および Intel® Advisor を使用した Intel® MPI アプリケーションの分析。

もっと詳しく知る

Intel Trace Analyzer および Collector の詳細については、次のリソースを参照してください。Intel トレース アナライザーおよびコレクターの使用開始 - 図 12Intel トレース アナライザーおよびコレクターの使用開始 - 図 13

通知と免責事項

  • インテルのテクノロジーでは、有効なハードウェア、ソフトウェア、またはサービスのアクティベーションが必要になる場合があります。
  • 絶対に安全な製品やコンポーネントはありません。
  • 費用と結果は異なる場合があります。
  • © Intel Corporation。Intel、Intel ロゴ、その他の Intel マークは、Intel Corporation またはその子会社の商標です。その他の名称およびブランドは、他社の所有物である場合があります。
  • この文書によって、いかなる知的財産権に対するライセンス(明示的または黙示的、禁反言またはその他の方法による)も付与されることはありません。
  • 記載されている製品には、エラッタと呼ばれる設計上の欠陥やエラーが含まれている可能性があり、製品が公表されている仕様から逸脱する可能性があります。現在特徴付けられているエラッタは、リクエストに応じて入手できます。
  • インテルは、商品性、特定の目的への適合性、および非侵害の黙示の保証、および履行過程、取引過程、または商取引での使用から生じる保証を含むがこれらに限定されない、すべての明示的および黙示的保証を否認します。

ドキュメント / リソース

intel インテル トレース アナライザーとコレクターの使用を開始する [pdf] ユーザーガイド
Intel トレース アナライザーとコレクターの使用を開始する、Intel の使用を開始する、トレース アナライザーとコレクター、コレクター

参考文献

コメントを残す

あなたのメールアドレスは公開されません。 必須項目はマークされています *