04.04.2013 Views

Meet the HP Superdome servers - 日本HP (ヒューレット・パッカード) - HP

Meet the HP Superdome servers - 日本HP (ヒューレット・パッカード) - HP

Meet the HP Superdome servers - 日本HP (ヒューレット・パッカード) - HP

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

ないことを除いて、コードが ANSI エイリアス規則に準拠することを指示します。また、構造体と共用体フィールドのア<br />

ドレスは取得されないと想定されます。<br />

+O[no]ptrs_to_globals (デフォルト +Optrs_to_globals)<br />

+Optrs_to_globals を使用すると、静的に割り当てられたデータ(ファイル スコープのグローバルデータ、ファイ<br />

ル スコープの静的データ、関数スコープの静的データを含む)は、ポインタを使用して読み込み、書き込みされないと<br />

想定します。この想定の下で、ポインタの使用頻度の高いコードについて、一層積極的な最適化とスケジューリング<br />

が可能です。<br />

+Ovolatile=qualifier1[,qualifier2]*<br />

Fortran ではサポートされません<br />

volatile のすべての使用箇所に、指定した型修飾子を適用するのと同じ効果です。<br />

+O[no]cross_region_addressing(デフォルト +Onocross_region_addressing)<br />

リージョン境界をまたぐアドレッシングの使用を有効/無効にします。このオプションを有効にすると、結果として比較<br />

的保守的なアドレス計算となり、パフォーマンスが低下します。ポインタ(ポインタ配列を含む)が、そのポインタからの<br />

オフセットとしてアクセスされるデータとは異なる、別のリージョンを指す場合、有効にすることが必須です。これは、標<br />

準準拠のアプリケーションでは発生しません。これが発生するようなプログラムでは、このオプションを有効にしている<br />

場合、コンパイラは、アドレスがいつリージョン境界をまたぐかが分からないため、インクリメント後(post-incrementing)<br />

ロード/ストア命令を利用することができません。このオプションは、+DD64 ではなんの効果もありません。<br />

+[no]parmsoverlap (デフォルト +Oparmsoverlap)<br />

Fortran ではサポートされません<br />

+Onoparmsoverlap を使用すると、オプティマイザは、サブプログラムの複数の引数が参照するメモリ ロケーショ<br />

ンが重複していないことを想定します。この想定の下で、ポインタの使用頻度の高いコードについて、一層積極的な最<br />

適化とスケジューリングが可能です。<br />

+O[no]parminit (デフォルト +Onoparminit)<br />

Fortran ではサポートされません<br />

このオプションを有効にすると、オプティマイザは、呼び出し側で指定のない関数パラメータをゼロに初期化する命令<br />

を挿入します。これにより、パラメータ レジスタで NaT 値が回避されます。このオプションを有効にすると、結果として、<br />

若干のパフォーマンス低下が生じますが、正確さのために必須の場合もあります。<br />

+O[no]recovery (デフォルト +Orecovery)<br />

制御の投機的実行用にリカバリ コードを生成するかどうかを指定します。このオプションを有効にすると、コンパイラ<br />

は、各制御の投機的ロードについて、それに対応する制御投機チェック命令を生成し、ロード命令のオリジナル位置<br />

に挿入します。そのあと、リカバリ コードのブロックを、チェック命令の指定したラベル位置に挿入します。<br />

+Onorecovery を指定すると、制御投機チェック命令またはリカバリ ブロックは挿入されません。代わりに、ELF ファイ<br />

ルで SHF_IA_64_NORECOV フラグがセットされ、オペレーティング システムは、例外検出時にただちにリカバリを処<br />

理します。+Onorecovery の利点は、チェック命令がないためにクリティカル パスが短く、かつ全体的にもリカバリ ブ<br />

ロックがないため、コード サイズが小さくなることです。短所として、そのアプリケーションでデータ TLB ミスが多くなる<br />

可能性があります。これは、投機的ロード実行時に TLB ミスが起きるためで、チェック命令実行時よりも、格段に多くの<br />

回数の TLB ミスが起きる可能性もあります(例えば決して真にならない if 文の中からその上方に移動させた投機ロー<br />

ド)。もっとも、多数の投機的ロードで TLB ミスまたはその他の例外を受け取らない限り、コード サイズが減少すること<br />

で、多くの場合、実質的な改善が得られます。+Onorecovery オプションは、一般に安全です。ただし、メモリ アクセス<br />

例外に依存するシグナルハンドラを使用するアプリケーションでは不正確な動作をする可能性はあります。また、不<br />

正確なアプリケーションが、+Onorecovery により、別の不正確な動作を引き起こす可能性もあります。<br />

+O[no]store_ordering (デフォルト +Onostore_ordering)<br />

Fortran ではサポートされません。<br />

このオプションを有効にすると、オプティマイザは、別のスレッドからも見える可能性のあるメモリへのストアについて、<br />

元のプログラム順序を維持するように強制します。これは、強い順序付け(strong ordering)を意味するものではあり<br />

ません。このオプションを使用することで、+Ovolatile により提供される、グローバル変数へのすべてのアクセスに適<br />

用する、より保守的なボラタイル セマンティクス(volatile semantics)を使用せずに、ストアのプログラム順序付けを達<br />

成できます。<br />

#pragma IF_CONVERT<br />

ブロック スコープのこのプラグマを使用して、if 変換により、スコープ内で条件コードから生成するすべての制御フロ<br />

ーを削除するように、コンパイラに指示できます。if 変換のプロセスにより、コンパイラは、プレディケートを使用して、<br />

条件分岐を削除します。+O2 以上では、デフォルトで、コンパイラは、経験則を使用して、if 変換を適用して条件分岐<br />

13

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!