15

L1 および L2 キャッシュ (データ キャッシュ) のサイズと連想性の順序を (OS にクエリするのではなく) プログラムで測定するにはどうすればよいですか?

システムに関する前提:

  • L1 と L2 キャッシュ (L3 の場合もあれば、キャッシュ共有の場合もあります) を持ち、
  • ハードウェア プリフェッチ ユニットがある場合があります (P4+ と同様)。
  • 安定したクロックソース (tickcounter または gettimeofday 用の優れた HPET) があります。

OS に関する仮定はなく (Linux、Windows、またはその他のものである可能性があります)、POSIX クエリを使用することはできません。

言語は C であり、コンパイラの最適化は無効になっている可能性があります。

4

4 に答える 4

6

あなたがする必要があるのは、(キャッシュサイズを決定するために)増え続けるチャンクでメモリに繰り返しアクセスすることだけであり、連想性を決定するためにストライドを変えることができると思います。

したがって、メモリの非常に短いセグメントにアクセスすることから始めて、アクセスが遅くなるまでサイズを 2 倍にし続けます。アクセスが遅くなるたびに、別のレベルのキャッシュのサイズを決定します。

于 2010-04-05T04:21:22.580 に答える
2

これはATLASのコードです。L1キャッシュサイズ用です

ATLAS/tune/sysinfo/L1CacheSize.c

( https://github.com/vtjnash/atlas-3.10.0/blob/master/tune/sysinfo/L1CacheSize.c )

int GetL1Size(int MaxSize, double tol)
{
int L1Size, tmp, correct=1;
fprintf(stderr, "\n Calculating L1 cache size:\n");

ただし、それはl1キャッシュとそのサイズのみであり、ウェイカウントではありません。

于 2010-04-05T16:12:55.700 に答える
1

質問は少し時代遅れですが、答えはここにあります。

于 2010-08-15T15:03:09.830 に答える
1

STREAM ベンチマークが役立つ、興味深い、あるいはその両方であると思われるかもしれません。

于 2010-04-05T16:22:18.097 に答える