アノテーション

インテル® Advisor ツールがプログラムの並列実行と同期の発生を推測するように、プログラムのシリアル部分にインテル® Advisor のアノテーションを追加してマークします。後で、コードを変更してプログラムを並列実行する準備ができたら、実際にその部分が並列実行されるように、アノテーションを並列フレームワークのコードで置き換えます。

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

コンパイラーが処理できるように、アノテーションは使用する言語に応じてサブルーチンまたはマクロとして実装されます。アノテーションはプログラムの計算を変更しないため、アプリケーションは通常通りに実行されます。

以下の場所をマークする 3 つのアノテーション・タイプがあります。

さらに次のアノテーションがあります。

3 つのインテル® Advisor ツールは、3 つの主なアノテーション・タイプと、収集の停止および再開アノテーションを認識します。依存関係ツールのみが特殊アノテーションを処理します。

並列処理を追加する候補のコード領域をマークするため、並列サイトとタスク・アノテーションを使用します。これらのアノテーションは、インテル® Advisor のスータビリティーと依存関係ツールが、シリアルプログラムの並列動作を予測できるようにします。例:

サイトとタスクの一般的な使い方として、ループ全体を並列サイトで囲み、ループ本体をタスクで囲む方法があります。次の C/C++ コードは、2 つの並列サイト・アノテーションと 1 つのタスク・アノテーションを使用する簡単な nqueens_Advisor の例です。3 つのアノテーションとアノテーション定義のインクルード行は、太字で示します。

#include "advisor-annotate.h" 
... 
void solve() { 
     int * queens = new int[size]; // 配列は盤上に配置されたクイーンを示します
     ...
     ANNOTATE_SITE_BEGIN(solve); 
     for(int i=0; i<size; i++) {   // 最初の列のすべての位置を試行 
     ANNOTATE_ITERATION_TASK(setQueen); 
          setQueen(queens, 0, i); 
     }
 ANNOTATE_SITE_END(); ...}

以下は Fortran の nqueens のコード例です。並列サイトの使用と call annotate_site_begin("label") などの Fortran タスク・アノテーションの使用例を示します。3 つの追加されたアノテーションとアノテーション定義モジュール ( use 文) の参照は、太字で示します。

use advisor_annotate 
...! main solver routine 
subroutine solve (queens) 
     implicit none 
     integer, intent(inout) :: queens(:) 
     integer :: i 
     call annotate_site_begin("solve") 
          do i=1,size 
               ! 最初の行のすべての位置を試行 
               call annotate_iteration_task("setQueen") 
               call SetQueen (queens, 1, i) 
          end do 
     call annotate_site_end 
end subroutine solve

以下のコードは、 Windows* システム上の C# のnqueensの例です。Annotate.SiteBegin("label");...追加された 3 つのアノテーションとアノテーション定義の使用を可能にする行 (usingディレクティブ) は、太字で示します。

インテル® Advisor 2021.1 以降では C# と .NET のサポートが非推奨となりました。
using AdvisorAnnotate; 
... 
public void Solve() { 
     int[] queens = new int[size];   // 盤上に配置されたクイーンを示す配列。インデックスは行位置、値は列です。
     Annotate.SiteBegin("solve"); 
     for (int i = 0; i < size; i++) { 
          Annotate.IterationTask("setQueen"); 
          // 最初の列のすべての位置を試行 
          SetQueen(ref queens, 0, i); 
     } 
Annotate.SiteEnd(); ...}

アノテーションの追加を簡素化します。

手動でアノテーションを追加する場合、アノテーションを個別の行に配置して、アノテーションの引数に正しいデータ型を指定する必要があります。C/C++ では、正しいソースの場所を参照できるようにするため、マクロ内にアノテーションを記述してはなりません。

並列処理を追加する最適な場所を特定するため、実験的にアノテーションを変更してツールを再度実行できます。

アノテーションを追加したソースをコンパイルする前に、次のことを行う必要があります。