< 目次

単一タスクの単純なループ向けのサイトとタスクのアノテーション

並列サイト・アノテーションは、並列サイトの開始と終了をマークします。一方、単純なループ本体全体をタスクとしてマークする場合、サーベイツールがアプリケーションの時間を消費する単純なループを特定する一般的なケースでは、単一の反復タスク・アノテーションのみが必要です。多くの場合、単一の時間を消費する単純なループ構造は、並列サイト内で実行される唯一のタスクである可能性があります。このアノテーション形式はまた、並列コードへの変換が容易です。

インテル® Advisor 2021.1 以降では C# と .NET のサポートが非推奨となりました。

タスクのコードがループ本体全体を含まない場合、単一の並列サイトで複数のタスクが必要な場合、または複雑なループの場合は、それぞれのタスクをマークするため開始/終了アノテーションのペアを使用します。

ループではない時間を消費するコード、タスクを含む複雑なループ、または並列サイト内に複数のタスクが必要な場合は、一般的なサイト/タスク・アノテーション形式を使用します。

構文: 単一のタスクの単純なループ

並列サイト・アノテーションは、ループを囲む並列サイトをマークします。

C/C++:

ANNOTATE_SITE_BEGIN(sitename);ANNOTATE_SITE_END();

Fortran:

call annotate_site_begin(sitename)call annotate_site_end

C#:

Annotate.SiteBegin(sitename);Annotate.SiteEnd();

反復タスク・アノテーションは、並列サイト内で実行されます。ループ本体の開始点近辺にこのアノテーションを配置して、単純なループ本体全体をタスクとしてマークします。

C/C++:

ANNOTATE_ITERATION_TASK(taskname);

Fortran:

call annotate_iteration_task(taskname)

C#:

Annotate.IterationTask(taskname);

C/C++ では、ANNOTATE_SITE_END();アノテーションのsitename 引数はオプションです。

sitenametaskname は、アノテーション名の引数規則に従います。

例: 単一のタスクの単純なループ

次の C/C++ コードは、単一タスクのループ向けの並列サイトであり、タスクは単純なループ本体全体を含みます。

 
...    
ANNOTATE_SITE_BEGIN(sitename); 
     for (i=0; i<N; i++) { 
     ANNOTATE_ITERATION_TASK(taskname); 
          func(i); 
     } 
ANNOTATE_SITE_END(); 
...

次の Fortran コードは、単一タスクのループ向けの並列サイトであり、タスクは単純なループ本体全体を含みます。

 
call annotate_site_begin("sitename") 
     do i=1,size 
     call annotate_iteration_task("taskname") 
          call func(i) 
     end do 
call annotate_site_end 
...

次の C# コードは、単一タスクのループ向けの並列サイトであり、タスクは単純なループ本体全体を含みます。

...
Annotate.SiteBegin("sitename"); 
     for (int i = 0; i < N; i++) { 
     Annotate.IterationTask("taskname"); 
          func(i); 
     } 
Annotate.SiteEnd(); 
...

Visual Studio* プロジェクトでは、並列サイトはプロジェクト境界にまたがる可能性がありますが、並列サイトと関連するアノテーションは、スタートアップ・プロジェクトの関連プロジェクト内に配置される必要があります。適切な依存関係を追加するため、Visual Studio* の [プロジェクト依存関係] コンテキスト・メニュー項目を使用する必要があるかもしれません。

C++ のサンプル nqueens_Advisor と Fortran のサンプル nqueens_Fortran は、この形式のサイト/タスク・アノテーションを示します。C++ アノテーション・コードの例は、nqueens_annotated.cpp にあります。

ANNOTATE_SITE_BEGIN(solve); 
for(int i=0; i<size; i++) { 
     // 最初の行のすべての位置を確認
     // 再帰ごとに個別の配列を作成
     ANNOTATE_ITERATION_TASK(setQueen); 
     // int * queens = new int[size]; // 盤上のクイーンの位置を表す配列 ...
     // ADVISOR COMMENT: これはすべてのタスクが使用する偶発的共有です ...     
     setQueen(queens, 0, i); 
} 
ANNOTATE_SITE_END();

ヘルプトピックの並列サイトとタスクのアノテーションは、並列サイトとタスクの追加を説明しています。

関連情報