Размер меры и дорожный порядок L1 и кэшей L2

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

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

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

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

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

15
задан artless noise 24 August 2016 в 14:12
поделиться

4 ответа

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

2
ответ дан 1 December 2019 в 04:58
поделиться

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

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

6
ответ дан 1 December 2019 в 04:58
поделиться

Тест STREAM может оказаться полезным или интересным, либо и то, и другое.

1
ответ дан 1 December 2019 в 04:58
поделиться

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

1
ответ дан 1 December 2019 в 04:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: