2 つ以上のタスクとして複数の関数呼び出しを並列に実行できます。これは、ソースがないライブラリー・コード内の関数に有用です。並列に実行する文は、関数呼び出しに限定されません (ヘルプの「データとタスク並列処理」を参照してください)。
次の例のように、アノテーション・サイトの最外の文がタスクに配置される場合、並列実行するのは容易です。
C/C++ アノテーション・コードについて考えてみます。
ANNOTATE_SITE_BEGIN(sitename);
ANNOTATE_TASK_BEGIN(task1);
statement-1;
ANNOTATE_TASK_END();
ANNOTATE_TASK_BEGIN(task2);
statement-2;
ANNOTATE_TASK_END();
ANNOTATE_TASK_BEGIN(task3);
statement-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 ...