診断 15542: ループはベクトル化できませんでした: 内部ループはベクトル化されています。

同カテゴリーの次の記事

診断 15513: ベクトルバージョン 'xxxx' (関数 'xxxx'、位置 <値>) の mask 引数の型が正しくありません。

この記事は、インテル® デベロッパー・ゾーンに掲載されている「Diagnostic 15542: xxxx was not vectorized: inner loop was already vectorized」の日本語参考訳です。


このベクトル診断メッセージは、インテル® C++ コンパイラー 15.0 以降で生成されます。

原因:

この診断メッセージは、for ループが入れ子構造になっており、内部ループがベクトル化されている場合に出力されます。内部 for ループがベクトル化されると、外部ループに対してこの診断メッセージが出力されます。

例:

#define N 1000
float A[N][N];
void foo(int n){
  int i,j;
  for (i=0;i<n;i++){
    for (j=0;j<n;j++){
      A[i][j]++;
    }
  }
}

$ icl 15542.c /c /Qopt-report:2 /Qopt-report-phase:vec

以下の診断メッセージは、インテル® C++ コンパイラー for Windows* 19.1.0.166 (ビルド 20191121) で生成しました。

最適化レポート開始: foo(int)

    レポート: ベクトルの最適化 [vec]

ループの開始 D:\15542.c(5,3)
   リマーク #15542: ループ はベクトル化されませんでした: 内部ループがすでにベクトル化されています。
ループの開始 D:\15542.c(6,5)
   リマーク #15300: ループがベクトル化されました。
ループの終了

ループの開始 D:\15542.c(6,5)
<ベクトル化の剰余ループ>
   リマーク #15301: 剰余ループ がベクトル化されました。
ループの終了

ループの開始 D:\15542.c(6,5)
<ベクトル化の剰余ループ>
ループの終了
ループの終了

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

関連記事