診断 15487: 型変換: xxxx

同カテゴリーの次の記事

診断 15535: xxxx はベクトル化されませんでした: ループに switch 文が含まれています。if-else 文の使用を検討してください。

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


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

原因:

このベクトル化診断メッセージは、レポートレベル 3 以上で生成されます。この診断メッセージは、コンパイラーがループで生成したデータ型変換の数を出力します。以下は、このメッセージを生成するコードの例です。

例:

#include<stdio.h>
#include<math.h>
#define SIZE 100
int main(){
    float a[SIZE], x;
    a[:] = __sec_implicit_index(0);
    x = __sec_reduce_all_zero(a[:] == 1 ? 0 : 1);
    printf("%fn",x);
    return 0;
}

$ icl 15487.c /c /Qopt-report:3 /Qopt-report-phase:vec /S

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

最適化レポート開始: main()
    レポート: ベクトルの最適化 [vec]
ループの開始 D:\15487.c(6,12)
   リマーク #15300: ループがベクトル化されました。
   リマーク #15449: マスクなしアライン・ユニット・ストライド・ストア: 1
   リマーク #15475: --- ベクトルのコストサマリー開始 ---
   リマーク #15476: スカラーのコスト: 4
   リマーク #15477: ベクトルのコスト: 1.000
   リマーク #15478: スピードアップの期待値: 4.000
   リマーク #15487: 型変換: 1
   リマーク #15488: --- ベクトルのコストサマリー終了 ---
ループの終了

ループの開始 D:\15487.c(7,9)
   リマーク #15300: ループがベクトル化されました。
   リマーク #15448: マスクなしアライン・ユニット・ストライド・ロード: 1
   リマーク #15475: --- ベクトルのコストサマリー開始 ---
   リマーク #15476: スカラーのコスト: 165
   リマーク #15477: ベクトルのコスト: 43.250
   リマーク #15478: スピードアップの期待値: 3.810
   リマーク #15488: --- ベクトルのコストサマリー終了 ---
ループの終了

次に示すように、コンパイラーはループで cvtdq2ps 変換命令を生成して (6 行目)、倍精度 FP を単精度 FP に変換します。

        movd      %eax, %xmm0                                   #6.5
        xorl      %eax, %eax                                    #6.12
        pshufd    $0, %xmm0, %xmm1                              #6.5
        movdqa    .L_2il0floatpacket.0(%rip), %xmm0             #6.5
                                # LOE rax rbx r12 r13 r14 r15 xmm0 xmm1
..B1.2:                         # Preds ..B1.2 ..B1.12
        cvtdq2ps  %xmm0, %xmm2                                  #6.12
        movaps    %xmm2, (%rsp,%rax,4)                          #6.5
        addq      $4, %rax                                      #6.12
        paddd     %xmm1, %xmm0                                  #6.5
        cmpq      $100, %rax                                    #6.12
        jb        ..B1.2        # Prob 99%                      #6.12

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

関連記事