В чем разница между 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)
Некоторое объяснение:
Из ПАПИ справочная страница, ты это видишь 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».
Других решений пока нет …