Информация о задержке иерархии памяти

В разделе "Пример" этого поста автор перечисляет задержки всех регистров компонентов памяти /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 шаги будут такими:

  • выполнить инструкцию сериализации
  • читать счетчик отметки времени
  • выполнить инструкцию сериализации
  • читать память
  • выполнить инструкцию сериализации
  • снова прочитайте счетчик меток времени
  • выполнить инструкцию сериализации
  • делай математику

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

Другие вопросы по тегам