Влияет ли размер строки кэша на задержку доступа к памяти? - PullRequest
1 голос
/ 12 апреля 2019

В архитектуре Intel уже давно есть 64-байтовые кэши. Мне любопытно, если бы вместо 64-байтовых строк кэша у процессора были 32-байтовые или 16-байтовые строки кэша, это улучшило бы задержку передачи данных из ОЗУ в регистр? если да, то сколько? если нет, то почему?

Спасибо.

1 Ответ

2 голосов
/ 12 апреля 2019

Передача большего количества данных, конечно, увеличивает время общения. Но увеличение очень мало из-за того, как организована память, и это не влияет на память для регистрации задержки.

Операции доступа к памяти выполняются в три этапа:

  1. битовая предварительная зарядка: адрес строки отправляется, а внутренние шины памяти предварительно заряжаются (длительность tRP)
  2. доступ к строке: внутренняя строка памяти считывается и записывается во внутренние защелки. За это время отправляется адрес столбца (длительность tRCD)
  3. доступ к столбцам: выбранные столбцы читаются в защелках строк и начинают отправляться процессору (длительность tCL)

Доступ к строке - длительная операция. Память - это матрица элементов ячейки. Чтобы увеличить емкость памяти, ячейки должны быть сделаны как можно меньше. И, читая ряд ячеек, нужно вести очень емкую и большую шину, которая идет вдоль столбца памяти. Размах напряжения очень низок, и есть чувствительные усилители для обнаружения небольших изменений напряжения.

После выполнения этой операции полная строка запоминается в защелках, и их чтение может быть быстрым и обычно отправляется в пакетном режиме.

Учитывая типичную память DDR4 с временем цикла ввода-вывода 1 ГГц, мы обычно имеем tRP / tRCD / tCL = 12-15cy / 12-15cy / 10-12cy и полное время составляет около 40 циклов памяти (если частота процессора равна 4 ГГц, это ~ 160 тактов процессора). Затем данные отправляются в пакетном режиме дважды за цикл, и 2x64 бита отправляются каждый цикл. Таким образом, передача данных добавляет 4 цикла для 64 байтов, и это добавило бы только 2 цикла для 32 байтов.

Таким образом, сокращение строки кэша с 64B до 32B сократит время передачи на ~ 2/40 = 5%

Если адрес строки не изменяется, предварительная зарядка и чтение строки памяти не требуются, а время доступа составляет ~ 15 циклов памяти. В этом случае относительное увеличение времени передачи 64B против 32B больше, но все еще ограничено: ~ 2/15 ~ 15%.

В обеих оценках не учитывается дополнительное время, необходимое для обработки пропуска в иерархии памяти, и фактический процент будет еще меньше.

Данные могут быть отправлены "первым критическим словом" по памяти. Если процессору требуется данное слово, адрес этого слова отправляется в память. Как только строка прочитана, память отправляет сначала это слово, а затем другие слова в строке кэша. Таким образом, кэши могут обслуживать запрос процессора, как только получено первое слово, какой бы ни была строка кэша, и уменьшение ширины строки не повлияет на задержку кэша. Поэтому, если использовать эту функцию, время памяти для регистрации не изменится.

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

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

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

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

...