高レベルな最適化 (HLO) の概要

高レベルな最適化 (HLO) とは、高水準プログラミング言語で開発されたアプリケーションに含まれているソースコード上の特性 (ループや配列など) を利用した最適化手法です。HLO では、ループ変換の手法に次のものがあります。

デフォルトの最適化レベル、-O2 (Linux* OS および Mac OS* X) オプションまたは /O2 (Windows* OS) オプションでもいくつかの高レベルの最適化 (データ・プリフェッチやアンロールなど) が行われますが、-O3 (Linux および Mac OS X) または /O3 (Windows) を指定すると、メモリーアクセスを最適化するループ変換を実行する機会が得られます。これらのオプションで有効になる最適化は IA-32 アーキテクチャー、インテル® 64 アーキテクチャー、IA-64 アーキテクチャーで異なります。

IA-32 アーキテクチャーとインテル® 64 アーキテクチャーのアプリケーション

ベクトル化オプション -ax および -x (Linux および Mac OS X)、/Qax および /Qx (Windows) と -O3 オプション (Linux および Mac OS X)、/O3 オプション (Windows) を組み合わせて指定すると、-O2 (Linux および Mac OS X)、/O2 (Windows) よりも詳細にデータの依存性を解析します。

プロセッサーで利用できるプリフェッチのサポートのため、コンパイラーのプリフェッチは無効にされます。

IA-32 アーキテクチャーと IA-64 アーキテクチャーのアプリケーション

-O3 オプション (Linux および Mac OS X)、/O3 オプション (Windows) は、-O2 オプション (Linux および Mac OS X)、/O2 オプション (Windows) を有効にして、さらに強力な最適化 (ループ変換など) を追加します。O3 は、速度が最大になるように最適化を行いますが、パフォーマンスが向上しないプログラムもあります。

IA-64 アーキテクチャーのアプリケーション

-ivdep-parallel (Linux) オプションまたは /Qivdep-parallel (Windows) オプションは、IVDEP 宣言子が指定されたループにループ伝播の依存がないことを示唆します。(この手法は、スパース・マトリクス・アプリケーションに役立ちます。)

次のステップに従って IA-64 アーキテクチャー向けアプリケーションをチューニングします。


  1. -O3 (Linux)、/O3 (Windows) と -ipo (Linux)、/Qipo (Windows) を使用してプログラムをコンパイルします。可能な限り、プロファイルに基づく最適化 (PGO) を使用します。

  2. コード内の hotspot を識別します。

  3. 高レベルな最適化レポートを生成します。

  4. ループがソフトウェア・パイプライン化されていない理由を確認します。

  5. 前の手順の結果で示された変更を行います。

  6. 期待する最適化レベルに達するまで、これらの手順を繰り返します。

一般的なアプリケーション・チューニング

一般に、次の手法で複数のアーキテクチャー向けのアプリケーションをチューニングできます。