Sun Studio 12 Update 1: C++ ユーザーズガイド

A.2.167 -xprefetch[=a[,a...]]

先読みをサポートするアーキテクチャーで先読み命令を有効にします。

明示的な先読みは、測定値によってサポートされた特殊な環境でのみ使用すべきです。

a には次のいずれかを指定します。

表 A–43 -xprefetch の値

値 

意味  

auto

先読み命令の自動生成を有効にします。 

no%auto

先読み命令の自動生成を無効にします。 

explicit

(SPARC) 明示的な先読みマクロを有効にします。 

no%explicit

(SPARC) 明示的な先読みマクロを無効にします。 

latx:factor

指定された factor によってコンパイラで使用されるロードするための先読みと、ストアするための先読みを調整します。このフラグは、-xprefetch=auto とのみ組み合わせることができます。係数には必ず正の浮動小数点または整数を指定します。

yes

非推奨。使用しないでください。代わりに - xprefetch=auto,explicit を使用します。

no

非推奨。使用しないでください。代わりに -xprefetch=no%auto,no%explicit を使用します。

-xprefetch および -xprefetch=auto を指定すると、コンパイラは生成するコードに自由に先読み命令を挿入します。その結果、先読みをサポートするアーキテクチャーでパフォーマンスが向上します。

大型のマルチプロセッサで集約的なコードを実行する場合、-xprefetch=latx:factor を使用すると便利です。このオプションは、指定の係数により、先読みからロードまたはストアまでのデフォルトの応答時間を調整するようにコード生成プログラムに指示します。

先読みの応答時間とは、先読み命令を実行してから先読みされたデータがキャッシュで利用可能となるまでのハードウェアの遅延のことです。コンパイラは、先読み命令と先読みされたデータを使用するロードまたはストア命令の距離を決定する際に先読み応答時間の値を想定します。


注 –

先読みからロードまでのデフォルト応答時間は、先読みからストアまでのデフォルト応答時間と同じでない場合があります。


コンパイラは、幅広いマシンとアプリケーションで最適なパフォーマンスを得られるように先読み機構を調整します。しかし、コンパイラの調整作業が必ずしも最適であるとはかぎりません。メモリーに負担のかかるアプリケーション、特に大型のマルチプロセッサでの実行を意図したアプリケーションの場合、先読みの応答時間の値を引き上げることにより、パフォーマンスを向上できます。この値を増やすには、1 よりも大きい係数を使用します。.5 と 2.0 の間の値は、おそらく最高のパフォーマンスを提供します。

外部キャッシュの中に完全に常駐するデータセットを持つアプリケーションの場合は、先読み応答時間の値を減らすことでパフォーマンスを向上できる場合があります。値を減らすには、1 未満の係数を使用します。

-xprefetch=latx:factor オプションを使用するには、1.0 に近い係数の値から始め、アプリケーションに対してパフォーマンステストを実施します。そのあと、テストの結果に応じて係数を増減し、パフォーマンステストを再実行します。係数の調整を継続し、最適なパフォーマンスに到達するまでパフォーマンステストを実行します。係数を小刻みに増減すると、しばらくはパフォーマンスに変化がなく、突然変化し、再び平常に戻ります。

A.2.167.1 デフォルト

デフォルトは -xprefetch=auto,explicit です。基本的に非線形のメモリーアクセスパターンを持つアプリケーションには、このデフォルトが良くない影響をもたらします。デフォルトを無効にするには、-xprefetch=no%auto,no%explicit を指定します。

no%autono の引数で明示的にオーバーライドされない限り、デフォルト auto が想定されます。たとえば、-xprefetch=explicit-xprefetch=explicit,auto と同じことです。

デフォルト explicit は、引数に no%explicitno を指定して明示的に無効にするまで継続されます。たとえば、-xprefetch=auto-xprefetch=auto,explicit と同じことです。

-xprefetch だけを指定すると、-xprefetch=auto,explicit が使用されます。

自動先読みを有効にしても、応答時間係数を指定しないと、-xprefetch=latx:1.0 が想定されます。

相互の関連性

このオプションは、置き換えられる代わりに蓄積されます。

sun_prefetch.h ヘッダーファイルには、明示的な先読み命令を指定するためのマクロが含まれています。先読み命令は、実行コード中のマクロの位置にほぼ相当するところに挿入されます。

明示的な先読み命令を使用するには、使用するアーキテクチャーが適切なもので、sun_prefetch.h をインクルードし、かつコンパイラコマンドに -xprefetch が 指定されていないか、-xprefetch-xprefetch=auto,explicit、あるいは -xprefetch=explicit が指定されていなければいけません。

マクロが呼び出され、sun_prefetch.h ヘッダーファイルがインクルードされていても、-xprefetch=no%explicit が指定されていると、明示的な先読み命令は実行コードに組み込まれません。

latx:factor の使用は、自動先読みが有効になっている場合にかぎり有効です。つまり、latx:factor は、-xprefetch=auto,latx:factor とともに使用しないかぎり無視されます。

警告

明示的な先読みは、測定値によってサポートされた特殊な環境でのみ使用すべきです。

コンパイラは、広範囲なマシンやアプリケーション間で最適なパフォーマンスを得るために先読み機構を調整しますが、-xprefetch=latx:factor は、パフォーマンステストで明らかに利点があることが確認された場合にかぎり使用してください。使用先読み応答時間は、リリースごとに変わる可能性があります。したがって、別のリリースに切り替えたら、その都度応答時間係数の影響を再テストすることを推奨します。