Мера L1 кеш данных с перфорацией и папи

В чем разница между PAPI_L1_LDM в папах и L1-dcache-load-misses в перфе?

Я использовал ту же настройку, как этот пост здесь.

Итак, в результате я получаю за папи:

PAPI_L1_DCM: 515 <- L1 data cache miss (probably L1D_READ_MISSES_ALL + L1D_READ_MISSES_RETRIED?)
PAPI_L1_ICM: 300 <- L1 Instruction cache miss
PAPI_L1_LDM: 441 <- L1 Load data miss
PAPI_L1_TCM: 815 <- L1 Total cache miss

к несчастью PAPI_L1_DCA не поддерживается на этой машине.

И для perf (только в пользовательском пространстве, поскольку papi измеряет также только пользовательское пространство, а не пространство ядра):
вызов: perf stat -B -e L1-dcache-load-misses:u,cache-misses:u ./perf

    16,539      L1-dcache-load-misses
128      cache-misses:u

16,539 кажется более разумным для N=1000000, В чем разница между пропуском загрузки данных (PAPI_L1_LDM в папах) и пропуском кэша данных (PAPI_L1_DCM в папах) и почему эти числа различаются по папкам и производительности? Это cache-misses:u в перфе, связанном с промахами L2?

редактирование: аппаратное обеспечение (семейство Xeon E5-2600 v3, ядра Haswell-EP 12)

3

Решение

Некоторое объяснение:

Из ПАПИ справочная страница, ты это видишь PAPI_L1_LDM = «количество пропущенных загрузок». Другими словами PAPI_L1_LDM промахи происходят только от грузы (и иногда предварительно Fetches).

нагрузка когда ваша программа выполняет инструкцию загрузки для извлечения памяти.

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


В L1-dcache-load-misses

  • L1 это кэш первого уровня, самый маленький и самый быстрый. LLC с другой стороны, относится к последнему уровню иерархия кеша, тем самым обозначая самый большой, но самый медленный кеш.
  • i против d отличает кеш инструкций от кеша данных. Таким образом, только L1 разделяется, остальные кэши распределяются между данными и инструкциями.

Вы, кажется, думаете, что cache-misses:u в перфе, связанном с промахами L2. Это на самом деле не правда.

cache-misses Событие представляет номер доступа к памяти, который не может быть обслужен ни одним из кэшей.

Я признаю, что документация perf не самая лучшая.

Тем не менее, вы можете многое узнать об этом, прочитав (если вы уже хорошо знаете, как работают процессор и модуль мониторинга производительности, это явно не курс компьютерной архитектуры) perf_event_open () функция:

Например, прочитав его, вы можете увидеть, что cache-misses событие, отображаемое перфом, соответствует PERF_COUNT_HW_CACHE_MISSES

  • Далее вы можете найти, что L1-dcache-load-misses это Событие аппаратного кэша а также cache-misses является Аппаратное событие (который является супер-набором Событие аппаратного кэша).

А по поводу вашей разницы вы можете проконсультироваться этот ответьте по причине, которая говорит, что увеличьте размер вашего массива в 100 или даже 10000 раз, потому что он говорит «В противном случае я заметил большие колебания результатов синхронизации, и при длине в 1 000 000 массив все еще почти помещается в кэш L3».

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]