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

В разделе "Пример" этот пост автор перечисляет задержки всех компонентов памяти /L 1/L2/RAM. Мой вопрос: как вы измеряете (находите в Интернете), каковы реальные задержки для любого данного чипа? Пусть говорят

model name  : Intel(R) Core(TM)2 Duo CPU     E4600  @ 2.40GHz
stepping    : 13
cpu MHz     : 1200.000

Я попытался также выкопать информацию из руководств Intel, но для жизни меня эти вещи огромны, я не знаю, где искать информацию.

Спасибо.

Ответ 1

Простой google query ( "задержка кэша процессора Intel" ) показывает интересное исследование Intel: Измерение кэша и задержки памяти и пропускной способности процессора до пропускной способности памяти. В этой статье авторы используют LMbench для выполнения измерений.

Как принимать измерения

Используйте исполняемый двоичный файл с именем "lat_mem_rd" найденный в папке "bin" в каталоге служебных программ. Затем используйте следующие командной строки:

taskset 0x1 ./lat_mem_rd –N [x] –P [y] [depth] [stride]

Где [x] равно количеству раз, когда процесс запускается перед отчетностью задержка. Обычно для точных измерений достаточно установить значение "1". Для параметра "-P" [y] равно числу процессов, вызываемых для запуска тест. Рекомендация для этого всегда "1. Достаточно измерьте задержку доступа только с одним ядром обработки или потоком. [depth] указывает, насколько далеко в памяти будет измерена утилита. Чтобы обеспечить точное измерение, укажите сумму, которая будет идти достаточно далеко от кеша, так что он не влияет на задержку Измерения.

Понимание результатов

Так как латентность 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

Ответ 2

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

Вам нужно будет написать немного кода ассемблера... на x86 будут выполняться следующие шаги:

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

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

Ответ 3

Быстрое решение, которое вы можете взломать в соответствии с вашими потребностями: http://code.google.com/p/mem-latency/

Он измеряет задержку путем загрузки связанного списка разных размеров.