この記事は、インテル® デベロッパー・ゾーンに掲載されている「Diagnostic 15319: loop was not vectorized: novector directive used」(https://software.intel.com/en-us/articles/cdiag15319) の日本語参考訳です。
このベクトル診断メッセージは、インテル® C++ コンパイラー 15.0 以降で生成されます。
原因:
このベクトル化診断メッセージは、#pragma novector
が指定されているためループがベクトル化されないことを示します。
例:
void foo(double *a, int N){ int i; #pragma novector for(i=0;i<N;i++){ a[i] *= 2; } }
$ icl 15319.c /c /Qopt-report:2 /Qopt-report-phase:vec
以下の診断メッセージは、インテル® C++ コンパイラー for Windows* 19.1.0.166 (ビルド 20191121) で生成しました。
最適化レポート開始: foo(double *, int)
レポート: ベクトルの最適化 [vec]
ループの開始 D:\15319.c(4,3)
リマーク #15319: ループ はベクトル化されませんでした: novector ディレクティブが使用されています。
ループの終了
ループの開始 D:\15319.c(4,3)
<剰余>
ループの終了
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。