インテル® 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 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 (英語)) を参照してください。