2013-06-13 4 views
6

特定のデータのためにキャッシュをバイパスするよう指示するプロセッサがありますか? This questionにも、SSE4.2命令がキャッシュをバイパスすることを示唆する回答があります。誰かがそれについて私に啓発することはできますか?キャッシュをバイパスするよう指示されたプロセッサがありますか?

+1

私は好奇心:実用的なアプリケーションがためにそこにあるものキャッシュをバイパスしますか?頭に浮かべるのは、命令タイミングの予測可能性を向上させることだけです。他にはありますか? – wallyk

+1

2つのケースでは、異なるコアで動作するスレッド間で時間に敏感なデータを共有し、他のハードウェア(UART ICなど)とインターフェイスするためにメモリマップレジスタに書き込むことが一般的です。 –

+3

@wallyk:キャッシュ汚染(例えば、たくさんのデータを書き、 "すぐに"それを読むことを期待せず、キャッシュからプッシュする必要があるデータを望んでいない場合)。 – Brendan

答えて

1

特定のデータの定義に応じて、はい。プロセッサは、一般に、キャッシュのどの領域をキャッシュできるかを定義するために使用されるキャッシュ制御レジスタ/テーブルを有し、キャッシュされてはならない。一般に、ユーザー空間で実行されているコードは、これらのテーブルにアクセスできません。

1

特定のデータのキャッシュをバイパスするような命令があるプロセッサはありますか?

SuperHファミリ(または少なくともSuperH-2)は、キャッシュメモリを暗黙的にまたは明示的にバイパスしています。これは、特別な命令ではなく、メモリアドレス空間の異なる領域を使用することによって行われます。
アドレスの上位3ビットを001に設定すると、上位3ビットがクリアされた同じアドレスのキャッシュスルーミラーにアクセスします。また、メモリマップドI/Oレジスタのような領域は決してキャッシュされません。

6

一般に、キャッシュポリシーはメモリ管理ユニット(MMU)によって制御されます。各アドレス範囲に対して、キャッシュポリシーが決定されます。これらのテーブルはOSによって管理され、システム空間で使用できます。 キャッシュを持つアーキテクチャでは、キャッシュを同期化/無効化/フラッシュするためのCPUコマンドが通常あります。ただし、MMUテーブルと同様に、これらのコマンドはシステム空間でのみ使用できます。

+2

わずかな清澄化; x86では、_single_キャッシュラインを無効にするための 'clflush'命令は特権を持っていません。そして、元のポスターが述べたように、 'movnt' SSE命令はキャッシュバイパスを可能にします_stores_ - http://stackoverflow.com/questions/37070/what-is-the-meaning-of-non-temporal-memory-accesses詳細については、-in-x86を参照してください。 –

1

アルテラのNios IIアーキテクチャには、キャッシュをバイパスするロード/ストア用に2つの特定の命令ldioおよびstioがあります。これはメモリマップされたIOに使用されます。

http://www.csun.edu/~glaw/ee525/Lecture03Nios.pdf

のNios IIは、一般的に、アルテラのFPGAボードで使用ソフトプロセッサであり、それはまた、ハードASICデバイスのライセンスすることができますが、私はこのアーキテクチャに基づく任意の商業のCPUに

1

を知りませんSSEキャッシュバイパスストア命令は、すぐに再び触れられない領域に書き込むときにキャッシュを汚染することを回避することである。例えばあなたは再び使用されるデータを退去させたくありません。

また、x86の実装では通常、キャッシュラインの任意の部分への書き込みが発生すると、キャッシュライン全体で読み込まれます。キャッシュラインの以前の内容が不要な場合、これはメモリ帯域幅の浪費である。 (のmemcpyまたはmemsetなど)memcpyを実装するためのこのライトバック(デフォルト)対書き込み結合(movntq/movntdq)効果のsome old discussionが見つかりました。他の人がすぐにmemcpyの出力を読むと、これを使用するように注意してください。

ストリーミング負荷は、通常memcpyのように恐ろしく実行されるため、reading from USWC regionsでのみ動作します。ストリーミング負荷は通常(WB(ライトバック))から特別なものではなく、普通のmovdqaのように動作します。 (すなわち、NTヒントは無視される)。インテルの最適化マニュアルには、汚染を軽減するためにprefetchntaを使用できると記載されています。それは、読み取りをトリガすることなく(むしろmovntでバイパスより)キャッシュに書き込むことが可能かどう


はIDK。おそらくAVX512はmemcpyのこの問題を解決するでしょう。なぜなら、512bのZMMレジスタは64バイト、つまり完全なキャッシュラインであるからです。 ZMMレジスタからまだキャッシュされていないメモリへの64バイトの整列されたストアは、RAMを最初に読み込まない方法で実装され、システム内の他のCPUコア。

AVX-512)がSkylake Xeon(他ないSkylakeマイクロアーキテクチャのCPUの中にあることを行っている。またKnight's Landingで、超並列高スループットのXeonファイがアクセル事を計算する。。)

関連する問題