単純なコンパイルとは、ソース・コードを実行可能ファイルまたは共有オブジェクトへ変換することです。 最適化変換とは、アプリケーションの実行時のパフォーマンス全体を向上させる変換です。 XL C/C++ は、PowerPC アーキテクチャーに合わせて調整された変換を 最適化するポートフォリオを提供します。 このような変換では、以下を行うことができます。
これらの目的は、アプリケーションの実行速度を速くすることです。
コードの変換に影響する使用可能な制御を理解し、優れたコードを記述すれば、 比較的少ない開発努力で、パフォーマンスを大きく改善することができます。 OpenMP などのプログラミング・モデルを使用することにより、 パフォーマンスの高いコードを記述できます。 本節では、ランタイム・パフォーマンス、手動でコーディングしたマクロ最適化、一般的な読み易さ、 およびソース・コードの全体的な移植性という点に関して、相反するこれらのバランスを取るために、 コンパイラーが実行できる最適化の一部について説明します。
この説明では、ユーザーがプロファイラーを使用して、最適化が適切であると思われるコードの領域を 識別したと仮定しています。
最適化は、アプリケーション開発サイクルの後半のフェーズ (例えば製品リリース・ビルドなど) でよく試行されます。 可能であれば、コードを最適化する前に、まず最適化しない状態でコードをテストおよびデバッグしてください。 最適化とは、プログラムに最も効率的なアルゴリズムを選択し、 それらを正しくインプリメントすることです。 言語標準へ準拠しているかどうかは、コードを正常に最適化できる度合いに直接大きく関係します。 最適化プログラムは、最終的な規格合致試験です。
最適化は、コンパイラー・オプション、ディレクティブ、およびプラグマによって制御されます。 ただし、コンパイラー・フレンドリー・プログラミングの技法が、オプションやディレクティブと同様に、 パフォーマンスに対して有益です。 コードを手動で最適化する (例えば手動でループをアンロールする) ことは不要であり、過度に行うことはお勧めできません。 異常な構成によって、コンパイラー (およびその他のプログラマー) に混乱を招き、アプリケーションを 新しいマシン用に最適化する作業が困難になる場合があります。
最適化は必ずしもすべてのアプリケーションに有益であるとは限りません。 デバッグ機能の削減に伴うコンパイル時間の増加と、コンパイラーによって行われる最適化の度合いは、 相反する関係にあると言えます。
関連参照
次のテーブルは、プログラム・パフォーマンスを最適化するための基本コンパイラー・オプションの選択を示しています。
完全なリストについては、「XL C/C++ プログラミング・ガイド」を参照してください。
使用可能なサブオプションの資料については、「XL C/C++ コンパイラー・リファレンス」を参照するか、またはオプションのマニュアル・ページを参照してください。
オプション | 説明 |
---|---|
-qnoopt | コンパイラーは極めて限られた最適化を実行します。これがデフォルトです。アプリケーションを最適化し始める前に、-qnoopt と正しくコンパイルしているか確認してください。 |
-O2 | コンパイラーは包括的な低レベルの最適化を実行しますが、これにはグラ フ・カラーリング、共通副次式の除去、不要コードの除去、 代数の単純化、定数伝搬、ターゲット・マシンの命令スケジューリング、ループのアンロール、およびソフトウェアのパイプラインを含みます。 |
-qarch -qtune -qcache | コンパイラーは、特定のハードウェアおよびアプリケーションが稼働する命令セットの特性を利用します。 -qarch を使用して、アプリケーション・コードを生成する対象のプロセッサー・アーキテクチャーのファミリーを指定します。 -qtune を使用して、最適化の対象を特定のマイクロプロセッサー上での実行に偏らせます。 -qcache を使用して、特定のキャッシュまたはメモリー形状を定義します。 |
-qpdf1 -qpdf2 | -O 以上の最適化レベルで指定したとき、コンパイラーは、 プロファイル主導のフィードバックを使用して、異なるコード・セクションが一般に実行される頻度についての分析 を基にしてアプリケーションを最適化します。PDF プロセスは、非構造の分岐を含むアプリケーションに最も役立ちます。 |
-O3 | コンパイラーは、-O2 で、より積極的な最適化を実行します。ループのアンロールが深いほど、 ループのスケジューリングが良く、暗黙のメモリー使用に関する限度を除去します。 |
-qhot | コンパイラーが高位の変換を実行し、さらなるループ最適化を提供し、選択的に配列埋め込みを実行します。このオプションは、 大容量の数値処理を実行する科学計算アプリケーションに最も役立ちます。 |
-qipa | コンパイラーはプロシージャー間分析を実行し、アプリケーション全体を単位として最適化します (プログラム全体の分析)。 このオプションは、頻繁に使用される大量のルーチンを含むビジネス・アプリケーションに最も役立ちます。 また、高レベルの抽出をする C++ プログラムにも役立ちます。多くの場合、このオプションはコンパイル時間を大幅に増加させます。 |
-O4 | これは、-O3 -qipa -qhot -qarch=auto -qtune=auto -qcache=auto と同等です。コンパイルに時間がかかりすぎる場合、 -O4 -qnoipa でコンパイルを試行してください。 |
-O5 | これは、-O4 -qipa=level=2 と同等です。Linux プラットフォームでは、プロセッサーが PowerPC 970 で、AltiVec データ型がオペレーティング・システムによって サポートされている場合、このオプションは -qhot=vector -qhot=simd もオンにします。 |