Можно ли рассчитать это, используя результат memtest?
Нет.
Если нет, то как рассчитывается в этом случае?
Исходный код инструментов, используемых для получения результатов, показанных на https://www.7 -cpu.com / , является общедоступным, его можно найти по адресу https://www.7 -cpu.com / utils.html .В частности, инструмент MemLat используется для измерения задержки доступа к каждому уровню иерархии памяти.
Основным методом измерения задержки является использование отслеживания указателя, когда создается связанный список из 64-байтовых элементов икаждый элемент инициализируется, чтобы в основном указывать на другой случайно выбранный элемент (чтобы победить аппаратные средства предварительной выборки).Если общий размер связанного списка помещается в кэш L1, то путем итерации по списку достаточно большое количество раз можно измерить задержку L1 путем деления общего времени выполнения на количество элементов, к которым был осуществлен доступ.Этот микробенчмарк можно упростить, отключив аппаратные средства предварительной выборки , чтобы не было необходимости в рандомизации.Рекомендуется использовать страницы объемом 1 ГБ (или не менее 2 МБ) вместо страниц размером 4 КБ, чтобы гарантировать, что весь список будет выделен из непрерывного фрагмента физической памяти.В противном случае существует вероятность того, что несколько страниц размером 4 КБ могут быть сопоставлены с одним и тем же набором кэша, что приведет к пропускам конфликтов.
Причина, по которой работает погоня за указателями, заключается в том, что современные процессоры Intel и AMD не используют значение прогнозирование техники.
Существует еще один способ измерения задержки.Вы можете использовать RDTSC
/ RDTSCP
вокруг одной инструкции доступа к памяти, по существу рассматривая единственный доступ к памяти как событие с коротким истекшим временем.См .: Измерение задержки памяти со счетчиком меток времени .