インテル® Fortran コンパイラー 14.0 ユーザー・リファレンス・ガイド

vec-report、Qvec-report

ベクトライザーの診断情報を制御します。

構文

Linux* および OS X*:

-vec-report[=n]

Windows*:

/Qvec-report[:n]

引数

n

表示する診断情報のレベルを示す値。設定可能な値は以下のとおりです。

0

診断情報を表示しません。

1

ベクトル化されたループを表示します。

2

ベクトル化されたループとベクトル化されなかったループを表示します。

3

ベクトル化されたループとベクトル化されなかったループ、および判明した依存関係または想定される依存関係を表示します。

4

ベクトル化されなかったループを表示します。

5

ベクトル化されなかったループとその理由を表示します。

6

ベクトル化されたループとベクトル化されなかったループ、および判明した依存関係または想定される依存関係の詳細を表示します。

7

ベクトル化されたループのベクトルコード品質メッセージ ID と対応するデータ値を出力します。 メッセージには、スピードアップの予想、メモリー・アクセス・パターン、ベクトル化されたループのベクトルスタイルの数などの情報が含まれます。

デフォルト

-vec-report=0
または /Qvec-report:0

コマンドラインでオプションを指定しない場合、デフォルトではメッセージを表示しません。ただし、ベクトライザー診断レポートが有効で n が指定されていない場合、コンパイラーはベクトル化されたループの診断を表示します。

説明

このオプションは、ベクトライザーの診断情報を制御します。ベクトル化レポートは stdout に出力されます。

n を指定しない場合、1 を指定して [Q]vec-report オプションを使用するのと同じです。

このオプションが IDE で指定された場合、[Generate Build Logs (ビルドログの生成)] オプションが選択されていると、レポートはビルドログに含まれます。

IDE オプション

Windows*: [Diagnostics (診断)] > [Vectorizer Diagnostic Level (ベクトライザーの診断レベル)]

Linux*: なし

OS X*: [Diagnostics (診断)] > [Vectorizer Diagnostic Report (ベクトライザー診断レポート)]

代替オプション

なし

次の例は、Linux* システムで -vec-report を指定した場合の効果を示します。出力されるリマークはコプロセッサーにより異なります。

subroutine foo0(n, a)
    integer*4, intent(inout)          :: a(*)
    integer*4, intent(in)             :: n

    integer*4                                 i

    do i = 1, n
        if (mod(n, 2) .eq. 1) a(i) = a(i+1)
    enddo
end subroutine

subroutine foo1(n, a)
    integer*4, intent(inout)          :: a(*)
    integer*4, intent(in)               :: n

    integer*4                                 i

    do i = 1, n
        if (mod(n, 2) .eq. 1) a(i) = a(i-1)
    enddo
end subroutine

zsh/4 89 % ifort -c -simd -vec_report1 example.f90
example.f90(7): (列 5) リマーク: ループがベクトル化されました。

zsh/4 90 % ifort -c -simd -vec_report2 example.f90
example.f90(7): (列 5) リマーク: ループがベクトル化されました。
example.f90(7): (列 5) リマーク: ループはベクトル化されませんでした: 空のループはベクトル化できません。
example.f90(18): (列 5) リマーク: ループはベクトル化されませんでした: ベクトル依存関係が存在しています。
example.f90(18): (列 5) リマーク: ループはベクトル化されませんでした: 空のループはベクトル化できません。

zsh/4 91 % ifort -c -simd -vec_report3 example.f90
example.f90(7): (列 5) リマーク: ループがベクトル化されました。
example.f90(7): (列 5) リマーク: 剰余ループがベクトル化されました。
example.f90(7): (列 5) リマーク: ループはベクトル化されませんでした: 空のループはベクトル化できません。
example.f90(18): (列 5) リマーク: ループはベクトル化されませんでした: ベクトル依存関係が存在しています。
example.f90(19): (列 31) リマーク: ベクトル依存関係: FLOW の依存関係が a 行 19 と a 行 19 の間に仮定されました。
example.f90(18): (列 5) リマーク: ループはベクトル化されませんでした: 空のループはベクトル化できません。

次の satsub.f プログラムについて考えてみます。

subroutine saturation8(a, b, n)
    integer*2, allocatable, intent(inout)     :: a(:)
    integer*2, allocatable, intent(in)        :: b(:)
    integer*4, intent(in)                     :: n

    integer*4 i, aa, bb

    do i = 1, n
        aa = iand(a(i), 255)
        bb = iand(b(i), 255)
        if (aa - bb .gt. 0) then
            a(i) = aa - bb
        else
            a(i) = 0
        endif
    enddo
end subroutine saturation8

Linux* 上で次のコマンドを使用して satsub.f をコンパイルします。

ifort -c -vec-report7 satsub.f 2>&1 | vecanalysis.py --list

コンパイラーはメッセージ ID を出力します。そして、vecanalysis.py スクリプトは、そのメッセージ ID を入力値として受け取り、行番号と vec-report=7 メッセージが埋め込まれたオリジナルのソースコードを含む .txt ファイルを作成します。これらの情報を参照することで、ASM コードを解析することなく、生成されたベクトルコードの品質を理解することができます。

作成される .txt ファイルには、プログラム名に似た名前が付けられます。例えば、プログラム名が satSub.f90 の場合、テキストファイル名は satSub_f90_vr.txt になります。スクリプトを実行すると、.txt ファイルの名前を示すメッセージが表示されます。例えば、「Writing satSub_f90_vr.txt ... done」のようなメッセージが表示されます。

vecanalysis.py スクリプトの場所については、「インテル® C++/Fortran コンパイラーのベクトル化レポートを基にソースに注釈を付ける Python* スクリプト」 (http://intel.ly/XeSkW6 (英語)) を参照してください。


このヘルプトピックについてのフィードバックを送信