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

同カテゴリーの次の記事

明示的なベクトル・プログラミング – 最も一般的な手法

インテル® コンパイラーの主要機能の一つに、コンパイル時にソースコードを解析して、ベクトル化、並列化、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 レポートでも共通です。

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

関連記事

  • HPL 向けアプリケーション・ノートHPL 向けアプリケーション・ノート この記事は、インテル® ソフトウェア・ネットワークに掲載されている「HPL application note」の日本語参考訳です。 ステップ 1 - 概要 このガイドは、現在 HPL を使用しているユーザーが、より優れたベンチマーク結果を得られるように、インテル® マス・カーネル・ライブラリー (インテル® MKL) の […]
  • 新しい最適化レポートを使用してインテル® コンパイラーをさらに活用する新しい最適化レポートを使用してインテル® コンパイラーをさらに活用する この記事は、インテル® デベロッパー・ゾーンに公開されている「Getting the Most out of your Intel® Compiler with the New Optimization […]
  • NUMA 向けのアプリケーションの最適化NUMA 向けのアプリケーションの最適化 この記事は、インテル® ソフトウェア・ネットワークに掲載されている「Optimizing Applications for NUMA」の日本語参考訳です。 この記事の PDF 版はこちらからご利用になれます。 概要 NUMA (Non-uniform Memory Access) […]
  • ベクトル異形関数でのプロセッサー ID 指定ベクトル異形関数でのプロセッサー ID 指定 インテル® C/C++ および Fortran コンパイラーのバージョン 16.0 以降では、プログラマーがスカラー関数に対応するベクトル関数を明示的に記述することを可能にする、ベクトル異形関数 (Vector Variant Function) をサポートしています。 Windows* および Linux* […]
  • ハイブリッド・アプリケーション: インテル® MPI ライブラリーと OpenMP*ハイブリッド・アプリケーション: インテル® MPI ライブラリーと OpenMP* この記事は、インテル® ソフトウェア・ネットワークに掲載されている「Hybrid applications: Intel MPI Library and OpenMP*」の日本語参考訳です。 MPI と OpenMP* の両方を使用するアプリケーションがありますが、インテル® MPI […]