Передача большего количества данных, конечно, увеличивает время общения. Но увеличение очень мало из-за того, как организована память, и это не влияет на память для регистрации задержки.
Операции доступа к памяти выполняются в три этапа:
- битовая предварительная зарядка: адрес строки отправляется, а внутренние шины памяти предварительно заряжаются (длительность tRP)
- доступ к строке: внутренняя строка памяти считывается и записывается во внутренние защелки. За это время отправляется адрес столбца (длительность tRCD)
- доступ к столбцам: выбранные столбцы читаются в защелках строк и начинают отправляться процессору (длительность 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%.
В обеих оценках не учитывается дополнительное время, необходимое для обработки пропуска в иерархии памяти, и фактический процент будет еще меньше.
Данные могут быть отправлены "первым критическим словом" по памяти. Если процессору требуется данное слово, адрес этого слова отправляется в память. Как только строка прочитана, память отправляет сначала это слово, а затем другие слова в строке кэша. Таким образом, кэши могут обслуживать запрос процессора, как только получено первое слово, какой бы ни была строка кэша, и уменьшение ширины строки не повлияет на задержку кэша. Поэтому, если использовать эту функцию, время памяти для регистрации не изменится.
В последних процессорах обмены между различными уровнями кэша основаны на ширине строки кэша, и отправка критического слова вначале не приносит никакой выгоды.
Кроме того, большие размеры строк уменьшают обязательные пропуски благодаря пространственной локализации, а уменьшение размера строк отрицательно влияет на частоту пропадания кэша.
Наконец, использование больших строк кэша увеличивает скорость передачи данных между кэшем и памятью.
Единственным отрицательным аспектом больших строк кэша (помимо небольшого увеличения времени передачи) является то, что количество строк в кэше уменьшается, а количество конфликтов может увеличиваться. Но с большой ассоциативностью современных кэшей этот эффект ограничен.