私はCプログラミングの初心者です。CPU 内のデータ キャッシュ レベルの数と、各レベルのヒット タイムを見つける割り当てがあります。キャッシュのレベルとサイズを決定するために C プログラムを調べていますが、結果を解釈するのが難しいと感じています。キャッシュ レベルの数はどのように表示されますか?
どんなポインタも役に立ちます
私はCプログラミングの初心者です。CPU 内のデータ キャッシュ レベルの数と、各レベルのヒット タイムを見つける割り当てがあります。キャッシュのレベルとサイズを決定するために C プログラムを調べていますが、結果を解釈するのが難しいと感じています。キャッシュ レベルの数はどのように表示されますか?
どんなポインタも役に立ちます
チートする方法がない場合 (オペレーティング システムや CPU 識別レジスタからその情報を取得する方法など):
基本的な考え方は、(設計上)、L1 キャッシュは L2 キャッシュよりも高速であり、L3 キャッシュよりも高速です...通常の設計では、L1 キャッシュは L2 キャッシュよりも小さく、L3 よりも小さいです。キャッシュ...
したがって、大規模なメモリ ブロックを割り当ててから、X アクセスの実行にかかる時間が急激に増加することに気付くまで、順次アクセス (読み取りと書き込み) を行う必要があります。その後、同じものが再び表示されるまで続けます。発見したい最大のキャッシュよりも大きなメモリ ブロックを割り当てる必要があります。
これには、実際の測定のためにオーバーヘッドの低いアクセスタイムスタンプカウンターへのアクセスが必要です(参照先の回答で指摘されているように)。
[1] または、順次進行する N バイト ブロック内でランダムに、結果をゆがめる可能性のある巧妙なプリフェッチをだまそうとするかどうかによって異なります。