7

CPUキャッシュに静的オブジェクトを明示的に作成することは可能ですか?これらのオブジェクトが常にキャッシュに保持されるようにすることで、RAMまたは神が禁止する-hdd仮想メモリに到達することでパフォーマンスが低下することはありませんか?

私は大規模な L3 共有キャッシュをターゲットにすることに特に関心があります。L1、L2、命令、またはその他のキャッシュをターゲットにするつもりはありません。存在する最大のオンダイ メモリ チャブだけです。

そして、これを投稿する前に検索した他のスレッドと区別するために明確にするために、私はキャッシュ全体を私有化することに興味はありません。ほんのわずかな、いくつかのクラスに相当する領域です。

4

2 に答える 2

12

いいえ。キャッシュはアドレス指定できないため、オブジェクトを割り当てることはできません。

あなたが尋ねようとしているように見えるのは、仮想メモリにスペースを割り当てた後、常にキャッシュ ヒットを確実に取得できるかということです。

これはより複雑な質問であり、答えは「部分的に」です。

mlock()OS のメモリ管理 API (例: ) を使用して領域をページング不可としてマークすることにより、ディスクへのスワップ アウトを確実に回避できます。または、「非ページ プール」から割り当てます。

メモリを CPU キャッシュにピン留めする同様の API があるとは思えません。そのブロックの CPU キャッシュを予約できたとしても、キャッシュ ミスを回避することはできません。別のコアがメモリに書き込むと、所有権が譲渡され、キャッシュ ミスとそれに関連するバス転送が発生します (メイン メモリへ、場合によっては他のコアのキャッシュへ)。

Mathew が彼のコメントで述べているように、キャッシュ ミスをパイプライン内の他の有用な作業と並行して強制的に発生させ、必要なときにデータがキャッシュに存在するようにすることもできます。

于 2012-01-13T17:13:05.850 に答える
1

データをループして L3 キャッシュに取り込む別のスレッドを実行できます。

于 2012-08-23T11:42:08.573 に答える