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

B.2.128 -xprefetch[= val[,val]]

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

明示的な先読み命令の使用は、パフォーマンスが実際に向上する特別な場合に限定してください。

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

表 B–35 -xprefetch のフラグ

フラグ 

意味 

latx:factor

指定された factor によってコンパイラで使用されるロードするための先読みとストアするための先読みを調整します。このフラグは、-xprefetch=auto とのみ組み合わせることができます。「B.2.128.1 先読み応答率」を参照してください。

[no%]auto

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

[no%]explicit

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

yes

旧式。使わないでください。代わりに -xprefetch=auto,explicit を使ってください。

no

旧式。使わないでください。代わりに -xprefetch=no%auto,no%explicit を使ってください。

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

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

B.2.128.1 先読み応答率

先読みの応答時間とは、先読み命令を実行してから先読みされたデータがキャッシュで利用可能となるまでのハードウェアの遅延のことです。

係数には、n.n. という形式の正の数値を使用します。

コンパイラでは、先読み命令と先読みしたデータを使用するロード命令やストア命令の間隔を決める先読み応答時間の値が使用されます。先読み命令とロード命令との間の使用応答時間は、先読み命令とストア命令との間の使用応答時間と異なる場合があります。

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

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

latx:factor サブオプションを使用するには、1.0 程度の係数から順にアプリケーションの性能テストを実行します。そのあとで係数を増減して、パフォーマンスを再度実施します。こうして最高のパフォーマンスが得られるまで係数を調整しながらパフォーマンステストを継続します。係数を小刻みに増減すると、ほんの数刻み増減しただけではパフォーマンスに違いは見られませんが、突然パフォーマンスが大きく変わり、その後再度横這い状態になります。