高レベルな最適化の概要

高レベルの最適化は、Fortran および C++ などの高級プログラミング言語で開発されるアプリケーション内のソースコード構造 (例えば、ループと配列) の特性を利用します。高レベルの最適化には、ループ交換、ループ融合、ループのアンロール、ループ分配、アンロール・アンド・ジャム、ブロッキング、データ・プリフェッチ、スカラ置換、データ・レイアウトの最適化およびループのアンロール手法があります。

高レベルの最適化をオンにするには、-O3 オプションを指定します。-O3 によりオンになる最適化の範囲は IA-32 および Itanium® ベースのアプリケーションで異なります。「最適化レベルの設定」を参照してください。

IA-32 および Itanium® ベース・アプリケーション

-O3 オプションは、 -O2 オプションを有効にし、またさらに強力な最適化 (例えば、ループ変換やプリフェッチ) を追加します。-O3 は、最大速度について最適化を行いますが、パフォーマンスが向上しないプログラムもあります。

IA-32 アプリケーション

ベクトル化オプション -ax{K|W|N|B|P} および -x{K|W|N|B|P}-O3 を組み合わせて指定すると、-O2 よりも詳細にデータの依存性を分析します。このため、コンパイル時間が長くなる可能性があります。

Itanium ベース・アプリケーション

-ivdep_parallel オプションは、IVDEP ディレクティブの指定したループにループキャリー依存がないことを断定します。この手法は、スパース・マトリックス・アプリケーションに役立ちます。

Itanium ベース・アプリケーションの主要なチューニング手法

Itanium ベース・システムでアプリケーションをチューニングするには、以下の手順に従います。

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

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

  3. 最適化レポートを有効にします。 

  4. ループに対するソフトウェアのパイプライン化が行われていない理由を確認します。

  1. プリフェッチが正しく設定されていることを確認します。CDEC$ prefetch を使用して、必要に応じて設定を上書きします。