コンパイル時にコードを最適化するかどうかを指定し、最適化する場合は、最適化レベルを指定します。
.-nooptimize-------------. >>-+- -q--+-optimize--+----------+-+-+------------------------->< | '-=--+-0-+-' | | +-2-+ | | +-3-+ | | +-4-+ | | '-5-' | +- -O0----------------------------+ +- -O-----------------------------+ +- -O2----------------------------+ +- -O3----------------------------+ +- -O4----------------------------+ '- -O5----------------------------'
ここで、最適化の設定は以下のとおりです。
-O0
-qNOOPTimize -qOPTimize=0 | 定数の折り込みおよびローカルな共通部分副次式の除去などの、高速でローカルな最適化のみを実行します。
この設定は、-qnostrict_induction を明示的に指定していない限り、 -qstrict_induction を暗黙指定します。 |
-O
-qOPTimize | コンパイル速度と実行時のパフォーマンスに最適な組み合わせであるとコンパイラー開発者が考えた最適化を実行します。最適化は、製品のリリースによって異なる場合があります。特定のレベルの最適化が必要な場合は、適切な数値を指定してください。
この設定は、-qnostrict_induction または -qnostrict によって明示的に否定されない限り、-qstrict と -qstrict_induction を暗黙指定します。 |
-O2
-qOPTimize=2 | -O と同じ。 |
-O3
-qOPTimize=3 | メモリー、コンパイル時間、またはこれら両方を大量に消費する追加の最適化を実行します。このレベルは、コンパイル・リソースの最小化よりも実行時の向上を図りたい場合に有効です。
-O3 は -O2 レベルの最適化に適用しますが、時間およびメモリーが無制限です。-O3 はまた、プログラムのセマンティクスを多少変更する可能性がある、より積極的な最適化を実行します。コンパイラーは、-O2 ではこれらの最適化を実行しません。
-O3 を指定して -qstrict オプションを使用し、プログラムのセマンティクスを変更する可能性がある積極的な最適化をオフにしてください。 -qstrict を -O3 とともに指定すると、 -O2 で実行されるすべての最適化に加えて、さらにループの最適化も行われます。-qstrict コンパイラー・オプションは、-O3 オプションの後に指定しないと無視されます。 |
-O3
-qOPTimize=3 (続き) | -O3 を指定したときに実行される積極的な最適化は、以下のとおりです。
|
-O3 -qOPTimize=3 (続き) |
注
|
-O4
-qOPTimize=4 | このオプションは
-O3 と同じですが、以下の点が異なります。
注: -O、-qcache、 -qhot、-qipa、-qarch、および -qtune オプションを後で設定すると、 -O4 オプションで暗黙指定された設定がオーバーライドされます。 |
-O5
-qOPTimize=5 | このオプションは
-O4 と同じですが、以下の点が異なります。
注: -O、-qcache、 -qipa、-qarch、および -qtune オプションを後で設定すると、 -O5 オプションによって暗黙指定された設定がオーバーライドされます。 |
-qoptimize... は、-qopt... に省略できます。例えば、-qnoopt は -qnooptimize と同等です。
最適化のレベルを上げても、追加の分析によって最適化の機会がさらに検出されるかどうかに応じて、さらにパフォーマンスが向上する場合と向上しない場合があります。
最適化を伴うコンパイルでは、他のコンパイルよりも多くの時間およびマシンのリソースが必要になる場合があります。
最適化によってステートメントが移動または削除される場合があるため、通常は、デバッグ・プログラムのための -g フラグと一緒に最適化を指定しないでください。作成されるデバッグ情報が正確でなくなる場合があります。
myprogram.C をコンパイルして最大限に最適化させるには、以下を入力します。
xlc++ myprogram.C -O3
関連参照