下記のtest1関数は、ワークキューイング・モデルを使用する並列化処理を示します。parallel taskq プラグマを持つループとtaskプラグマを持つループ本体の作業を付けることによって並列処理を記述できます。parallel taskq プラグマは、囲まれたtaskプラグマに指定された作業単位をエンキューするwhileループの環境を指定します。従って、ループの制御構造とエンキューは、シングルスレッドで実行され、チーム内の他のスレッドはtaskqキューからの作業をデキューし、実行します。captureprivate構文は、各タスクがエンキューされる時点、つまり、シーケンシャル・セマンティクスが保存される時点で、リンクポインタpのprivateコピーが確実に取り込まれるようにします。
void test1(LIST p)
{
#pragma intel omp parallel taskq shared(p)
{
while (p != NULL)
{
#pragma intel omp task captureprivate(p)
{
do_work1(p);
}
p = p->next;
}
}
}