診断 15524: xxxx はベクトル化されませんでした: すべてのメモリー参照をアライメントされたベクトルロードにできなければ検索ループはベクトル化できません。

インテル® DPC++/C++ コンパイラー

この記事は、インテル® デベロッパー・ゾーンに掲載されている「Diagnostic 15524: xxxx was not vectorized: search loop cannot be vectorized unless all memory references can be aligned vector load」(https://software.intel.com/en-us/articles/cdiag15524) の日本語参考訳です。


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

原因:

検索ループのベクトル化は次のヒューリスティックに依存します: “ベクトルロード” がキャッシュラインに完全に収まり、その中に非投機的にアクセスされる要素がある場合、コンパイラーはベクトル内のほかのすべての要素 (同一キャッシュライン内) を投機的にロードしても安全です。

例:

int foo(float *a, int n){
    int i;
    for (i=0;i<n;i++){
        if (a[2*i] == 0){
        break;
        }
    }
    return i;
}

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

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

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

    レポート: ベクトルの最適化 [vec]
ループの開始 D:\15524.c(3,3)
   リマーク #15524: ループ はベクトル化されませんでした: すべてのメモリー参照をアライメントされたベクトルロードにできなければ検索ループはベクトル化できません。
ループの終了

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

タイトルとURLをコピーしました