Измерение размера и порядка следования кэшей L1 и L2 - PullRequest
15 голосов
/ 05 апреля 2010

Как программно измерить (не запрашивая ОС) размер и порядок ассоциативности кэшей L1 и L2 (кэши данных)?

Предположения о системе:

  • Имеет кэш L1 и L2 (может быть тоже L3, может использоваться общий кэш),
  • Может иметь аппаратный блок предварительной выборки (как P4 +),
  • Имеет стабильный источник синхронизации (тик-счетчик или хороший HPET для gettimeofday).

Нет никаких предположений об ОС (это может быть Linux, Windows или что-то еще), и мы не можем использовать запросы POSIX.

Язык - C, и оптимизация компилятора может быть отключена.

Ответы [ 4 ]

6 голосов
/ 05 апреля 2010

Я думаю, что все, что вам нужно сделать, это постоянно обращаться к памяти постоянно увеличивающимися частями (для определения размера кэша), и я думаю, что вы можете варьировать шаги для определения ассоциативности.

Таким образом, вы начинаете пытаться получить доступ к очень коротким сегментам памяти и удваиваете размер, пока доступ не замедлится. Каждый раз, когда доступ замедляется, вы определяете размер другого уровня кэша.

2 голосов
/ 05 апреля 2010

Вот код от ATLAS. Это для размера кеша L1

ATLAS / мелодия / 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 и только его размер, а не счетчик путей.

1 голос
/ 15 августа 2010

Вопрос немного устарел, но ответ здесь .

1 голос
/ 05 апреля 2010

Вы можете найти тест STREAM полезным или интересным или оба.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...