#memory #computer-science #hardware #cpu-architecture
#память #информатика #аппаратное обеспечение #архитектура процессора
Вопрос:
В архитектуре Intel уже давно используются 64-байтовые кэши. Мне любопытно, если бы вместо 64-байтовых строк кэша процессор имел 32-байтовые или 16-байтовые строки кэша, улучшило бы это задержку передачи данных из ОЗУ в регистр? если да, то насколько? если нет, то почему?
Спасибо.
Ответ №1:
Передача большего объема данных, конечно, увеличивает время связи. Но увеличение очень мало из-за того, как организована память, и это не влияет на память для регистрации задержки.
Операции доступа к памяти выполняются в три этапа:
- предварительная загрузка строки: отправляется адрес строки, и внутренние шины памяти предварительно загружаются (длительность tRP)
- доступ к строке: внутренняя строка памяти считывается и записывается во внутренние защелки. В течение этого времени отправляется адрес столбца (длительность tRCD)
- доступ к столбцам: выбранные столбцы считываются в защелках строк и начинают отправляться в процессор (длительность tCL)
Доступ к строке — это длительная операция. Память — это матрица элементов ячейки. Чтобы увеличить объем памяти, ячейки должны быть как можно меньше. И при чтении ряда ячеек приходится управлять очень емкостной и большой шиной, которая проходит вдоль столбца памяти. Колебания напряжения очень низкие, и есть усилители-усилители для обнаружения небольших изменений напряжения.
После выполнения этой операции полная строка запоминается в виде защелок, и их чтение может быть быстрым, и обычно они отправляются в пакетном режиме.
Учитывая типичную память DDR4 с временем цикла ввода-вывода 1 ГГц, мы обычно имеем tRP / tRCD / tCL = 12-15 с / 12-15 с / 10-12 с, а полное время составляет около 40 циклов памяти (если частота процессора равна 4 ГГц, это ~ 160 циклов процессора).). Затем данные отправляются в пакетном режиме дважды за цикл, и каждый цикл отправляется 2×64 бита. Итак, передача данных добавляет 4 цикла для 64 байт, и это добавило бы только 2 цикла для 32 байт.
Таким образом, сокращение строки кэша с 64B до 32B сократит время передачи на ~ 2/40 = 5%
Если адрес строки не изменяется, предварительная загрузка и чтение строки памяти не требуется, а время доступа составляет ~ 15 циклов памяти. В этом случае относительное увеличение времени передачи 64B по сравнению с 32B больше, но все же ограничено: ~ 2/15 ~ 15%.
Обе оценки не учитывают дополнительное время, необходимое для обработки пропусков в иерархии памяти, и фактический процент будет еще меньше.
Данные могут быть отправлены памятью «первым критическим словом». Если процессору требуется заданное слово, адрес этого слова отправляется в память. Как только строка прочитана, память отправляет сначала это слово, а затем другие слова в строке кэша. Таким образом, кэши могут обслуживать запрос процессора, как только получено первое слово, какой бы ни была строка кэша, и уменьшение ширины строки не повлияет на задержку кэша. Таким образом, при использовании этой функции время записи в память не изменится.
В последних процессорах обмен между различными уровнями кэшей основан на ширине строки кэша, и отправка критического слова первым не приносит никакого выигрыша.
Кроме того, большие размеры строк уменьшают обязательные пропуски благодаря пространственной локализации, а уменьшение размера строки негативно скажется на частоте пропусков в кэше.
Наконец, использование больших строк кэша увеличивает скорость передачи данных между кэшем и памятью.
Единственным негативным аспектом больших строк кэша (помимо небольшого увеличения времени передачи) является то, что количество строк в кэше уменьшается, и могут увеличиться пропуски конфликтов. Но из-за большой ассоциативности современных кэшей этот эффект ограничен.
Комментарии:
1. сократите время передачи на 5% , но это не общая задержка при пропуске кэша: вы оставляете время для процессора, чтобы выяснить, что это был промах кэша L3, отправляя запрос вниз по иерархии памяти к контроллеру памяти и снова создавая резервную копию.
2. Повторный: ранний перезапуск = возобновление выполнения при поступлении критического слова, и сначала критическое слово: это отлично подходит для процессоров с внутренними шинами, которые намного уже, чем строка кэша. Но, вероятно, на современных процессорах Intel (Haswell и более поздние версии, где ширина шины из кэша L2 <-> L1d составляет 64 байта), вероятно, нет смысла использовать критическое слово в первую очередь. Вся строка поступает в один и тот же цикл. Мы с BeeOnRope обсуждали это не так давно, но я не могу найти его в Google. :/
3. Наш вывод заключался в том, что даже помимо полнолинейной шины предварительная выборка HW и так далее, вероятно, означает, что часто нет возможности выполнить CW первым в современном высокопроизводительном процессоре с неработоспособным исполнением. У вас также может быть несколько невыполненных ошибок в одной строке, и «критическим» может быть тот, чей адрес был готов 2-й. Так что, вероятно, не стоит усложнять многие высокопроизводительные процессоры, где целой строке требуется всего пара внутренних циклов для отправки по внутренним шинам, когда она, наконец, поступает на контроллер памяти из DRAM. (И произведение задержки на пропускную способность велико для подсистемы памяти в целом.)
4. Все заданные времена явно приблизительны. Вы правы в отношении дополнительного времени пропуска кэша, и фактическая задержка будет больше, возможно, на 40 циклов процессора (т. Е. ~ 10 циклов памяти), но получить точную информацию об этих таймингах практически невозможно. Это не меняет общей идеи о небольшом влиянии больших строк кэша. Что касается проблемы с критическим словом, вся внутренняя передача выполняется по всей строке, вполне вероятно, что она больше не используется.
5. Даже на Skylake (клиенте), en.wikichip.org/wiki/intel/microarchitectures /… показывает, что ширина кольцевой шины между ядрами составляет всего 32 байта, поэтому передача L3<-> L2 занимает 2 цикла для отправки строки. И да, задержка загрузки при пропуске кэша зависит от задержки DRAM, но ~ 42 тактовых частоты ядра не совсем незначительны 7-cpu.com/cpu/Skylake.html . И это хуже на многоядерных Xeon с большим количеством переходов на кольцевой шине, прежде чем вы доберетесь до контроллера памяти. (Заметно худшая задержка, а пропускная способность в одном потоке тоже хуже.) Тем не менее, хорошая правка.