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