Информация о задержке иерархии памяти
В разделе "Пример" этого поста автор перечисляет задержки всех регистров компонентов памяти /L1/L2/RAM... Мой вопрос: как вы измеряете (находите в сети), каковы реальные задержки для любого конкретного чипа?? Скажем
model name : Intel(R) Core(TM)2 Duo CPU E4600 @ 2.40GHz
stepping : 13
cpu MHz : 1200.000
Я также пытался выкопать информацию из руководств Intel, но для меня эти вещи огромны, я не знаю, где искать информацию.
Благодарю.
3 ответа
Простой запрос Google ("задержка кэша процессора Intel") показывает интересное исследование Intel: измерение задержки кэш-памяти и памяти, а также пропускной способности ЦП и памяти. В этой статье авторы используют LMbench для выполнения измерений.
Как проводить измерения
Используйте исполняемый двоичный файл с именем "lat_mem_rd", который находится в папке "bin" каталога утилиты. Далее используйте следующую командную строку:
taskset 0x1 ./lat_mem_rd –N [x] –P [y] [depth] [stride]
Где [x] равно числу раз, которое процесс запускается до сообщения о задержке. Обычно для точных измерений достаточно установить значение "1". Для опции '-P' [y] равно количеству процессов, вызванных для запуска теста производительности. Рекомендация для этого всегда '1.' Достаточно измерить задержку доступа только с одним ядром обработки или потоком. Спецификация [глубина] указывает, как далеко в памяти будет измерять утилита. Чтобы обеспечить точное измерение, укажите величину, которая будет выходить за пределы кеша, чтобы она не учитывала измерения задержки.
Понимание результатов
Поскольку задержка кэша L1 и L2 связана с тактовой частотой ядра, частота ЦП играет роль в том, как быстро осуществляется доступ к памяти в реальном времени. Это означает, что количество тактовых частот ядра остается неизменным независимо от частоты ядра. Для сопоставимого результата лучше всего преобразовать задержку, заданную LMBench от наносекунд, в тактовые частоты процессора. Для этого умножьте задержку на частоту процессора.
Time(seconds) * Frequency(Hz) = Clocks of latency
Следовательно, если процессору 2,4 ГГц требуется 17 нс для доступа к определенному уровню кэша, это преобразуется в:
17 x 10-18 seconds * 2400000000 Hz = 17 ns * 2.4 GHz ≈ 41 Clocks
Быстрое решение, которое вы можете взломать в соответствии со своими потребностями: http://code.google.com/p/mem-latency/
Он измеряет задержку, загружая связанный список разных размеров.
Чтобы сделать измерения, вы должны сделать это рано, на голом железе, потому что вам не нужны какие-либо помехи (например, изменения тактовой частоты, конфликт шины и т. Д.).
Вам придется написать немного кода на ассемблере... на x86 шаги будут такими:
- выполнить инструкцию сериализации
- читать счетчик отметки времени
- выполнить инструкцию сериализации
- читать память
- выполнить инструкцию сериализации
- снова прочитайте счетчик меток времени
- выполнить инструкцию сериализации
- делай математику
Как только вы это сделали, все, что вам нужно, это начать планировать и играть с кешами. Имейте в виду, что размеры кеша и архитектура играют здесь огромную роль, поэтому вам нужно адаптировать измерения к предмету. Также вы можете поиграть с предварительной загрузкой, чтобы сделать заполнение легче.