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

ivdep

ベクトル依存性が存在していると推定されてもそれを無視するようにコンパイラーに指示します。

構文

#pragma ivdep

引数

なし

説明

ivdep プラグマは、ベクトル依存性が存在していると推定されてもそれを無視するようにコンパイラーに指示します。正しいコードにするため、コンパイラーは、想定される依存性を証明された依存性として扱い、ベクトル化を行わないようにします。このプラグマは、その決定を無視します。このプラグマは、想定されているループの依存性が安全で、無視できる場合にのみ使用してください。

ベクトル化を防ぐ証明された依存性は無視されず、想定された依存性のみが無視されます。

例 1

この例のループは、k の値が不明なため、ivdep プラグマなしではベクトル化を行いません (ベクトル化は k < 0 の場合、不正です)。

void ignore_vec_dep(int *a, int k, int c, int m)
{
  #pragma ivdep
  for (int i = 0; i < m; i++)
    a[i] = a[i + k] * c;
}

プラグマは、現在の関数に含まれている for ループだけをバインドします。これには、現在の関数によって呼び出されるサブ関数に含まれる for ループも含まれます。

例 2

例えば、次のループでは、ループ伝播の依存がないことを示す ivdep プラグマの他に parallel オプションが必要です。

#pragma ivdep
for (i=1; i<n; i++)
{
  e[ix[2][i]] = e[ix[2][i]]+1.0;
  e[ix[3][i]] = e[ix[3][i]]+2.0;
}

例 3

例えば、次のループでは、a() への格納でループ伝播の依存がないことを示す ivdep プラグマの他に parallel オプションが必要です。

#pragma ivdep
for (j=0; j<n; j++)
{
  a[b[j]] = a[b[j]] + 1;
}

関連情報


このヘルプトピックについてのフィードバックを送信