関数例

下記の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;

    }

  }

}