診断 15537: ループはベクトル化されませんでした: 暗黙の FP 例外モデルが、切り捨てまたは整数除算/剰余に必要な SVML ライブラリーの使用を妨げています。コンパイラー・オプションやソースのディレクティブを変更して、fast FP モデルを有効にし、FP 例外をマスクすることを検討してください。

同カテゴリーの次の記事

診断 15487: 型変換: xxxx

この記事は、インテル® デベロッパー・ゾーンに掲載されている「Diagnostic 15537: loop was not vectorized: implied FP exception model prevents usage of SVML library needed for truncation or integer divide/remainder. Consider changing compiler flags and/or directives in the source to enable fast FP model and to mask FP」の日本語参考訳です。


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

原因:

この診断メッセージは、ベクトル化対象のループが /fp:strict (Windows*) または -fp-model strict (Linux*) オプションでコンパイルされたときに出力されます。コンパイル時に “strict” 浮動小数点モデルを指定すると、ベクタライザーは SVML ライブラリーを使用しません。ベクトルバージョンを生成するには、浮動小数点モデルを変更する必要があります。

例:

void foo(int *a, int *b, int n){
  int i;
  for (i=0;i<n;i++){
    a[i] /= b[i];
  }
}

$ icl 15537.c /c /Qopt-report:2 /Qopt-report-phase:vec /fp:strict

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

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

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

ループの開始 D:\15537.c(3,3)
<マルチバージョン v1>
   リマーク #15537: ループ はベクトル化されませんでした: 暗黙の FP 例外モデルが、切り捨てまたは整数除算/剰余に必要な SVML ライブラリーの使用を妨げています。コンパイラー・オプションやソースのディレクティブを変更して、fast FP モデルを有効にし、FP 例外をマスクすることを検討してください。[ D:\15537.c(4,5) ]
ループの終了

ループの開始 D:\15537.c(3,3)
<マルチバージョン v2>
   リマーク #15304: ループ はベクトル化されませんでした: マルチバージョンのベクトル化できないループ・インスタンスです。
ループの終了

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

関連記事