ベクトル化レポートの行番号とソースの行番号の関連付け

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

この記事は、インテル® デベロッパー・ゾーンに掲載されている「How to Correlate vec-report Line Numbers with Source Line Numbers」(http://software.intel.com/en-us/articles/how-to-correlate-vec-report-line-numbers-with-source-line-numbers) の日本語参考訳です。


ここでは、ベクトル化レポートの行番号とソースの行番号の関連付けに関するヒントを示すサンプルを紹介します。このサンプルは C ですが、 Fortran にも適用できます。また、このサンプルは、インテル® Xeon® プロセッサー向けインテル® コンパイラーおよびインテル® Xeon Phi™ コプロセッサー向けインテル® コンパイラーの両方で使用できます。

% cat -n t1.c

     1  #include 
     2
     3  void foo1(float *a, float *b, float *c, int n)
     4  {
     5    int i;
     6    for (i=0; i < n; i++) {
     7      a[i] *= b[i] + c[i];
     8    }
     9  }
    10
    11  void foo2(float *a, float *b, float *c, int n)
    12  {
    13    int i;
    14    for (i=0; i < n; i++) {
    15      a[i] *= b[i] - c[i];
    16    }
    17  }
    18
    19  void composite(float *a, float *b, float *c, int n)
    20  {
    21    if (n > 1000) {
    22      foo1(a, b, c, n);
    23    }
    24    else {
    25      foo2(a, b, c, n);
    26    }
    27  }

% icc -mmic -vec-report2 t1.c -c
t1.c(6): (col. 5) remark: ループがベクトル化されました。.
t1.c(6): (col. 5) remark: ループはスキップされました: 複数のバージョンがあります。.
t1.c(14): (col. 5) remark: ループがベクトル化されました。.
t1.c(14): (col. 5) remark: ループはスキップされました: 複数のバージョンがあります。.
t1.c(22): (col. 6) remark: ループがベクトル化されました。.
t1.c(22): (col. 6) remark: ループはスキップされました: 複数のバージョンがあります。.
t1.c(25): (col. 7) remark: ループがベクトル化されました。.
t1.c(25): (col. 7) remark: ループはスキップされました: 複数のバージョンがあります。.

  • 上記のソースファイルには 3 つの関数が含まれており、関数がコンパイルされる (および実行ファイルに含まれる) 順序はコンパイラーのヒューリスティックに基づきます。

  • 関数はコンパイラーによってインライン展開されます。インライン展開されたループが最適化 (ベクトル化) される方法は、関数内部のオリジナルのループが最適化 (ベクトル化) される方法と異なることがあります。インライン展開の動作は、コンパイラー・オプションに基づいて変わることもあります。単一ファイルベースのインライン展開による最適化は、-O2 (デフォルト) で有効になることに注意してください。複数ファイルにわたるインライン展開を行うには、-ipo オプションを指定します。

  • 場合によっては、インライン展開の後、コンパイラーはオリジナルの関数の本体を残す必要がないと判断し、不要コードを排除することがあります。

  • 上記のコンパイルでは、ループがベクトル化されたというメッセージが 4 つ出力されています。対応する行は、6 行目 (foo1 の内部ループ、異なる行から foo1 への呼び出しがある可能性があります)、14 行目 (foo2 の内部ループ、異なる行から foo2 への呼び出しがある可能性があります)、22 行目 (foo1 への呼び出しがインライン展開されています)、25 行目 (foo2 への呼び出しがインライン展開されています) です。

  • パフォーマンス解析を行う際に、ランタイムに実行されるループのバージョンを理解することが重要です。例えば、上記の関数 composite が hotspot の場合、(ベクトル化に) 最も重要な行は、インライン展開されたボディーが含まれる 22 行目と 25 行目です。

  • デフォルトでは、コンパイラーは呼び出し位置の行番号を、インライン展開された部分の内部の全ループに使用します。このため、関数 foo1 に複数のループがあると、デフォルトモードのベクトル化レポートではすべてのループが (インライン展開後の) 行番号 22 と表示されます。
  • メッセージのレポートに呼び出し先の行番号を使用するには、”-debug inline-debug-info” オプションを追加します。このオプションを指定すると、ベクトル化レポートは以下のように変わります。
% icc -mmic -vec-report2 t1.c -c -debug inline-debug-info -O2
t1.c(6): (col. 5) remark: ループがベクトル化されました。.
t1.c(6): (col. 5) remark: ループはスキップされました: 複数のバージョンがあります。.
t1.c(14): (col. 5) remark: ループがベクトル化されました。.
t1.c(14): (col. 5) remark: ループはスキップされました: 複数のバージョンがあります。.
t1.c(6): (col. 5) remark: ループがベクトル化されました。.
t1.c(6): (col. 5) remark: ループはスキップされました: 複数のバージョンがあります。.
t1.c(14): (col. 5) remark: ループがベクトル化されました。.
t1.c(14): (col. 5) remark: ループはスキップされました: 複数のバージョンがあります。.
  • -debug オプションはデフォルトで -O0 を適用するため、上記の最初のコンパイルと同じ最適化レベルにするには、コマンドラインに -O2 を明示的に指定する必要があることに注意してください。

  • インライン展開されたループの行番号は、呼び出し先内部のループの実際の行番号である 6 行目と 14 行目に変更されます。
  • “-opt-report-phase hlo -opt-report 3” オプションを追加すると、関数ごとにループの最適化の詳細情報を取得することができます。このオプションにより、関数に対応する最適化レポートに直接ジャンプして (各関数は下記の詳細レポートの固有ヘッダーで特定) 関数内部のすべてのループのベクトル化レポートを確認できるため、関数の hotspot の解析がより簡単になります。

%  icc -mmic -vec-report2 t1.c -c -O2 -opt-report-phase hlo -opt-report 3

HLO レポート記録開始 Wed Mar  6 16:52:52 2013

< t1.c;-1:-1;hlo;foo1;0 >
高レベル・オプティマイザー・レポート (foo1)
QLOOPS 1/1/0	ENODE ループ 1 不明 0 multi_exit_do 0 do 1 linear_do 1 lite_throttled 0
線形 HLO 式: 12 / 12
------------------------------------------------------------------------------
t1.c(6): (col. 5) remark: ループがベクトル化されました。.
t1.c(6): (col. 5) remark: ループはスキップされました: 複数のバージョンがあります。.
ループで in foo1 がプリフェッチされた行の総数 (行 6=12)
   ループの初期値プリフェッチ in foo1 の数 (行 6=6)
   ループの dynamic_mapped_array プリフェッチ in foo1 の数 (行 6=12、dist=8)
ループで in foo1 がプリフェッチされた行の総数 (行 6=12)
   ループの初期値プリフェッチ in foo1 の数 (行 6=6)
   ループの dynamic_mapped_array プリフェッチ in foo1 の数 (行 6=12、dist=8)
ループで in foo1 がプリフェッチされた行の総数 (行 6=6)
   ループの初期値プリフェッチ in foo1 の数 (行 6=6)
   ループの dynamic_mapped_array プリフェッチ in foo1 の数 (行 6=6、dist=16)
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 7

ループ・デュアルパス・レポート:

< t1.c;6:6;hlo;foo1;0 >
6 のループ -- マルチバージョン用に選択されました - DD

< t1.c;-1:-1;hlo;foo2;0 >
高レベル・オプティマイザー・レポート (foo2)
QLOOPS 1/1/0	ENODE ループ 1 不明 0 multi_exit_do 0 do 1 linear_do 1 lite_throttled 0
線形 HLO 式: 12 / 12
------------------------------------------------------------------------------
t1.c(14): (col. 5) remark: ループがベクトル化されました。.
t1.c(14): (col. 5) remark: ループはスキップされました: 複数のバージョンがあります。.
ループで in foo2 がプリフェッチされた行の総数 (行 14=12)
   ループの初期値プリフェッチ in foo2 の数 (行 14=6)
   ループの dynamic_mapped_array プリフェッチ in foo2 の数 (行 14=12、dist=8)
ループで in foo2 がプリフェッチされた行の総数 (行 14=12)
   ループの初期値プリフェッチ in foo2 の数 (行 14=6)
   ループの dynamic_mapped_array プリフェッチ in foo2 の数 (行 14=12、dist=8)
ループで in foo2 がプリフェッチされた行の総数 (行 14=6)
   ループの初期値プリフェッチ in foo2 の数 (行 14=6)
   ループの dynamic_mapped_array プリフェッチ in foo2 の数 (行 14=6、dist=16)
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 15

ループ・デュアルパス・レポート:

< t1.c;14:14;hlo;foo2;0 >
14 のループ -- マルチバージョン用に選択されました - DD

< t1.c;-1:-1;hlo;composite;0 >
高レベル・オプティマイザー・レポート (composite)
QLOOPS 2/2/0	ENODE ループ 2 不明 0 multi_exit_do 0 do 2 linear_do 2 lite_throttled 0
線形 HLO 式: 24 / 24
------------------------------------------------------------------------------
t1.c(22): (col. 6) remark: ループがベクトル化されました。.
t1.c(22): (col. 6) remark: ループはスキップされました: 複数のバージョンがあります。.
t1.c(25): (col. 7) remark: ループがベクトル化されました。.
t1.c(25): (col. 7) remark: ループはスキップされました: 複数のバージョンがあります。.
ループで in composite がプリフェッチされた行の総数 (行 22=12)
   ループの初期値プリフェッチ in composite の数 (行 22=6)
   ループの dynamic_mapped_array プリフェッチ in composite の数 (行 22=12、dist=8)
ループで in composite がプリフェッチされた行の総数 (行 22=12)
   ループの初期値プリフェッチ in composite の数 (行 22=6)
   ループの dynamic_mapped_array プリフェッチ in composite の数 (行 22=12、dist=8)
ループで in composite がプリフェッチされた行の総数 (行 22=6)
   ループの初期値プリフェッチ in composite の数 (行 22=6)
   ループの dynamic_mapped_array プリフェッチ in composite の数 (行 22=6、dist=16)
ループで in composite がプリフェッチされた行の総数 (行 25=12)
   ループの初期値プリフェッチ in composite の数 (行 25=6)
   ループの dynamic_mapped_array プリフェッチ in composite の数 (行 25=12、dist=8)
ループで in composite がプリフェッチされた行の総数 (行 25=12)
   ループの初期値プリフェッチ in composite の数 (行 25=6)
   ループの dynamic_mapped_array プリフェッチ in composite の数 (行 25=12、dist=8)
ループで in composite がプリフェッチされた行の総数 (行 25=6)
   ループの初期値プリフェッチ in composite の数 (行 25=6)
   ループの dynamic_mapped_array プリフェッチ in composite の数 (行 25=6、dist=16)
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 25

ループ・デュアルパス・レポート:

< t1.c;22:22;hlo;composite;0 >
22 のループ -- マルチバージョン用に選択されました - DD

< t1.c;25:25;hlo;composite;0 >
25 のループ -- マルチバージョン用に選択されました - DD

[訳者注: Update3 日本語版の時点では、メッセージが上記のように一部英語で出力されます。

Using second-level distance [n] for prefetching dyn-map memory reference in stmt at line [x]

(参考訳) セカンドレベルの距離 [n] を使用して行 [x]、stmt のダイナミック・マップ・メモリー参照をプリフェッチ]

  • 通常、コンパイラーは関数内部のループを先頭から順に処理しますが、この動作は保証されていません。コンパイラーは制御フローグラフに基づいてコードを再配置する最適化を行うことがあります。また、非シーケンシャルな方法でループを処理することもあります。しかし、-vec-report2 または -vec-report3 を使用すると、ループのインスタンスごとに 1 つのベクトル化メッセージが出力されるようになります。

  • OpenMP* (-openmp) および自動並列化 (-parallel) を使用すると、コンパイラーはより多くのループのバージョンを生成するため、各行でより多くのベクトル化メッセージが出力されます。次に例を示します。

%  icc -mmic -vec-report2 -par-report2 t1.c -c -O2 -parallel -par-threshold0 -opt-report-phase hlo -opt-report 3 procedure: foo1

HLO レポート記録開始 Wed Mar  6 16:53:02 2013

< t1.c;-1:-1;hlo;foo1;0 >
高レベル・オプティマイザー・レポート (foo1)
QLOOPS 1/1/0	ENODE ループ 1 不明 0 multi_exit_do 0 do 1 linear_do 1 lite_throttled 0
線形 HLO 式: 12 / 12
------------------------------------------------------------------------------
t1.c(6): (col. 5) remark: ループが自動並列化されました。.
t1.c(6): (col. 5) remark: ループは並列化されませんでした: 並列依存関係が存在しています。.
t1.c(6): (col. 5) remark: ループがベクトル化されました。.
t1.c(6): (col. 5) remark: ループはスキップされました: 複数のバージョンがあります。.
t1.c(6): (col. 5) remark: ループがベクトル化されました。.
ループで in foo1 がプリフェッチされた行の総数 (行 6=12)
   ループの初期値プリフェッチ in foo1 の数 (行 6=6)
   ループの dynamic_mapped_array プリフェッチ in foo1 の数 (行 6=12、dist=8)
ループで in foo1 がプリフェッチされた行の総数 (行 6=12)
   ループの初期値プリフェッチ in foo1 の数 (行 6=6)
   ループの dynamic_mapped_array プリフェッチ in foo1 の数 (行 6=12、dist=8)
ループで in foo1 がプリフェッチされた行の総数 (行 6=6)
   ループの初期値プリフェッチ in foo1 の数 (行 6=6)
   ループの dynamic_mapped_array プリフェッチ in foo1 の数 (行 6=6、dist=16)
ループで in foo1 がプリフェッチされた行の総数 (行 6=12)
   ループの初期値プリフェッチ in foo1 の数 (行 6=6)
   ループの dynamic_mapped_array プリフェッチ in foo1 の数 (行 6=12、dist=8)
ループで in foo1 がプリフェッチされた行の総数 (行 6=12)
   ループの初期値プリフェッチ in foo1 の数 (行 6=6)
   ループの dynamic_mapped_array プリフェッチ in foo1 の数 (行 6=12、dist=8)
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 7

ループ・デュアルパス・レポート:

< t1.c;6:6;hlo;foo1;0 >
6 のループ -- マルチバージョン用に選択されました - DD
   procedure: foo2

< t1.c;-1:-1;hlo;foo2;0 >
高レベル・オプティマイザー・レポート (foo2)
QLOOPS 1/1/0	ENODE ループ 1 不明 0 multi_exit_do 0 do 1 linear_do 1 lite_throttled 0
線形 HLO 式: 12 / 12
------------------------------------------------------------------------------
t1.c(14): (col. 5) remark: ループが自動並列化されました。.
t1.c(14): (col. 5) remark: ループは並列化されませんでした: 並列依存関係が存在しています。.
t1.c(14): (col. 5) remark: ループがベクトル化されました。.
t1.c(14): (col. 5) remark: ループはスキップされました: 複数のバージョンがあります。.
t1.c(14): (col. 5) remark: ループがベクトル化されました。.
ループで in foo2 がプリフェッチされた行の総数 (行 14=12)
   ループの初期値プリフェッチ in foo2 の数 (行 14=6)
   ループの dynamic_mapped_array プリフェッチ in foo2 の数 (行 14=12、dist=8)
ループで in foo2 がプリフェッチされた行の総数 (行 14=12)
   ループの初期値プリフェッチ in foo2 の数 (行 14=6)
   ループの dynamic_mapped_array プリフェッチ in foo2 の数 (行 14=12、dist=8)
ループで in foo2 がプリフェッチされた行の総数 (行 14=6)
   ループの初期値プリフェッチ in foo2 の数 (行 14=6)
   ループの dynamic_mapped_array プリフェッチ in foo2 の数 (行 14=6、dist=16)
ループで in foo2 がプリフェッチされた行の総数 (行 14=12)
   ループの初期値プリフェッチ in foo2 の数 (行 14=6)
   ループの dynamic_mapped_array プリフェッチ in foo2 の数 (行 14=12、dist=8)
ループで in foo2 がプリフェッチされた行の総数 (行 14=12)
   ループの初期値プリフェッチ in foo2 の数 (行 14=6)
   ループの dynamic_mapped_array プリフェッチ in foo2 の数 (行 14=12、dist=8)
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 15

ループ・デュアルパス・レポート:

< t1.c;14:14;hlo;foo2;0 >
14 のループ -- マルチバージョン用に選択されました - DD
   procedure: composite

< t1.c;-1:-1;hlo;composite;0 >
高レベル・オプティマイザー・レポート (composite)
QLOOPS 2/2/0	ENODE ループ 2 不明 0 multi_exit_do 0 do 2 linear_do 2 lite_throttled 0
線形 HLO 式: 24 / 24
------------------------------------------------------------------------------
t1.c(22): (col. 6) remark: ループが自動並列化されました。.
t1.c(22): (col. 6) remark: ループは並列化されませんでした: 並列依存関係が存在しています。.
t1.c(25): (col. 7) remark: ループが自動並列化されました。.
t1.c(25): (col. 7) remark: ループは並列化されませんでした: 並列依存関係が存在しています。.
t1.c(22): (col. 6) remark: ループがベクトル化されました。.
t1.c(22): (col. 6) remark: ループはスキップされました: 複数のバージョンがあります。.
t1.c(25): (col. 7) remark: ループがベクトル化されました。.
t1.c(25): (col. 7) remark: ループはスキップされました: 複数のバージョンがあります。.
t1.c(22): (col. 6) remark: ループがベクトル化されました。.
t1.c(25): (col. 7) remark: ループがベクトル化されました。.
ループで in composite がプリフェッチされた行の総数 (行 22=12)
   ループの初期値プリフェッチ in composite の数 (行 22=6)
   ループの dynamic_mapped_array プリフェッチ in composite の数 (行 22=12、dist=8)
ループで in composite がプリフェッチされた行の総数 (行 22=12)
   ループの初期値プリフェッチ in composite の数 (行 22=6)
   ループの dynamic_mapped_array プリフェッチ in composite の数 (行 22=12、dist=8)
ループで in composite がプリフェッチされた行の総数 (行 22=6)
   ループの初期値プリフェッチ in composite の数 (行 22=6)
   ループの dynamic_mapped_array プリフェッチ in composite の数 (行 22=6、dist=16)
ループで in composite がプリフェッチされた行の総数 (行 25=12)
   ループの初期値プリフェッチ in composite の数 (行 25=6)
   ループの dynamic_mapped_array プリフェッチ in composite の数 (行 25=12、dist=8)
ループで in composite がプリフェッチされた行の総数 (行 25=12)
   ループの初期値プリフェッチ in composite の数 (行 25=6)
   ループの dynamic_mapped_array プリフェッチ in composite の数 (行 25=12、dist=8)
ループで in composite がプリフェッチされた行の総数 (行 25=6)
   ループの初期値プリフェッチ in composite の数 (行 25=6)
   ループの dynamic_mapped_array プリフェッチ in composite の数 (行 25=6、dist=16)
ループで in composite がプリフェッチされた行の総数 (行 22=12)
   ループの初期値プリフェッチ in composite の数 (行 22=6)
   ループの dynamic_mapped_array プリフェッチ in composite の数 (行 22=12、dist=8)
ループで in composite がプリフェッチされた行の総数 (行 22=12)
   ループの初期値プリフェッチ in composite の数 (行 22=6)
   ループの dynamic_mapped_array プリフェッチ in composite の数 (行 22=12、dist=8)
ループで in composite がプリフェッチされた行の総数 (行 25=12)
   ループの初期値プリフェッチ in composite の数 (行 25=6)
   ループの dynamic_mapped_array プリフェッチ in composite の数 (行 25=12、dist=8)
ループで in composite がプリフェッチされた行の総数 (行 25=12)
   ループの初期値プリフェッチ in composite の数 (行 25=6)
   ループの dynamic_mapped_array プリフェッチ in composite の数 (行 25=12、dist=8)
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 8 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 22
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25
Using second-level distance 4 for prefetching dyn-map memory reference in stmt at line 25

ループ・デュアルパス・レポート:

< t1.c;22:22;hlo;composite;0 >
22 のループ -- マルチバージョン用に選択されました - DD

< t1.c;25:25;hlo;composite;0 >
25 のループ -- マルチバージョン用に選択されました - DD

上記の説明は (サンプルは C ですが) Fortran の行番号にも同様に当てはまります。

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

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