詳細な解析のためコードをアノテートする

インテル® Advisor のアノテーション によって並列処理の可能性をマークする前に、並列処理を追加する場所を選択する必要があります。ここでは、候補となるコード領域とそれらの実行を調査し、候補となる場所を選択する際に考慮すべき一連の要因について説明します。

ほとんどの場合、インテル® Advisor を使用する際に、Threading (スレッド化) パースペクティブのスータブル解析を除き、ソース・アノテーションは必要ありません。Vectorization and Code Insights (ベクトル化とコードの調査)Offload Modeling (オフロードのモデル化) など観点でアプリケーションを解析する場合、コードの全ての領域を自動的に解析したり、アプリケーションを再コンパイルする必要のないインテル® Advisor のマークアップ機能を利用することができます。

シリアルプログラムの操作は、明確な順番で最初から最後まで連続して実行されます。一方、並列プログラムは、プログラムの一部分であるタスクが独立して異なるコアで実行されます。タスクは独立した関数やループの反復に実装することができます。

以下を特定するインテル® Advisor のアノテーションを追加して候補となるコード領域をマークします。

並列サイトのコードの特性

並列サイトとタスクのアノテーション

コメントと制限

単一タスクのみを必要とするループ。簡単な構造のループでは、タスクにループ本体全体が含まれていない限り、単一の反復タスク・アノテーションから始めます。

コード例: nqueens_Advisor C/C++ サンプルと nqueens Fortran および C# サンプル

3 つのアノテーションを追加してマーク:

  • 並列サイト領域にサイトの開始と終了アノテーションを追加。

  • 並列タスクループの本体の始まりに単一の反復タスク・アノテーションを追加。

スータビリティー・ツールのパフォーマンス予測に応じて、複数のタスクの使用も検討します。この場合、単一の反復タスク・アノテーションを削除して、それぞれのタスクの開始と終了アノテーションを追加します (次の行を参照)。

ループ構造が複雑な場合、次の行のタスク・アノテーションを使用して、タスクの開始と終了領域をマークする必要があるかもしれません。

複雑なループ、複数のタスクを可能にするコード、またはループでないコード

コード例: stats C++ サンプル

4 つのアノテーションを追加してマーク:

  • 並列サイト領域にサイトの開始と終了アノテーションを追加。

  • それぞれの並列タスク領域にタスクの開始と終了アノテーションを追加。

並列処理を追加する候補の場所を選択し、[サーベイレポート] ウィンドウでデータを確認します。このデータを使用して、コードエディターで並列サイトとタスクの候補をマークするアノテーションを追加します。そして、選択したターゲットの実行形式でこれらのアノテーションが実行されることを確認します。

サイトとタスク・アノテーションは、インテル® Advisor のスータビリティーと依存関係ツールが、シリアルプログラムの実行から並列動作を予測できるようにします。これらのツールは、並列処理を追加する最適な場所の特定に役立つデータを提供するため、シリアルプログラムを実行して広範囲な解析を行います。

インテル® Advisor の並列設計機能の利点を活用するには、可能性のあるさまざまな並列コード領域を調査するため、サイトとタスク・アノテーションとその位置を変更し、アプリケーションのターゲットを再ビルドして、スータビリティーと依存関係ツールを再実行します。

次の図は、C/C++ の nqueens_Advisor サンプルコードのタスク (青色)とその並列サイト (オレンジ色) を示しています。


nqueens サンプルの並列サイトとタスク

シリアルプログラムを並列プログラムに変換する前に、次のことをする必要があります。