#pragma omp distribute parallel for simd
目的
omp distribute parallel for simd ディレクティブは、ループ反復を各マスター・スレッドに分散し、さらにその反復を各チームのスレッド間で再び分散し、SIMD ベクトル化を各反復に適用します。
構文
.-+---+------. | '-,-' | V | >>-#--pragma--omp distribute parallel for simd----+--------+-+->< '-clause-'
>>-for-loops---------------------------------------------------><
パラメーター
omp distribute parallel for simd 構文は複合構文です。clause には、omp distribute ディレクティブまたは omp parallel for simd ディレクティブで受け入れられる任意の節を指定でき、節の意味と制約事項はそれらのディレクティブの場合と同じです。
使用法
omp distribute parallel for simdディレクティブは、-qsmp と -qoffload の両方のコンパイラー・オプションを指定する場合のみ有効です。規則
collapse 節以外の指定された節が omp distribute ディレクティブおよび omp parallel for simd ディレクティブの両方に適用可能な場合、その節は 2 回適用されます。collapse 節は 1 回のみ適用されます。
linear 文節ではループ反復変数のみが指定可能です。
例
int N = 8;
int a[N];
#pragma omp target map(to: N) map(tofrom: a)
#pragma omp teams num_teams(2) thread_limit(N/2)
#pragma omp distribute parallel for simd
for (i=0, i<N, i++)
{
a[i] = N;
}
#pragma omp end distribute parallel for simd
#pragma omp end teams
#pragma omp end target
この例では、ターゲット領域に、2 つのチームからなるチーム領域が含まれています。 omp distribute parallel for simd ディレクティブでは、緊密にネストされた分散ループの反復が、実際に作成されたチームに割り当てられ、各チームのマスター・スレッドで、分散された反復が実行されます。さらに、並行実行の各 SIMD チャンクが各チームのスレッド間で再配分され、SIMD チャンクの各反復に SIMD ベクトル化が適用されます。
