質問

メモリのページは、DRAMまたはスワップであるかどうかを決定するために、オペレーティング・システムのために可能です。例えば、単にそれにアクセスしようとページフォルトが発生した場合、そうではありませんでした。

しかし、同じことは、CPUのキャッシュで可能ですか?

与えられたメモリ位置がキャッシュラインにロードされているかどうかを伝えるために、またはそれはそうする際に知っている任意の効率的な方法はありますか?

役に立ちましたか?

解決

一般的に、私はこれが可能だとは思いません。 OSがリソースを管理しているが、キャッシュはCPU自体によって管理されているので、それはDRAMとページファイルのために働くます。

メモリ読み出しのタイトなタイミングループを行うと、それがキャッシュにするか、メインメモリに出て行かなければならなかった場合であることを十分に速く完了したかどうかを確認するために試みることができるOSは - 。これは非常にエラーが発生しやすくなります。

マルチコア/マルチPROCシステムでは、使用されるのキャッシュコヒーレンシプロトコルが存在します彼らは互いのキャッシュを無効にする必要がある場合を決定するためにプロセッサ間、私はあなたがOS照会だろう、このプロトコルをスヌープうカスタムデバイスを持つことができたとします。

あなたは何をしようとしていますか?あなたがメモリに何かを強制したい場合は、現在のx86プロセッサを使用すると、使用することができ++のVisual C <のhref = "http://msdn.microsoft.com/en-と、たとえば、非ブロックのようにキャッシュにメモリをプリフェッチサポート私たち/ライブラリ/ 84szxsww(VS.80).aspxの」REL = "noreferrer"> _mm_prefetch のキャッシュにラインをフェッチします。

編集: 私自身はこれを行っので、ご自身の責任で使用していません。プロファイリングのためのキャッシュミスを決定するには、いくつかのアーキテクチャ固有のレジスタを使用することができます。 http://download.intel.com/design/processor/manuals/253669.pdf を、付録Aには、「パフォーマンス・チューニングのイベント」を提供します。これは、個々のアドレスがキャッシュにある場合は、それがキャッシュにロードされたときに、全体的な統計のために使用することができるかを決定するために使用することはできません。私は、これはインテル®VTune(このレベルの驚異的なプロファイラ)が使用するものであると信じています。

他のヒント

あなたはこの自分を決定しようとすると、

そして、あなたのプログラムを実行するという行為は無駄なあなたの測定値をレンダリング、関連するキャッシュラインを無効化することができます。

これは、あなたが測定していることに影響を与えずに何かを測定することはできませんという科学的原理を反映したもの例1である。

X86 アドレスがキャッシュ内にある場合伝える方法を知りません しかし、ここでアドレスがキャッシュにあった場合伝える方法です。

rdtsc
save timestamp
mov eax,address
rdtsc read timestamp counter
calculate timestamp difference
if < threshold then was in cache

閾値は、経験的にドキュメントから、または決定されなければならない

いくつかのマシンが持っても同等に役立つであろうキャッシュヒット/ミス・カウンター

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top