インテル® コンパイラー V15 におけるレポート機能の変更点

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

インテル® コンパイラーの主要機能の一つに、コンパイル時にソースコードを解析して、ベクトル化、並列化、OpenMP に関連するレポートを表示する機能があります。近年のプロセッサーでソフトウェアの性能を最大限に引き出すには、ベクトル化と並列化が不可欠であり、レポート機能は最適化作業に大変有効な情報をもたらします。旧バージョンのコンパイラーのレポートについては、「コンパイラー最適化入門: 第 3 回 インテル® コンパイラーのベクトル化レポートを活用する」など、いくつかの iSUS の記事で紹介されています。

旧バージョンのコンパイラーで、ベクトル化レポートを取得するには、/Qvec-report[:n] (Windows)、
-vec-report[=n] (Linux、OS X) を使用し、レポートは標準エラー出力に表示されました。

C:\ icl mul.c /c /Qvec-report2
インテル(R) 64 対応インテル(R) C++ コンパイラー XE (インテル(R) 64 対応アプリケーション用)、バージョン 
14.0.3.202 ビルド 20140422 (C) 1985-2014 Intel Corporation.  無断での引用、転載を禁じます。

C:\mul.c(7): (col. 3) remark: ループはベクトル化されませんでした: ベクトル依存関係が存在しています。
C:\mul.c(5): (col. 2) remark: ループはベクトル化されませんでした: 内部ループではありません。

バージョン 15.0 以降のインテル® C++ および Fortran コンパイラーでは、vec-report、par-report、openmp-report オプションは廃止され、以下のオプションに置き換えられます。

Windows:
/Qvec-report[:n] は、/Qopt-report[:n] /Qopt-report-phase:vec
/Qpar-report[:n] は、/Qopt-report[:n] /Qopt-report-phase:par
/Qopenmp-report[:n] は、/Qopt-report[:n] /Qopt-report-phase:openmp

Linux および Mac OS X
-vec-report[=n] は、-qopt-report[=n] -qopt-report-phase=vec
-par-report[=n] は、-qopt-report[=n] -qopt-report-phase=par
-openmp-report[=n] は、-qopt-report[=n] -qopt-report-phase=openmp

たとえば、前述の例の mul.c を旧バージョンのコンパイラーと同じオプションでコンパイルすると、次のようなメッセージが表示されます。

C:\ icl mul.c /c /Qvec-report2
Intel(R) C++ Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 15.0.0.108 Build 
20140726 Copyright (C) 1985-2014 Intel Corporation.  All rights reserved.
icl: command line remark #10010: option '/Qvec-report' is deprecated and will be removed in a future release. 
See '/help deprecated'

icl: remark #10397: optimization reports are generated in *.optrpt files in the output location

バージョン 15 のコンパイラーに、/Qvec-report (-vec-report) オプションを指定すると、/Qopt-report (-qopt-report) オプションに置き換えられ、結果は “ソースファイル名.optprt” ファイルに出力されます。ただし、/Qopt-report (-qopt-report) は、/Qvec-report (vec-report) と同一ではないため、ベクトル化レポートのみを取得するには、

C:\ icl mul.c /c /Qopt-report /Qopt-report-phase:vec 

とします。出力先が標準出力でもよい場合は、/Qopt-report-stdout を利用できます。

.optrpt ファイルに生成されるレポートは、次のようになります:

Begin optimization report for: matvec(float (*)[31], float *, float *)

    Report from: Vector optimizations [vec]

LOOP BEGIN at Z:\CodesC\vec\mul\mul.c(5,2)
   remark #15541: outer loop was not auto-vectorized: consider using SIMD directive

   LOOP BEGIN at C:\mul.c(7,3)
      remark #15344: loop was not vectorized: vector dependence prevents vectorization. First dependence is 
                     shown below. Use level 5 report for details
      remark #15346: vector dependence: assumed FLOW dependence between  line 8 and  line 8
   LOOP END

   LOOP BEGIN at Z:\CodesC\vec\mul\mul.c(7,3)
   
   LOOP END
LOOP END

上記のレポートでは、レベル 5 のレポートで詳細を取得できると提示されています。古い /Qvec-report では、引数として 1 – 7 の数字をオプションに直接渡すことができましたが、新しいオプションでは、

/Qopt-report:5 /Qopt-report-phase:vec

のように、/Qopt-report に引数を渡します。

ここでは、ベクトル化レポートのみに触れましたが、新しいレポート機能の使い方は par、openmp レポートでも共通です。

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

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