メインメモリではなく、プロセッサのデータキャッシュにデータを直接格納する方法があるのだろうかと思いました。私は、キャッシュの働き方が最も頻繁に使用されるデータを格納することであることを理解していますが、プロセッサに指示するアセンブリ命令を持つことが理にかなっています。これは頻繁に使用されるデータです。 私はIA-32アセンブリ言語を使用しています。プロセッサキャッシュにデータを直接格納できますか?
ありがとうございます!
メインメモリではなく、プロセッサのデータキャッシュにデータを直接格納する方法があるのだろうかと思いました。私は、キャッシュの働き方が最も頻繁に使用されるデータを格納することであることを理解していますが、プロセッサに指示するアセンブリ命令を持つことが理にかなっています。これは頻繁に使用されるデータです。 私はIA-32アセンブリ言語を使用しています。プロセッサキャッシュにデータを直接格納できますか?
ありがとうございます!
アーキテクチャによっては、データをキャッシュに直接移動するためのプリフェッチヒントがあります。 ia32の場合、これはprefetch
命令で、データをL1、L2に移動することができます。
一方、メモリに直接/からデータを移動するmoventdq
のようなキャッシュの使用を避けるようにプロセッサに指示する命令があります。
編集さらに、ライトバック、ライトスルー、ライト結合、またはキャッシュ不可のような特定のタイプのキャッシュアルゴリズムのメモリ範囲を設定する方法があります。 http://en.wikipedia.org/wiki/Memory_type_range_registerを参照してください。
IA-32にSSEが含まれているかどうかはわかりません。また、私が知る限り、プリフェッチ命令後にデータがキャッシュに格納されることは保証されていません。しかし私は間違っている可能性があります。 – n0p
SSEは、x86_64が存在するよりずっと前です。 1999年のペンティアムIIIはSSEを含む最初のもので、 'prefetch'命令が属するもので、これは純粋な32ビットプロセッサでした。はい、「プリフェッチ」はヒントに過ぎませんが、それは「プロセッサに命令するアセンブリ命令を持つことは理にかなっています。これは頻繁に使用されるデータになります」それはプリフェッチのためのものです。 – hirschhornsalz
'prefetch'は実際にはMMX命令です。だから1995年にさかのぼります。 – hirschhornsalz
いいえ、アセンブリレベルで直接キャッシュにアクセスすることはできません。キャッシュはプロセッサ内に「隠されている」(L1とL2)ため、まったくキャッシュがないためです。
キャッシュは(ほとんど)ソフトウェアに対して透過的であるため、キャッシュに別々にアクセスします。それはそれぞれの標準読み書き命令がキャッシュに直接アクセスするからです。もう1つのケースでは、キャッシュを迂回して直接メモリにアクセスするには特殊な命令が必要ですが、それらは存在します。 – hirschhornsalz
実際、これは可能ですが、あなたがしたいことではありません。ペーパー:http://rere.qmqm.pl/~mirq/cache_as_ram_lb_09142006.pdf、スライド:https://www.coreboot.org/images/6/6c/LBCar.pdf。関連するSOに関する質問:http://stackoverflow.com/questions/27699197/cache-as-ram-no-fill-mode-executable-code – jmiserez