インテル® C++ コンパイラー 16.0 ユーザー・リファレンス・ガイド

omp for simd

SIMD (Single Instruction, Multiple Data) 命令を使用して同時に実行可能なループの開始位置を指定します。ループの各反復は、チーム内の 1 つのスレッドにより実行されます。

構文

#pragma omp for simd[clause{[, clause, ...]]

for loops

引数

clause

次のいずれかです。

collapse(n)

1 つのループに結合して並列実行する、OpenMP* for 構造に関連する for ループの入れ子構造のループ数を指定します。

firstprivate(list)

private 節で指定される機能のスーパーセットを指定します。各プライベート・データ・オブジェクトはオリジナルのオブジェクトの値を使用して初期化されます。

lastprivate(list)

private 節で指定される機能のスーパーセットを指定します。領域を出る時点で、オリジナルのオブジェクトは、関連付けられたループシーケンスの最後の反復、または記述上における最後のセクション構造のプライベート・コピーの値で更新されます。

nowait

ワークシェア領域の最後で実装がバリアを省略できるようにします。

ordered

private(list)

チーム内の各スレッドに対して変数を private にすることを宣言します。

reduction(operator: list)

スカラー変数の削減を実行します。

schedule (type[, chunk])

for ループの反復をチームのスレッド間でどのように分割するかを指定します。

for loop

次の形式でなければなりません。

for (init-expr; test-expr; incr-expr)

structured-block

説明

このプラグマは、simd 構文に適用される任意の節と一致する方法で、関連する for ループを SIMD ループに変換します。生成される SIMD チャンクと残りの反復は、for 構文に適用される任意の節と一致する方法で、並列領域の暗黙のタスクにわたって分配されます。

SIMD 命令を使用してループをコンパイルする例

#pragma omp for simd schedule(static,10) {
   for (i=0; i<N; i++) { a[i] = b[i] * c[i]; }
}