|
|
 |
 |
| インテル®Itanium®プロセッサ(以下、Itanium)対応コンパイラによる最適化を実施しないかぎり、テンプレートや投機実行、プレディケーション、ソフトウェア・パイプラインといったItaniumの先進的なメカニズムは「宝の持ち腐れ」となる。またHP
Cコンパイラのプロファイル・ベース最適化(BPO)を使えば、アプリケーションを実際に動作させて計測したプロファイリング・データによる最適化により、さらなる性能向上が可能だ。ここでは「HP
Cコンパイラ」における最適化オプションの機能と使い方を説明する。また、HP-UX/ItaniumでのC/C++開発で有用となるデバッガやIDE(Integrated
Development Environment)、パフォーマンス・チューニング・ツールを紹介する。 |
|
 |
 |
 |
 |
| Itaniumの「底力」を引き出すHPのコンパイラ技術・後編 |
|
 |
 |
 |
 |
| 2005年4月 |
| テクニカルライター 吉川和巳 |
 |
|
 |
前編で示したように、Itaniumに備わる数々の先進的なメカニズムがその能力を発揮するには、Itanium対応コンパイラによる強力なサポートが不可欠となる。周知のとおり、ItaniumはHPとインテルの長年の共同作業により生み出されたプロセッサーであり、Itanium対応コンパイラ設計のノウハウではHPが突出している。そこで以下、HPが提供するItanium対応コンパイラ「HP
Cコンパイラ」における最適化オプションの機能と使い方を紹介したい。
なおHPでは、HP Cコンパイラに加えて、C++言語に対応した「HP aC++コンパイラ」を提供している。これらはいずれも同じバックエンドを使用しており、以下に説明する最適化オプションもほぼ共通して使用できる。図1は、HP-UX/Itaniumで利用できるおもなC/C++開発ツールの一覧である。
|
| |
| 図1:HP-UX/Itaniumで利用できるおもなC/C++開発ツール |
|
| |
さて、HP Cコンパイラでは、おもな最適化オプションとして以下の5つを提供している。
- +O0
- +O1(デフォルト)
- +O2(-O)
- +O3
- +O4
|
 |
このオプションは、最適化をまったく実施せず、さらに1クロックに1命令ずつ実行するオプションである。そのため、バンドル内の空いた命令スロットにはnop(処理なし)が挿入される。マシンコード・レベルのデバッグのための特殊なオプションであり、基本的には使用しない。 |
 |
HP Cコンパイラで最適化オプションを指定しない場合のデフォルトは、この+O1オプションに相当する(PA-RISCプロセッサーでのデフォルトは+O0)。この場合、一般的なコンパイラと同様の最適化(共通部分式や不到達部分の削除、レジスタ割付)に加えて、Itaniumのテンプレートによる命令スケジューリングが実施される。 |
 |
+O2オプション(-Oオプションはこれに相当)は、+O1の最適化に加えて、前編で説明したようなItanium固有のアーキテクチャをフルに活用する最適化を実施する。投機実行やプレディケーションをはじめ、Itaniumのもうひとつの特徴であるソフトウェア・パイプラインも利用可能になる。また個々の関数の中でコード移動などの最適化を適用する。
 |
| |
Itaniumのソフトウェア・パイプライン
ソフトウェア・パイプラインとは、ループ内に時間のかかる命令(ロードや浮動小数点演算など)があるとき、その完了をまたずにループを次に進めてしまう最適化技法である。例えばループの1回目を開始した直後に、2回目や3回目も次々と開始する。もちろん、これらすべてが同じレジスタを使ったのでは処理が滞る。そこでItaniumでは、レジスタ・ローテーションと呼ばれる、ループの繰り返しごとにレジスタ名をずらすメカニズムを実装している(例えばr32はr33、r34…と変化していく)。またループが停止条件を満たすとプレディケート・レジスタに0がセットされ、余分に実行された結果は破棄される。このようにソフトウェア・パイプラインは、128本というItaniumの大量のレジスタを活かした「ソフトウェアによるパイプライン処理」であり、場合によってはケタ違いの高速化が可能になる。
|
|
 |
|
 |
+O3オプションは、ソース・ファイル全体を対象とした最適化を実施するオプションだ。例えば、同じファイル内にある関数のインライン展開や、高レベルのループ再構成などを行う。 |
 |
+O4オプションは、最適化の対象範囲をさらに広げ、アプリケーション・プログラム全体に及ぶ最適化をリンク時に実行する。ただし大規模アプリケーションの場合、かなり大きなメモリ領域と長いコンパイル時間を必要とする場合がある。 |
 |
これらのうち、+O1オプションは他のオプションに比べてコンパイルを高速に実行できる。よって、開発やデバッグ中はこのオプションの指定(つまり最適化オプションを指定しない状態)で十分だろう。もっとも、以前のコンパイラ製品とは異なり、HP
Cコンパイラでは+O2以上のオプションを指定してもデバッグ作業に支障をきたすことはない。
一方、プロダクション環境で利用するコードであれば、最低でも+O2オプション(-Oオプション)を付加しておくべきである。また、パフォーマンスが重要な意味を持つパッケージ・ソフトウェア製品や数値計算プログラムであれば、+O3や+O4の利用をお勧めする。
続いては、これらの最適化オプションの能力をさらに向上させる「プロファイル・ベース最適化」について説明しよう。 |
| 本ページの内容は執筆時の情報に基づいており、異なる場合があります。 |
|