インテル® Advisor ユーザーガイド
2 つ以上のタスクとして複数の関数呼び出しを並列に実行できます。これは、ソースがないライブラリー・コード内の関数に有用です。並列に実行する文は、関数呼び出しに限定されません (「データとタスク並列処理」を参照してください)。
次の例のように、アノテーション・サイトの最外の文がタスクに配置される場合、並列実行するのは容易です。
C/C++ アノテーション・コードについて考えてみます。
ANNOTATE_SITE_BEGIN(sitename); ANNOTATE_TASK_BEGIN(task1); ステートメント-1; ANNOTATE_TASK_END(); ANNOTATE_TASK_BEGIN(task2); ステートメント-2; ANNOTATE_TASK_END(); ANNOTATE_TASK_BEGIN(task3); ステートメント-3; ANNOTATE_TASK_END(); ANNOTATE_SITE_END();
C/C++ の並列コードでは、OpenMP* の #pragma omp parallel sections と並列コード領域内で関連するプラグマを使用して明示的に定義できます。
#pragma omp parallel sections { #pragma omp section { ステートメント-1; } #pragma omp section { ステートメント-2; } . . . }
次のアノテーション付きの Fortran コードについて考えてみます。
call annotate_site_begin("sitename") call annotate_task_begin("task_1") call subroutine_1 call annotate_task_end call annotate_task_begin("task_2") call subroutine_2 call annotate_task_end call annotate_site_end ...
並列化された Fortran コードでは、OpenMP* の !$omp sections と関連するディレクティブを使用して、並列コード領域内の対応するアノテーションを置き換えます。
!$omp parallel !$omp sections !$omp section call subroutine_1 !$omp section call subroutine_2 !$omp end sections !$omp end parallel ...