インテル® Fortran コンパイラー 14.0 ユーザー・リファレンス・ガイド
ベクトライザーの診断情報を制御します。
-vec-report=0 |
コマンドラインでオプションを指定しない場合、デフォルトではメッセージを表示しません。ただし、ベクトライザー診断レポートが有効で n が指定されていない場合、コンパイラーはベクトル化されたループの診断を表示します。 |
このオプションは、ベクトライザーの診断情報を制御します。ベクトル化レポートは stdout に出力されます。
n を指定しない場合、1 を指定して [Q]vec-report オプションを使用するのと同じです。
このオプションが IDE で指定された場合、[Generate Build Logs (ビルドログの生成)] オプションが選択されていると、レポートはビルドログに含まれます。
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 saturation8Linux* 上で次のコマンドを使用して 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 (英語)) を参照してください。