以下のようなコマンドを入力して、高レベルな最適化 (HLO) レポートを実行します。
プラットフォーム |
コマンド例 |
---|---|
Linux* |
icpc -opt-report -opt-report-phase hlo -O3 a.c b.c |
Windows* |
icl /Qopt-report /Qopt-report-phase hlo /O3 a.c b.c |
HLO は、各最適化の有用性および適用可能性に基づいて特定の最適化を行います。HLO が行う特定の最適化については、「ループ変換」を参照してください。
HLO レポートは、関連するすべての領域に加えて、構造体分割およびループ運搬のスカラー置換についての情報を提供します。次に、行列乗算プログラムの HLO レポートの例を示します。
例 |
---|
multiply_d_lx.c HLO REPORT LOG OPENED |
これらのレポート結果には、以下の情報が含まれています。
距離 74 のループ反復で 2 つのキャッシュラインがプリフェッチされた。プリフェッチ命令はソースコードの 15 行目に対応している。
コンパイラーは、15 行目のループで 8 回アンロールした。
手動キャッシュブロックのような手動の最適化テクニックは、通常は使用しないで、最後の手段としてのみ使用するべきです。
HLO レポートは、コンパイラーがどのループ変換を行ったかを明示的に知らせます。特定のループ変換についてレポートしないことで、開発者が行うループ変換があることを暗に示します。いくつかの変換について、次の表で説明します。
変換 |
説明 |
---|---|
分配 |
1 つの大きなループを 2 つの小さなループに分配または分割します。非常に多くのレジスターが大きなループで消費されている場合に効果的である可能性があります。 |
交換 |
2 つの入れ子しているループの実行順を交換して、キャッシュの局所性またはユニット・ストライド・アクセスのパフォーマンス上の利点を活用します。 |
融合 |
トリップカウントが同じ 2 つの小さなループを融合して、データの局所性を向上させます。 |
ブロック |
キャッシュ・ブロッキングは、キャッシュに既に存在するデータでできるだけ多くの演算を行うようにループをアレンジします。最初のブロックを使用する演算がすべて完了するまで、データの次のブロックはキャッシュに読み込まれません。 |
アンロール |
ループ構造を逆アセンブルします。アンロールは、各ループの反復を大きくすることで、必要なループの反復数を少なくして、ループ構造を部分的に逆アセンブルする方法です。命令とデータのレイテンシーを隠すため、浮動小数点ロードペア命令の利点を活用するため、またメモリー操作ごとに行われる実際の作業の比率を増やすために使用できます。 |
プリフェッチ |
データが実際に必要になる前にいくつかのループ反復で相対的に遅いメモリーからより高速なキャッシュにデータを移動するように要求します。 |
ロードペア |
メモリーから 2 つの浮動小数点データ要素を一度にロードする命令を利用します。 |
レポートの生成に使用できるオプションに関する詳細は、「最適化機構レポートの作成」を参照してください。