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.

ズが大幅に増大することがあります。ループ アンローリングは、そうした最適化の一つです。これを無効化するには、<br />

+Osize を使用します。<br />

+Osize は、インライン化も無効にします。このオプションが、命令キャッシュ ミスの削減に役立つケースもあります。<br />

+Osize は、+Onolimit や +Ofast など他の最適化制御オプションと併用できます。<br />

スケジューリング モデルの制御<br />

+DS[blended|Itanium|Itanium2|native](デフォルト +DSblended)<br />

Itanium ベースの各実装間で、リソース制約、遅延、その他のスケジューリング基準に大きな相違が生じることもあり<br />

ます。最適化スケジューラは、現在、最初の 2 つの Itanium ベース実装、Intel Itanium と Intel Itanium 2 に対応してい<br />

ます。これらの実装について、それぞれ+DSItanium または +DSItanium2 を使用することにより、最適に動作す<br />

るコードをスケジューリングできます。<br />

しかし、コードの最適化は一度だけにして、そのコードをどちらの実装でもある程度良好に動作させたいという要求が<br />

あるでしょう。デフォルトの設定 +DSblended は、この要求に応えます。具体的に説明すると、+DSblended は、浮<br />

動小数点コードが Itanium で最適に動作し、Itanium 2 での性能低下は若干に留まるように、コードをスケジューリン<br />

グします。整数(または非浮動小数)コードは、Itanium 2 上でやや良好に動作するよう調整します。たとえば、<br />

+DSblended は、Itanium で発生するストールを最小化するため、Itanium の長い浮動小数遅延に合わせてスケジュ<br />

ールします。浮動小数点コードはモジューロ スケジューリング可能なループ内に格納されることが多いため、この長<br />

い遅延は、(モジューロ スケジューリング ループ内での追加ステージで発生する)小さな性能低下を伴う程度であり、<br />

Itanium 2 では耐えられる範囲です。<br />

コンパイルするプラットフォームが Itanium か Itanium 2 かにかかわらず、その実装用にコードを最速にスケジューリ<br />

ングするには、単純に +DSnative を使用します。Itanium の新しい実装がリリースされたときには、新しいターゲット<br />

が追加され、+DSblended により行われるスケジュールの内容が変更されることになります。<br />

浮動小数点最適化の制御<br />

+Ofltacc=[strict|default|limited|relaxed]<br />

+O[no]fltacc<br />

#pragma STDC FP_CONTRACT [ON/OFF/DEFAULT]<br />

期待されている浮動小数点計算の精度に違反しないように、浮動小数点コードの最適化を制御します。<br />

+Ofltacc=strict(またはそれと等値の +Ofltacc)を使用して、結果値を変える可能性のある最適化はすべて<br />

禁止されます。<br />

何も指定しない場合、または +Ofltacc=default 指定時に、値を変更する最適化で唯一許容されるのは、短縮<br />

(contraction)による統合です。これには、浮動小数点乗加算(fma)命令とその変化形が含まれます。この命令は、乗<br />

算と加算の 2 つの命令列の計算結果を変更してしまう可能性がありますが、乗算の計算結果が丸めの対象とならな<br />

いため、実際にはこの結果は統合を行う前よりも正確になります。<br />

Itanium 上では、この短縮がたいへん有利に働くことがあります。FP_CONTRACT プラグマを使用して、コードのブロッ<br />

ク単位で、短縮を有効、無効にできます。FP_CONTRACT OFF は、先行のプラグマまたは +Ofltacc=strict オ<br />

プションを上書きします。FP_CONTRACT ON には、先行の FP_CONTRACT OFF を取り消す以外の効果はなく、<br />

+Ofltacc=strict により上書きされます。+Ofltacc=limited は、短縮のほか、値を変更する他の最適化も<br />

有効にします。これらの最適化は、NaN (Not a Number)、無限大、ゼロ符号の伝播を防止できます。たとえば、<br />

0.0*x => 0.0 の最適化を実行することで、x が NaN、無限大または負の数のとき、NaN、無限大、ゼロ符号の<br />

伝播が防止されます。<br />

浮動小数点計算の最適化を最も積極的に行うには、+Ofltacc=relaxed(またはそれと等値の+Onofltacc)を<br />

使用します。たとえば、高速で効率的な浮動小数点除算シーケンスが、relaxed(緩い)の精度で有効化されます。<br />

また、+Ofltacc=relaxed で、浮動小数点計算を再結合する最適化が有効になります。たとえば、C または C++<br />

では、ループをアンローリングして、部分和を計算することにより浮動小数点加算の遅延を隠蔽する合計の削減(sum<br />

reduction)を、+Ofltacc=relaxed を使用して有効にできます(Fortran では、明示的括弧に違反しない再結合は<br />

常に正当であるため、この最適化は常に正当です)。<br />

+O[no]cxlimitedrange<br />

(C でのデフォルト +Onocxlimitedrange、Fortran でのデフォルト +Ocxlimitedrange)<br />

#pragma STDC CX_LIMITED_RANGE [ON/OFF/DEFAULT]<br />

8

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

Saved successfully!

Ooh no, something went wrong!