インテル® C++ コンパイラー XE 13.1 ユーザー・リファレンス・ガイド
"#pragma ivdep" を指定されたループの前に追加します。このプラグマは、いくつかの想定されるループの繰り返し間のデータ依存を無視して、指定された行のループのベクトル化を有効にします。
次の例について考えてみます。
void foo(float *a, int x, int n) {
int i;
for (i=0; i<n; i++) {
a[i] = a[i+x]+1;
}
return;
}
この例では、各反復がその前の反復に依存しており、x が -1 になる可能性があるため、コンパイラーはこのループをベクトル化できません。x が正の数であることが分かっている場合は、このループをベクトル化できます。
安全であることが分かっている場合は、次のようにプラグマを追加できます。
void foo(float *a, int x, int n) {
int i;
#pragma ivdep
for (i=0; i<n; i++) {
a[i] = a[i+x]+1;
}
return;
}