インテル® コンパイラーによって実装されるタスクモデルは、OpenMP* でより広範囲のアプリケーションを並列化できるようにします。タスクに使用される宣言子は次のとおりです。
TASK および END TASK
TASKWAIT
TASK 宣言子および END TASK 宣言子は、次のように明示的なタスク領域を定義します。
例 |
---|
!$OMP TASK ! explicit task region !$OMP END TASK |
タスク領域のバインド・スレッド・セットは、現在の並列チームです。タスク領域は、最内の囲まれた PARALLEL 領域にバインドします。スレッドがタスク構造に到達すると、その構造内で囲まれた構造化ブロックからタスクが生成されます。到達スレッドは、ただちにタスクを実行するか、または実行を保留します。タスク構造は、外側のタスクの中に入れ子されることがありますが、内側タスクのタスク領域は、外側タスクのタスク領域の一部ではありません。
TASK 宣言子には、オプションで指定した節をカンマ区切りのリストで指定できます。タスクのデータ環境は、タスク構造上のデータ共有属性節と適用されるデフォルトに従って作成されます。節は次のとおりです。
IF: タスクをただちに実行するか、または保留できるかを指定できます。
UNTIED: チーム内のスレッドが中断タスクを再開するかどうかを指定します。
PRIVATE、FIRSTPRIVATE、SHARED: 変数型
DEFAULT: 変数データスコープ属性
次の例では、1 つのスレッドで N タスクを生成し、それらのタスクを並列チーム内のスレッド群で実行する方法を示しています。
例 |
---|
!$OMP PARALLEL SHARED(DATA) !$OMP SINGLE PRIVATE (I) DO I = 1, N !$OMP TASK FIRSTPRIVATE(I), SHARED(DATA) CALL WORK(DATA(I)) !$OMP END TASK END DO !$OMP END SINGLE !$OMP END PARALLEL |