診断 15527: 関数/ループはベクトル化されませんでした: xxxx への関数呼び出しはベクトル化できません。

同カテゴリーの次の記事

診断 15541: 外部ループは自動ベクトル化されませんでした: SIMD ディレクティブの使用を検討してください。

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


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

原因:

この診断メッセージは、関数/ループ本体がベクトル化できないほかの関数を呼び出すため、__declspec(vector) でアノテーションされたユーザー定義関数をベクトル化できない場合に出力されます。次の例では、ユーザーは foo() のベクトルバージョンを生成しようとしますが、関数 foo() はベクトル化できない omp_init_lock() を呼び出しています。

例:

#include <omp.h>
omp_lock_t x;
void bar(){
  omp_init_lock(&x);
}
__declspec(vector)
void foo(int *x, int y){
  bar();
}

$ icl 15527.c /c /O2 /Qopt-report:2 /Qopt-report-phase:vec /Qopt-report-file:stderr

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

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

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

リマーク #15527: 関数 はベクトル化されませんでした: omp_init_lock(omp_lock_t *) への関数呼び出しはベクトル化できません。
リマーク #13397: vector 関数がベクトル化されませんでした。[ D:\15527.c(7,24) ]
D:\15527.c(7): (col. 24) 警告 #13401: ベクトル関数がエミュレートされました。
===========================================================================
D:\15527.c(7): (col. 24) 警告 #13397: vector 関数がベクトル化されませんでした。

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

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

リマーク #15527: 関数 はベクトル化されませんでした: omp_init_lock(omp_lock_t *) への関数呼び出しはベクトル化できません。
リマーク #13397: vector 関数がベクトル化されませんでした。[ D:\15527.c(7,24) ]
D:\15527.c(7): (col. 24) 警告 #13401: ベクトル関数がエミュレートされました。
===========================================================================

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

関連記事