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.

ead A[B[i]]<br />

直接プリフェッチ アルゴリズムであれば、誘導アドレスをもつ配列 B についてプリフェッチを挿入します。間接プリフェ<br />

ッチでは、コンパイラは、配列 A が B[i]で間接的にアクセスされることを検出し、それに応じてプリフェッチを挿入し<br />

ます。コンパイラは、A のプリフェッチ アドレスを計算するため、配列 B を投機的にロードします。プリフェッチ ディスタ<br />

ンスが PF のとき、間接プリフェッチは、次のコードを上記ループに挿入します。<br />

lfetch B[i+PF*2]<br />

index=ld.s B[i+PF]<br />

lfetch A[index]<br />

配列 B を通常のプリフェッチ ディスタンスの 2 倍でプリフェッチしていることに注目してください。これは、配列 A を通<br />

常のプリフェッチ ディスタンスでプリフェッチするためには、配列 B を通常の 2 倍のプリフェッチ ディスタンスで投機的<br />

にロードする必要があるためです。配列 B の終端を越えることがあるため投機的ロードを使用します。これにより、A<br />

のプリフェッチアドレスに対するロードで例外は発生しません。<br />

詳しくは、『Itanium Architecture Software Developers Manual, volumes 1-3』を参照してください<br />

( http://h21007.www2.hp.com/dspp/topic/topic_DetailSubHeadPage_IDX/1,4946,0-10402-TECHDOCUMENT-40106,00.html<br />

(英語) )。<br />

+O[no]inline:filename<br />

+O[no]inline=symlist<br />

#pragma no_inline<br />

#pragma inline<br />

#pragma [no]inline_call<br />

特定の関数用にインライン化を有効または無効にします。関数は、別のファイル filename 内、またはコマンド行の<br />

symlist 内のいずれかに指定できます。デフォルトでは、コンパイラは、経験則を使用して、インライン化候補の損<br />

益を判定しますが、このオプションは、その経験則を上書きします。特定関数のインライン化が常に有益であるか、ま<br />

ったく有益でないかを分かっているときに、このオプションを使用できます。また、決してインライン化すべきでない関<br />

数を指定するのに no_inline プラグマ、常にインライン化すべき関数を指定するのに inline プラグマも使用でき<br />

ます。該当するプラグマを、インライン化するまたはインライン化しない関数の定義を含むソース ファイル内に配置し<br />

てください。[no]inline_call プラグマは、特定呼び出しサイトのインライン化を有効、無効にするときに使用しま<br />

す。引数はなく、次のステートメント中の最も外側、最左端の呼び出しに影響します。ただし、最初のリリースには<br />

[no]inline_call プラグマは実装されていません。<br />

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

呼び出しされないプロシージャの削除を有効または無効にします。参照されない非隠し、非静的シンボルに加えて、<br />

隠しエクスポート クラスとしてマークされたプロシージャが削除されます。このオプションは、実行可能プログラムのサ<br />

イズを削減し、これにより、TLB と命令キャッシュ動作を改善できます。サポートされるのは、実行可能プログラムにつ<br />

いてのみです。<br />

+Otype_safety=[off|limited|ansi|strong]<br />

(デフォルト +Otype_safety=off, limited になることもあります)<br />

+Optrs_strongly_typed(+Otype_safety=strong と同じ)<br />

+Optrs_ansi(+Otype_safety=ansi と同じ)<br />

上記オプションがサポートされるのは、C アプリケーションのみです。上記オプションは、コード最適化時にコンパイラ<br />

がどのタイプのエイリアシング保証を想定できるかを指示するのに使用します。指定したオプションがなんらかの程度<br />

の型の安全を保証していて、それが、実際にはコードで順守されない場合、アプリケーションが正常に実行されない<br />

可能性があります。+Otype_safety=off は、最も保守的で、すべてのタイプのオブジェクトについて相互エイリア<br />

スの可能性があることを伝えます。+Otype_safety=limited は、コードが ANSI エイリアス規則に準拠している<br />

こと、指定のないオブジェクトは未知の型として取り扱われることを指示します。言い方を変えると、float 型と int<br />

型のオブジェクトは、それぞれ異なるメモリ ロケーションを参照すると想定することができ、型の異なるオブジェクトへ<br />

のアクセスをお互い自由にスケジューリングできます。このオプションは、両方のアクセスが、指定のないメモリを参照<br />

できるときには、異なる型のアクセスを明確にしません。また、ANSI 規則の指定するように、文字オブジェクトは他の<br />

型のオブジェクトを参照できるため、他のオブジェクトに関して保守的に最適化しなければなりません。<br />

+Otype_safety=ansi は、コードが ANSI エイリアス規則を順守すること、指定のないオブジェクトについても、指<br />

定されたオブジェクトと同様に扱うことを指示します。最も積極的な明確化をするには、+Otype_safety=strong<br />

を使用します。このオプションは、文字型の左辺値( lvalue) を通じたアクセスは、他のタイプのオブジェクトを参照でき<br />

12

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

Saved successfully!

Ooh no, something went wrong!