Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Кэша процессора является кэш - аппаратных средств , используемый центральным процессором (ЦП) от компьютера , чтобы уменьшить среднюю стоимость (время или энергию) для доступа к данным из основной памяти . [1] Кэш - это меньшая, более быстрая память, расположенная ближе к ядру процессора , в которой хранятся копии данных из часто используемых областей основной памяти . Большинство процессоров имеют иерархию из нескольких уровней кэша (L1, L2, часто L3 и редко даже L4) с отдельными кэшами для инструкций и данных на уровне 1.

Существуют и другие типы кешей (которые не учитываются в «размере кеша» наиболее важных кешей, упомянутых выше), например, буфер быстрого преобразования (TLB), который является частью блока управления памятью (MMU), который есть в большинстве процессоров.

Обзор [ править ]

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

Большинство современных настольных и серверных процессоров имеют как минимум три независимых кэша: кэш инструкций для ускорения выборки исполняемых инструкций, кеш данных для ускорения выборки и хранения данных и буфер быстрого преобразования (TLB), используемый для ускорения виртуального преобразования в другое. преобразование физических адресов как для исполняемых инструкций, так и для данных. Один TLB может быть предоставлен для доступа как к инструкциям, так и к данным, или может быть предоставлен отдельный TLB инструкций (ITLB) и TLB данных (DTLB). [2] Кэш данных обычно организован в виде иерархии большего количества уровней кэша (L1, L2 и т.д .; см. Также многоуровневые кеши ниже). Однако кеш TLB является частьюблок управления памятью (MMU) и не имеет прямого отношения к кэшам ЦП.

История [ править ]

Первые процессоры, использовавшие кэш, имели только один уровень кеша; в отличие от кеша более позднего уровня 1, он не был разделен на L1d (для данных) и L1i (для инструкций). Разделение кэша L1 началось в 1976 году с ЦП IBM 801 [3] [4], стало массовым в 1993 году с Intel Pentium и в 1997 году на рынке встроенных ЦП с ARMv5TE. В 2015 году даже SoC стоимостью ниже доллара разделили кэш L1. У них также есть кэш L2, а для более крупных процессоров - кеш L3. Кэш L2 обычно не разделяется и действует как общий репозиторий для уже разделенного кеша L1. Каждое ядро многоядерного процессораимеет выделенный кэш L1 и обычно не используется ядрами. Кэш L2 и кеши более высокого уровня могут совместно использоваться ядрами. Кэш L4 в настоящее время встречается редко и обычно находится в (форме) динамической памяти с произвольным доступом (DRAM), а не в статической памяти с произвольным доступом (SRAM), на отдельном кристалле или чипе (в исключительных случаях это eDRAM ). используется для всех уровней кеш-памяти, вплоть до L1). Исторически так было и с L1, в то время как более крупные чипы позволяли интегрировать его и, как правило, все уровни кэш-памяти, за возможным исключением последнего уровня. Каждый дополнительный уровень кеша имеет тенденцию быть больше и оптимизирован по-своему.

Кеши (как и для оперативной памяти исторически) обычно имеют размер: 2, 4, 8, 16 и т. Д. KiB ; когда размер до MiB (то есть для большего размера, не-L1), очень рано шаблон сломался, чтобы обеспечить большие кеши без принудительного использования парадигмы удвоения размера, например, с Intel Core 2 Duo с 3 MiB L2 кешем в апреле 2008 года. Однако гораздо позже для размеров L1, которые все еще учитываются только в небольшом количестве КиБ, однако IBM zEC12 с 2012 года является исключением, чтобы получить необычно большой для своего времени кэш данных L1 96 КиБ, и, например, IBM z13, имеющий Кэш инструкций L1 96 КБ (и кэш данных L1 128 КБ), [5] и Intel Ice Lakeна базе процессоров с 2018 года, с кешем данных L1 48 КиБ и кешем инструкций L1 48 КБ. В 2020 году некоторые процессоры Intel Atom (до 24 ядер) имеют (кратные) 4,5 и 15 МБ кэш-памяти. [6] [7]

Записи кеша [ править ]

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

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

Политики [ править ]

Политика замены [ править ]

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

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

Написать политику [ править ]

Если данные записываются в кэш, в какой-то момент они также должны быть записаны в основную память; время этой записи известно как политика записи. В кэше со сквозной записью каждая запись в кэш вызывает запись в основную память. В качестве альтернативы, в кэше с обратной записью или обратным копированием записи не сразу же зеркалируются в основную память, а вместо этого кеш отслеживает, какие места были записаны, отмечая их как грязные.. Данные в этих местах записываются обратно в основную память только тогда, когда эти данные удаляются из кеша. По этой причине промах при чтении в кэше с обратной записью может иногда потребовать двух обращений к памяти для обслуживания: один для первой записи грязного места в основную память, а другой - для чтения нового места из памяти. Кроме того, запись в область основной памяти, которая еще не отображена в кэше с обратной записью, может вытеснить уже загрязненную область, тем самым освобождая это пространство кэша для новой области памяти.

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

Кэшированные данные из основной памяти могут быть изменены другими объектами (например, периферийными устройствами, использующими прямой доступ к памяти (DMA) или другим ядром в многоядерном процессоре ), и в этом случае копия в кэше может стать устаревшей или несвежий. В качестве альтернативы, когда ЦП в многопроцессорной системе обновляет данные в кэше, копии данных в кэшах, связанных с другими ЦП, становятся устаревшими. Протоколы связи между диспетчерами кеша, которые поддерживают согласованность данных, известны как протоколы согласованности кеша .

Производительность кеша [ править ]

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

CPU глохнет [ править ]

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

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

Ассоциативность [ править ]

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

Политика размещения определяет, где в кэше будет помещена копия конкретной записи в основной памяти. Если политика размещения может свободно выбирать любую запись в кэше для хранения копии, кэш называется полностью ассоциативным . С другой стороны, если каждая запись в основной памяти может находиться только в одном месте кеша, кэш отображается напрямую . Многие кеши реализуют компромисс, при котором каждая запись в основной памяти может переходить в любое из N мест в кэше и описывается как ассоциативная N-сторонняя установка. [8] Например, кэш данных уровня 1 в AMD Athlon является двусторонним ассоциативным, что означает, что любое конкретное место в основной памяти может быть кэшировано в любом из двух мест в кэше данных уровня 1.

Выбор правильного значения ассоциативности требует компромисса . Если есть десять мест, в которые политика размещения могла бы сопоставить ячейку памяти, то, чтобы проверить, находится ли это место в кэше, необходимо выполнить поиск в десяти записях кэша. Проверка большего количества мест требует больше энергии и площади микросхемы и, возможно, больше времени. С другой стороны, кеши с большей ассоциативностью страдают меньшим количеством промахов (см. Конфликты промахов ниже), так что ЦП тратит меньше времени на чтение из медленной основной памяти. Общий принцип заключается в том, что удвоение ассоциативности, от прямого сопоставления к двустороннему или от двустороннего к четырехстороннему, имеет примерно такой же эффект на повышение частоты совпадений, как и удвоение размера кэша. Однако увеличение ассоциативности более четырех не так сильно улучшает показатель совпадений [9].и обычно выполняются по другим причинам (см. виртуальный псевдоним ниже). Некоторые процессоры могут динамически снижать ассоциативность своих кэшей в состояниях с низким энергопотреблением, что действует как мера энергосбережения. [10]

В порядке от худшего, но простого к лучшему, но сложного:

  • Кэш с прямым отображением - хорошее время в лучшем случае, но непредсказуемое в худшем
  • Двухсторонний ассоциативный кэш
  • Двусторонний асимметричный ассоциативный кеш [11]
  • Четырехсторонний ассоциативный кэш
  • Восьмисторонний ассоциативный кэш, часто используемый в более поздних реализациях
  • 12-позиционный ассоциативный кэш, аналогичный восьмипозиционному
  • Полностью ассоциативный кеш - лучший показатель пропусков, но практичен только для небольшого количества записей.

Кэш с прямым отображением [ править ]

В этой организации кэша каждое место в основной памяти может входить только в одну запись в кэше. Следовательно, кэш с прямым отображением также может называться «односторонним ассоциативным набором кешей». У него нет политики размещения как таковой, так как нет выбора, содержимое какой записи кэша удалить. Это означает, что если два местоположения соответствуют одной и той же записи, они могут постоянно нокаутировать друг друга. Кэш с прямым отображением, хотя и проще, для обеспечения сопоставимой производительности должен быть намного больше, чем ассоциативный, и это более непредсказуемо. Пусть x - номер блока в кэше, y - номер блока памяти, а n - количество блоков в кеше, тогда отображение выполняется с помощью уравнения x = y modп .

Двухсторонний ассоциативный кэш [ править ]

Если каждое место в основной памяти можно кэшировать в любом из двух мест в кэше, возникает логичный вопрос: какое из двух? Самая простая и наиболее часто используемая схема, показанная на правой диаграмме выше, заключается в использовании младших разрядов индекса ячейки памяти в качестве индекса для кэш-памяти и наличии двух записей для каждого индекса. Одним из преимуществ этой схемы является то, что теги, хранящиеся в кэше, не должны включать ту часть адреса основной памяти, которая подразумевается индексом кэш-памяти. Поскольку теги кэша имеют меньше битов, для них требуется меньше транзисторов, они занимают меньше места на плате процессора или микросхеме микропроцессора и могут считываться и сравниваться быстрее. Также LRU это особенно просто, поскольку для каждой пары нужно хранить только один бит.

Спекулятивное исполнение [ править ]

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

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

Двухсторонний асимметричный ассоциативный кеш [ править ]

Другие схемы были предложены, такие как перекос кэш , [11] , где индекс 0 способ является прямым, как указано выше, но индекс для пути 1 выполнен с хэш - функции . Хорошая хеш-функция обладает свойством, что адреса, которые конфликтуют с прямым сопоставлением, имеют тенденцию не конфликтовать при сопоставлении с хеш-функцией, и поэтому менее вероятно, что программа пострадает от неожиданно большого количества конфликтных пропусков из-за патологического доступа. шаблон. Обратной стороной является дополнительная задержка при вычислении хеш-функции. [12]Кроме того, когда приходит время загрузить новую строку и удалить старую, может быть трудно определить, какая существующая строка использовалась наименее недавно, потому что новая строка конфликтует с данными в разных индексах в каждом случае; Отслеживание LRU для неискаженных кэшей обычно выполняется для каждого набора. Тем не менее, асимметрично-ассоциативные кэши имеют большие преимущества перед традиционными ассоциативно-множественными. [13]

Псевдоассоциативный кеш [ править ]

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

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

Структура записи кэша [ править ]

Записи строк кэша обычно имеют следующую структуру:

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

«Размер» кеша - это объем данных основной памяти, который он может хранить. Этот размер можно рассчитать как количество байтов, хранящихся в каждом блоке данных, умноженное на количество блоков, хранящихся в кэше. ( Биты тега, флага и кода исправления ошибок не включены в размер [14], хотя они влияют на физическую область кэша.)

Эффективный адрес памяти, который идет вместе со строкой кэша (блоком памяти), разделяется ( MSB на LSB ) на тег, индекс и смещение блока. [15] [16]

Индекс описывает, в какой набор кэш-памяти были помещены данные. Длина индекса - это биты для s наборов кэша.

Смещение блока определяет желаемые данные в сохраненном блоке данных в строке кэша. Обычно эффективный адрес выражается в байтах, поэтому длина смещения блока равна битам, где b - количество байтов на блок данных. Тег содержит наиболее значимые биты адреса, которые проверяются по всем строкам в текущем наборе (набор был получен по индексу), чтобы узнать, содержит ли этот набор запрошенный адрес. Если это так, происходит попадание в кеш. Длина тега в битах следующая:

tag_length = address_length - index_length - block_offset_length

Некоторые авторы называют смещение блока просто «смещением» [17] или «смещением». [18] [19]

Пример [ править ]

Исходный процессор Pentium 4 имел четырехсторонний ассоциативный кэш данных L1 размером 8  КиБ с 64-байтовыми блоками кэша. Следовательно, имеется 8 КиБ / 64 = 128 блоков кеша. Количество наборов равно количеству блоков кеша, разделенному на количество способов ассоциативности, что приводит к 128/4 = 32 наборам, и, следовательно, 2 5  = 32 различных индекса. Имеется 2 6  = 64 возможных смещения. Поскольку адрес ЦП имеет ширину 32 бита, это подразумевает 32-5-6 = 21 бит для поля тега.

Исходный процессор Pentium 4 также имел восьмипозиционный ассоциативный интегрированный кэш L2 размером 256 КиБ со 128-байтовыми блоками кэша. Это подразумевает 32 - 8 - 7 = 17 бит для поля тега. [17]

Биты флагов [ править ]

Кэш инструкций требует только один бит флага на запись строки кэша: допустимый бит. Действительный бит указывает, загружен ли блок кэша действительными данными.

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

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

Ошибка кеширования [ править ]

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

Промахи чтения из кэша инструкций обычно вызывают самую большую задержку, потому что процессор или, по крайней мере, поток выполнения должен ждать (останавливаться), пока инструкция не будет извлечена из основной памяти. Промахи чтения кэша из кеша данных обычно вызывают меньшую задержку, потому что инструкции, не зависящие от чтения кэша, могут быть выданы и продолжать выполнение до тех пор, пока данные не будут возвращены из основной памяти, и зависимые инструкции могут возобновить выполнение. Пропуски записи кэша в данныекэш обычно вызывает самую короткую задержку, потому что запись может быть поставлена ​​в очередь и есть несколько ограничений на выполнение последующих инструкций; процессор может продолжать, пока очередь не заполнится. Подробное описание типов промахов см. В разделе « Измерение и метрика производительности кеша» .

Перевод адресов [ править ]

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

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

Для целей настоящего обсуждения есть три важных особенности преобразования адресов:

  • Задержка: физический адрес доступен из MMU через некоторое время, возможно, через несколько циклов, после того, как виртуальный адрес станет доступным из генератора адресов.
  • Псевдонимы: несколько виртуальных адресов могут отображаться на один физический адрес. Большинство процессоров гарантируют, что все обновления этого физического адреса будут происходить в программном порядке. Чтобы предоставить эту гарантию, процессор должен гарантировать, что только одна копия физического адреса находится в кэше в любой момент времени.
  • Гранулярность: виртуальное адресное пространство разбито на страницы. Например, виртуальное адресное пространство 4  ГиБ можно разделить на 1 048 576 страниц размером 4 КиБ, каждая из которых может быть сопоставлена ​​независимо. Может поддерживаться несколько размеров страниц; см. виртуальную память для уточнения.

Некоторые ранние системы виртуальной памяти были очень медленными, потому что им требовался доступ к таблице страниц (хранящейся в основной памяти) перед каждым запрограммированным доступом к основной памяти. [NB 1] Без кешей это фактически вдвое снижает скорость доступа к памяти. Первый аппаратный кэш, используемый в компьютерной системе, на самом деле был не кешем данных или инструкций, а скорее TLB. [21]

Кеши можно разделить на четыре типа в зависимости от того, соответствует ли индекс или тег физическим или виртуальным адресам:

  • Физически индексированные кэши с физическими тегами (PIPT) используют физический адрес как для индекса, так и для тега. Хотя это просто и позволяет избежать проблем с псевдонимом, это также медленно, поскольку физический адрес должен быть найден (что может включать промах TLB и доступ к основной памяти), прежде чем этот адрес можно будет найти в кэше.
  • Виртуально индексированные кэши с виртуальными тегами (VIVT) используют виртуальный адрес как для индекса, так и для тега. Эта схема кэширования может привести к гораздо более быстрому поиску, поскольку не нужно сначала консультироваться с MMU, чтобы определить физический адрес для данного виртуального адреса. Однако VIVT страдает от проблем с псевдонимом, когда несколько разных виртуальных адресов могут относиться к одному и тому же физическому адресу. В результате такие адреса будут кэшироваться отдельно, несмотря на то, что они относятся к одной и той же памяти, что вызовет проблемы с согласованностью. Хотя решения этой проблемы существуют [22]они не работают для стандартных протоколов согласования. Другая проблема - омонимы, когда один и тот же виртуальный адрес отображается на несколько разных физических адресов. Невозможно различить эти сопоставления, просто глядя на сам виртуальный индекс, хотя потенциальные решения включают: очистку кеша после переключения контекста , принудительное неперекрытие адресных пространств, пометку виртуального адреса идентификатором адресного пространства (ASID ). Кроме того, существует проблема, связанная с изменением сопоставления виртуального и физического, что потребует сброса строк кэша, поскольку виртуальные устройства больше не будут действительными. Все эти проблемы отсутствуют, если теги используют физические адреса (VIPT).
  • Виртуально проиндексированы, физически отмечены(VIPT) кеши используют виртуальный адрес для индекса и физический адрес в теге. Преимущество перед PIPT - меньшая задержка, так как строка кэша может просматриваться параллельно с трансляцией TLB, однако тег нельзя сравнивать, пока не станет доступен физический адрес. Преимущество перед VIVT состоит в том, что поскольку тег имеет физический адрес, кеш может обнаруживать омонимы. Теоретически VIPT требует больше бит тегов, потому что некоторые из битов индекса могут различаться между виртуальным и физическим адресами (например, бит 12 и выше для страниц размером 4 КиБ) и должны быть включены как в виртуальный индекс, так и в физический тег. На практике это не проблема, потому что во избежание проблем с согласованностью кэши VIPT не имеют таких индексных битов (например,путем ограничения общего количества бит для индекса и смещения блока до 12 для страниц размером 4 КиБ); это ограничивает размер кэшей VIPT размером страницы, умноженной на ассоциативность кэша.
  • Физически индексированные, виртуально помеченные (PIVT) кэши часто заявляются в литературе как бесполезные и несуществующие. [23] Однако MIPS R6000 использует этот тип кэша как единственную известную реализацию. [24] R6000 реализован на основе эмиттерно-связанной логики , которая является чрезвычайно быстрой технологией, не подходящей для больших запоминающих устройств, таких как TLB.. R6000 решает эту проблему, помещая память TLB в зарезервированную часть кеш-памяти второго уровня, имеющую крошечный высокоскоростной «фрагмент» TLB на кристалле. Кэш индексируется по физическому адресу, полученному из среза TLB. Однако, поскольку срез TLB транслирует только те биты виртуального адреса, которые необходимы для индексации кеша, и не использует никаких тегов, могут возникать ложные попадания в кэш, что решается путем добавления тегов с помощью виртуального адреса.

Скорость этого повторения ( задержка загрузки ) имеет решающее значение для производительности ЦП, поэтому большинство современных кешей уровня 1 виртуально индексируются, что, по крайней мере, позволяет выполнять поиск TLB MMU параллельно с извлечением данных из кэш-памяти.

Но виртуальное индексирование - не лучший выбор для всех уровней кеширования. Стоимость работы с виртуальными псевдонимами растет с увеличением размера кеша, и в результате большинство кешей уровня 2 и более крупных физически индексируются.

Кеши исторически использовали как виртуальные, так и физические адреса для тегов кеша, хотя виртуальные теги сейчас не распространены. Если поиск TLB может завершиться до поиска в кэш-памяти, то физический адрес доступен вовремя для сравнения тегов, и нет необходимости в виртуальном тегировании. Таким образом, большие кэши обычно помечаются физически, и только небольшие кэши с очень малой задержкой помечаются виртуально. В последних процессорах общего назначения виртуальные теги были заменены vhints, как описано ниже.

Проблемы с омонимами и синонимами [ править ]

Кэш, основанный на виртуальном индексировании и тегах, становится несовместимым после того, как один и тот же виртуальный адрес отображается на разные физические адреса ( омонимы ), что может быть решено путем использования физического адреса для тегирования или путем сохранения идентификатора адресного пространства в строке кэша. Однако последний подход не помогает решить проблему синонимов , при которой несколько строк кэша в конечном итоге хранят данные для одного и того же физического адреса. Запись в такие места может обновить только одно место в кэше, оставив другие с несовместимыми данными. Эта проблема может быть решена путем использования неперекрывающихся макетов памяти для разных адресных пространств, в противном случае кеш (или его часть) должен быть очищен при изменении сопоставления. [25]

Виртуальные теги и vhints [ править ]

Большим преимуществом виртуальных тегов является то, что для ассоциативных кешей они позволяют выполнять сопоставление тегов до того, как будет выполнено виртуальное преобразование в физическое. Однако проверки согласованности и выселения представляют собой физический адрес для действий. Аппаратное обеспечение должно иметь некоторые средства преобразования физических адресов в индекс кэша, как правило, путем хранения физических тегов, а также виртуальных тегов. Для сравнения: кэш с физическими тегами не нуждается в хранении виртуальных тегов, что проще. Когда виртуальное отображение на физическое удаляется из TLB, записи кэша с этими виртуальными адресами должны быть каким-то образом очищены. В качестве альтернативы, если записи кэша разрешены на страницах, не отображаемых TLB, то эти записи должны быть сброшены при изменении прав доступа на этих страницах в таблице страниц.

Операционная система также может гарантировать, что никакие виртуальные псевдонимы не находятся одновременно в кэше. Операционная система обеспечивает эту гарантию, принудительно применяя раскраску страниц, как описано ниже. Некоторые ранние процессоры RISC (SPARC, RS / 6000) использовали этот подход. В последнее время он не использовался, так как стоимость оборудования для обнаружения и удаления виртуальных псевдонимов упала, а сложность программного обеспечения и снижение производительности идеальной раскраски страниц увеличились.

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

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

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

Возможно, максимальное сокращение виртуальных подсказок можно найти в Pentium 4 (ядра Willamette и Northwood). В этих процессорах виртуальная подсказка фактически состоит из двух битов, а кеш-память является четырехсторонней ассоциативной. Фактически, оборудование поддерживает простую перестановку виртуального адреса в индекс кэша, так что не требуется памяти с адресацией по содержимому (CAM) для выбора правильного из четырех способов выборки.

Раскраска страницы [ править ]

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

Чтобы понять проблему, рассмотрим ЦП с физически индексированным кэшем уровня 2 с прямым отображением в 1 МиБ и страницами виртуальной памяти 4 КиБ. Последовательные физические страницы сопоставляются с последовательными местоположениями в кэше до тех пор, пока после 256 страниц шаблон не перевернется. Мы можем пометить каждую физическую страницу цветом от 0 до 255, чтобы обозначить, в каком месте кэша она может находиться. Местоположения на физических страницах с разными цветами не могут конфликтовать в кеше.

Программисты, пытающиеся максимально использовать кэш, могут организовать шаблоны доступа своих программ так, чтобы в любой момент времени требовалось кэшировать только 1 МиБ данных, что позволяет избежать потери емкости. Но они также должны гарантировать, что шаблоны доступа не имеют конфликтных пропусков. Один из способов подумать об этой проблеме - разделить виртуальные страницы, которые использует программа, и назначить им виртуальные цвета так же, как физические цвета были назначены физическим страницам раньше. Затем программисты могут организовать шаблоны доступа своего кода так, чтобы никакие две страницы с одинаковым виртуальным цветом не использовались одновременно. Существует обширная литература по таким оптимизациям (например, оптимизация вложенности циклов ), в основном от сообщества высокопроизводительных вычислений (HPC) .

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

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

Если операционная система может гарантировать, что каждая физическая страница соответствует только одному виртуальному цвету, тогда нет виртуальных псевдонимов, и процессор может использовать виртуально индексированные кэши без необходимости дополнительных виртуальных зондов псевдонимов во время обработки промахов. В качестве альтернативы ОС может очищать страницу из кеша всякий раз, когда она меняет один виртуальный цвет на другой. Как упоминалось выше, этот подход использовался для некоторых ранних проектов SPARC и RS / 6000.

Иерархия кеша в современном процессоре [ править ]

Иерархия памяти сервера AMD Bulldozer

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

Хотя все блоки кэша в конкретном кэше имеют одинаковый размер и одинаковую ассоциативность, обычно кеши «нижнего уровня» (называемые кеш-памятью уровня 1) имеют меньшее количество блоков, меньший размер блока и меньшее количество блоков в установлен, но имеют очень короткое время доступа. Кеши «более высокого уровня» (то есть уровня 2 и выше) имеют постепенно увеличивающееся количество блоков, больший размер блока, большее количество блоков в наборе и относительно большее время доступа, но все же намного быстрее, чем основная память.

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

Специализированные тайники [ править ]

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

Кэш жертвы [ править ]

Кэш жертвой является кэш , используемый для хранения блоков выселенных из кэша процессора при замене. Кэш жертвы находится между основным кешем и путем его пополнения и содержит только те блоки данных, которые были удалены из основного кеша. Кэш жертвы обычно полностью ассоциативен и предназначен для уменьшения количества конфликтных пропусков. Многие часто используемые программы не требуют ассоциативного сопоставления для всех доступов. Фактически, только небольшая часть обращений к памяти программы требует высокой ассоциативности. Кэш жертвы использует это свойство, обеспечивая высокую ассоциативность только для этих обращений. Он был представлен Норманом Джуппи из DEC в 1990 году. [26]

Вариант Intel Crystalwell [27] своих процессоров Haswell представил на упаковке 128 МБ кеш-памяти eDRAM Level 4, которая служит жертвой кеш-памяти уровня 3 процессора. [28] В микроархитектуре Skylake кэш 4-го уровня больше не работает как кэш жертвы. [29]

Кеш трассировки [ править ]

Одним из наиболее ярких примеров специализации кеша является кэш трассировки (также известный как кеш трассировки выполнения ), обнаруженный в микропроцессорах Intel Pentium 4 . Кэш трассировки - это механизм для увеличения полосы пропускания выборки инструкций и уменьшения энергопотребления (в случае Pentium 4) путем хранения следов инструкций , которые уже были извлечены и декодированы. [30]

Кэш трассировки хранит инструкции либо после того, как они были декодированы, либо после их удаления. Обычно инструкции добавляются в кеши трассировки группами, представляющими либо отдельные базовые блоки, либо динамические трассировки команд. Кэш трассировки Pentium 4 хранит микрооперации, возникающие в результате декодирования инструкций x86, обеспечивая также функциональность кеша микроопераций. Имея это, в следующий раз, когда потребуется инструкция, ее не нужно будет снова декодировать в микрооперации. [31] : 63–68

Запись объединяющего кеша (WCC) [ править ]

Написать Коалесцентный Cache [32] представляет собой специальный кэш , который является частью кэша L2 в AMD «s Bulldozer микроархитектуры . Хранилища из обоих кешей L1D в модуле проходят через WCC, где они буферизуются и объединяются. Задача WCC - уменьшить количество операций записи в кэш L2.

Кэш микроопераций (μop или uop) [ править ]

Кэш микро-операции ( μop кэш , UOP кэш или UC ) [33] представляет собой специализированный кэш , который хранит микрооперацию декодированных инструкций, как получено непосредственно от декодеров команд или из кэша команд. Когда инструкция должна быть декодирована, кеш-память μop проверяется на предмет ее декодированной формы, которая повторно используется при кэшировании; если он недоступен, инструкция декодируется и затем кэшируется.

Одной из первых работ, описывающих микрооперационный кэш как альтернативный интерфейс для семейства процессоров Intel P6, является статья 2001 года « Микрооперационный кэш: мощный интерфейс для ISA переменной длины» . [34] Позже Intel включила кэши μop в свои процессоры Sandy Bridge и в последовательные микроархитектуры, такие как Ivy Bridge и Haswell . [31] : 121–123 [35] AMD реализовала кеш-память μop в своей микроархитектуре Zen . [36]

Выборка полных предварительно декодированных инструкций устраняет необходимость многократного декодирования сложных инструкций переменной длины в более простые микрооперации фиксированной длины и упрощает процесс прогнозирования, выборки, вращения и выравнивания извлеченных инструкций. Кэш-память μop эффективно разгружает оборудование выборки и декодирования, тем самым снижая энергопотребление и улучшая внешний интерфейс декодированных микроопераций. Кэш-память μop также увеличивает производительность за счет более последовательной доставки декодированных микроопераций на серверную часть и устранения различных узких мест в логике выборки и декодирования ЦП. [34] [35]

Кэш μop имеет много общего с кешем трассировки, хотя кэш μop намного проще, что обеспечивает лучшую энергоэффективность; это делает его более подходящим для реализации на устройствах с батарейным питанием. Основным недостатком кэша трассировки, приводящим к его неэффективности, является сложность оборудования, необходимая для эвристического принятия решения о кэшировании и повторном использовании динамически создаваемых трассировок инструкций. [37]

Кэш целевых инструкций перехода [ править ]

Целевая ветвь кэш или кэш команд целевой ветви , имя , используемое на ARM микропроцессоров , [38] представляет собой специализированный кэш , который держит несколько первых инструкций в качестве конечного пункта взятой отрасли. Это используется процессорами с низким энергопотреблением, которым не нужен нормальный кэш инструкций, поскольку система памяти способна доставлять инструкции достаточно быстро, чтобы удовлетворить потребности ЦП без такового. Однако это применимо только к последовательным инструкциям; для перезапуска выборки инструкций по новому адресу все еще требуется несколько циклов задержки, вызывая несколько циклов пузыря конвейера после передачи управления. Целевой кэш ветвления предоставляет инструкции для этих нескольких циклов, избегая задержки после большинства выполненных ветвей.

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

Умный кеш [ править ]

Интеллектуальный кеш - это метод кэширования уровня 2 или уровня 3 для нескольких ядер исполнения, разработанный Intel .

Smart Cache разделяет фактическую кэш-память между ядрами многоядерного процессора . По сравнению с выделенным кеш-памятью для каждого ядра, общая частота промахов кеш-памяти уменьшается, когда не всем ядрам требуются равные части пространства кеш-памяти. Следовательно, одно ядро ​​может использовать полный кэш уровня 2 или 3, если другие ядра неактивны. [39] Кроме того, общий кеш позволяет быстрее распределять память между различными ядрами выполнения. [40]

Многоуровневые кеши [ править ]

Другая проблема - это фундаментальный компромисс между задержкой кеширования и частотой обращений. Кеши большего размера имеют лучшие показатели попаданий, но большую задержку. Чтобы решить эту проблему, многие компьютеры используют несколько уровней кеш-памяти, при этом небольшие быстрые кеши подкрепляются более крупными и медленными кэшами. Многоуровневые кэши обычно работают, сначала проверяя самый быстрый кэш уровня 1 ( L1 ); если он попадает, процессор работает на высокой скорости. Если этот меньший кеш отсутствует, проверяется следующий самый быстрый кеш ( уровень 2 , L2 ) и т. Д. Перед доступом к внешней памяти.

Поскольку разница в задержке между основной памятью и самым быстрым кешем стала больше, некоторые процессоры начали использовать целых три уровня встроенного кеша. Чувствительные к цене конструкции использовали это для вытягивания всей иерархии кеш-памяти на кристалле, но к 2010-м годам некоторые из наиболее производительных проектов вернулись к наличию больших внекристальных кешей, которые часто реализуются в eDRAM и устанавливаются на многокристальный модуль , как четвертый уровень кеша. В редких случаях, например, в центральном процессоре IBM z15 (2019), все уровни до L1 реализуются eDRAM, полностью заменяя SRAM (для кеша SRAM по-прежнему используется для регистров). ARM на базе Apple , M1имеет кэш L1 192 КБ для каждого из четырех высокопроизводительных ядер, необычно большой объем; однако четыре высокоэффективных ядра имеют всего 128 КБ.

Преимущества кешей L3 и L4 зависят от шаблонов доступа приложения. Примеры продуктов, включающих кеши L3 и L4, включают следующее:

  • Alpha 21164 (1995) имеет от 1 до 64 МБ кэш-памяти третьего уровня вне кристалла.
  • IBM POWER4 (2001) имеет внешние кэши L3 объемом 32 МБ на процессор, совместно используемые несколькими процессорами.
  • Itanium 2 (2003 г.) имеет встроенный кэш унифицированного уровня 3 (L3) объемом 6 МБ ; Itanium 2 модуля (2003) MX 2 включает в себя два 2 процессора Itanium наряду с общим 64 МБ кэш - памяти L4 на модуль мульти-чип , который был совместим по выводам с процессором Madison.
  • Продукт Intel Xeon MP под кодовым названием "Tulsa" (2006 г.) имеет 16 МБ встроенной кэш-памяти третьего уровня, совместно используемой двумя ядрами процессора.
  • AMD Phenom II (2008) имеет до 6 МБ встроенной унифицированной кэш-памяти третьего уровня.
  • Intel Core i7 (2008 г.) имеет интегрированную объединенную кэш-память третьего уровня объемом 8 МБ, которая используется всеми ядрами.
  • Процессоры Intel Haswell со встроенной графикой Intel Iris Pro имеют 128 МБ eDRAM, выступающей по сути как кэш L4. [41]

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

Файлы регистров иногда также имеют иерархию: Cray-1 (около 1976 г.) имел восемь адресов «A» и восемь регистров скалярных данных «S», которые обычно можно было использовать. Также был набор из 64 регистров с адресом «B» и 64 скалярных данных «T», доступ к которым занимал больше времени, но был быстрее, чем основная память. Регистры «B» и «T» были предоставлены, потому что Cray-1 не имел кеша данных. (Однако у Cray-1 был кеш инструкций.)

Многоядерные чипы [ править ]

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

Как правило, совместное использование кэша L1 нежелательно, потому что в результате увеличение задержки приведет к тому, что каждое ядро ​​будет работать значительно медленнее, чем одноядерный чип. Однако для кеша самого высокого уровня, вызываемого последним перед доступом к памяти, наличие глобального кеша желательно по нескольким причинам, например, позволяя одному ядру использовать весь кеш, уменьшая избыточность данных, делая это возможным для разных процессов или потоков для совместного использования кэшированных данных и упрощения используемых протоколов согласованности кешей. [42] Например, восьмиъядерный чип с тремя уровнями может включать в себя кэш L1 для каждого ядра, один промежуточный кэш L2 для каждой пары ядер и один кэш L3, совместно используемый всеми ядрами.

Общий кеш верхнего уровня, который вызывается перед доступом к памяти, обычно называется кешем последнего уровня (LLC). Дополнительные методы используются для повышения уровня параллелизма, когда LLC совместно используется несколькими ядрами, включая разделение его на несколько частей, которые адресуют определенные диапазоны адресов памяти и могут быть доступны независимо. [43]

Раздельное или единое [ править ]

В отдельной структуре кэша инструкции и данные кэшируются отдельно, что означает, что строка кэша используется для кэширования либо инструкций, либо данных, но не обоих одновременно; Различные преимущества были продемонстрированы с отдельными буферами для трансляции данных и инструкций . [44] В унифицированной структуре это ограничение отсутствует, и строки кэша могут использоваться для кэширования как инструкций, так и данных.

Эксклюзивное против инклюзивного [ править ]

Многоуровневые кеши вводят новые дизайнерские решения. Например, в некоторых процессорах все данные в кэше L1 также должны находиться где-то в кэше L2. Эти кеши называются строго инклюзивными . У других процессоров (например, AMD Athlon ) есть эксклюзивные кеши: данные гарантированно находятся не более чем в одном из кешей L1 и L2, но никогда в обоих. Тем не менее, для других процессоров (например, Intel Pentium II , III и 4 ) не требуется, чтобы данные в кэше L1 также находились в кэше L2, хотя часто это может происходить. Для этой промежуточной политики не существует общепринятого названия; [45] [46] два общих названия - «неисключительное» и «частично включающее».

Преимущество эксклюзивных кешей заключается в том, что они хранят больше данных. Это преимущество больше, когда эксклюзивный кэш L1 сопоставим с кешем L2, и уменьшается, если кэш L2 во много раз больше, чем кэш L1. Когда L1 пропускает, а L2 достигает доступа, строка кэша попадания в L2 заменяется строкой в ​​L1. Этот обмен - это немного больше работы, чем просто копирование строки из L2 в L1, что и делает инклюзивный кеш. [46]

Одно из преимуществ строго инклюзивных кешей состоит в том, что когда внешние устройства или другие процессоры в многопроцессорной системе хотят удалить строку кэша из процессора, им достаточно, чтобы процессор проверил кэш L2. В иерархиях кешей, которые не требуют включения, необходимо также проверить кеш L1. Недостатком является корреляция между ассоциативностью кешей L1 и L2: если кэш L2 не имеет, по крайней мере, такого количества способов, как все кеши L1 вместе, эффективная ассоциативность кешей L1 ограничена. Другой недостаток инклюзивного кэша состоит в том, что всякий раз, когда происходит вытеснение в кэше L2, (возможно) соответствующие строки в L1 также должны быть вытеснены, чтобы поддерживать инклюзивность. Это довольно большая работа, и это приведет к более высокому уровню пропусков L1. [46]

Еще одно преимущество инклюзивных кешей состоит в том, что больший кэш может использовать большие строки кеша, что уменьшает размер вторичных тегов кеша. (Эксклюзивные кеши требуют, чтобы оба кеша имели строки кэша одинакового размера, чтобы строки кеша могли быть заменены местами при промахе L1, попадании L2.) Если вторичный кеш на порядок больше, чем первичный, а данные кэша являются На порядок больше, чем теги кэша, эта сохраненная область тега может быть сопоставима с увеличивающейся областью, необходимой для хранения данных кэша L1 в L2. [47]

Память блокнота [ править ]

Электронная память - это тип памяти процессора, подобный неоднородному доступу к памяти кэша L1, но использующий неоднородный доступ к памяти .

Пример: K8 [ править ]

Чтобы проиллюстрировать как специализацию, так и многоуровневое кэширование, вот иерархия кеш-памяти ядра K8 в процессоре AMD Athlon 64 . [48]

Иерархия кеширования ядра K8 в процессоре AMD Athlon 64.

K8 имеет четыре специализированных кэша: кэш инструкций, TLB инструкций, TLB данных и кэш данных. Каждый из этих кешей специализирован:

  • Кэш инструкций хранит копии 64-байтовых строк памяти и извлекает 16 байтов за каждый цикл. Каждый байт в этом кэше хранится в десяти битах, а не в восьми, с дополнительными битами, обозначающими границы инструкций (это пример предварительного кодирования). Кэш имеет только защиту четности, а не ECC , потому что четность меньше, и любые поврежденные данные могут быть заменены свежими данными, извлеченными из памяти (которая всегда имеет актуальную копию инструкций).
  • TLB инструкций хранит копии записей таблицы страниц (PTE). В каждом цикле выборки инструкции виртуальный адрес транслируется через этот TLB в физический адрес. Каждая запись занимает в памяти четыре или восемь байтов. Поскольку K8 имеет переменный размер страницы, каждый из TLB разделен на два раздела: один для хранения PTE, отображающих страницы размером 4 КБ, а другой для хранения PTE, отображающих страницы размером 4 или 2 МБ. Разделение позволяет упростить полностью ассоциативную схему соответствия в каждой секции. Операционная система сопоставляет различные разделы виртуального адресного пространства с PTE разного размера.
  • TLB данных имеет две копии, в которых хранятся идентичные записи. Две копии обеспечивают два доступа к данным за цикл для преобразования виртуальных адресов в физические адреса. Как и TLB инструкций, этот TLB разделен на записи двух типов.
  • Кэш данных хранит копии 64-байтовых строк памяти. Он разделен на 8 банков (каждый из которых хранит 8 КБ данных) и может извлекать два 8-байтовых данных за каждый цикл, если эти данные находятся в разных банках. Есть две копии тегов, потому что каждая 64-байтовая строка распределяется между всеми восемью банками. Каждая копия тега обрабатывает один из двух обращений за цикл.

K8 также имеет многоуровневые кеши. Существуют TLB инструкций и данных второго уровня, в которых хранятся только PTE, отображающие 4 КБ. Кеши инструкций и данных, а также различные TLB могут заполняться из большого унифицированного кеша L2. Этот кэш является эксклюзивным как для кэшей инструкций L1, так и для кешей данных, что означает, что любая 8-байтовая строка может находиться только в одном из кэша инструкций L1, кэша данных L1 или кеша L2. Тем не менее, строка в кэше данных может иметь PTE, который также находится в одном из TLB - операционная система отвечает за поддержание согласованности TLB, очищая их части при обновлении таблиц страниц в памяти.

K8 также кэширует информацию, которая никогда не сохраняется в памяти, - прогнозную информацию. Эти кеши не показаны на диаграмме выше. Как обычно для этого класса процессора, K8 имеет довольно сложное предсказание ветвлений , с таблицами , которые помогают предсказать , будут ли приняты филиалы и другие таблицы, предсказывающие целями филиалов и трамплины. Часть этой информации связана с инструкциями как в кэше инструкций уровня 1, так и в унифицированном вторичном кэше.

K8 использует интересный трюк для хранения прогнозируемой информации с инструкциями во вторичном кэше. Строки во вторичном кэше защищены от случайного повреждения данных (например, от удара альфа-частицы ) либо с помощью ECC, либо с помощью контроля четности , в зависимости от того, были ли эти строки исключены из первичных кэшей данных или инструкций. Поскольку код четности занимает меньше битов, чем код ECC, строки из кэша инструкций имеют несколько запасных битов. Эти биты используются для кэширования информации предсказания ветвления, связанной с этими инструкциями. В конечном итоге предсказатель ветвления имеет более крупную эффективную таблицу хронологии и, следовательно, большую точность.

Больше иерархий [ править ]

У других процессоров есть другие виды предикторов (например, предиктор обхода хранилища-загрузки в DEC Alpha 21264 ), и различные специализированные предикторы, вероятно, будут процветать в будущих процессорах.

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

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

Тег RAM [ править ]

В компьютерной инженерии тег RAM используется для указания, какое из возможных мест памяти в настоящее время хранится в кэше ЦП. [49] [50] Для простой конструкции с прямым отображением можно использовать быструю SRAM . В более высоких ассоциативных кэшах обычно используется память с адресацией по содержимому .

Реализация [ править ]

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

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

Ассоциативный кэш более сложен, потому что для определения того, какую запись кеша выбрать, необходимо прочитать какой-либо тег. N-сторонний ассоциативный кэш уровня 1 обычно считывает все N возможных тегов и N данных параллельно, а затем выбирает данные, связанные с совпадающим тегом. Кэш-память уровня 2 иногда экономит электроэнергию, считывая сначала теги, так что из SRAM данных считывается только один элемент данных.

Путь чтения для двухстороннего ассоциативного кеша

Смежная диаграмма предназначена для пояснения того, как используются различные поля адреса. Бит 31 адреса является наиболее значимым, бит 0 - наименее значимым. На диаграмме показаны SRAM, индексация и мультиплексирование для 4-килобайтного, двухстороннего ассоциативного, виртуально индексированного и виртуально маркированного кэша с 64-байтовыми (B) строками, 32-битной шириной чтения и 32-битным виртуальным адресом.

Поскольку размер кэша составляет 4 КБ и 64 строки B, в кеше всего 64 строки, и мы читаем одновременно две из SRAM тегов, которые имеют 32 строки, каждая с парой 21-битных тегов. Хотя любая функция битов виртуального адреса с 31 по 6 может использоваться для индексации SRAM тегов и данных, проще всего использовать младшие биты.

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

Более современный кэш может быть 16 КБ, 4-полосный ассоциативный, виртуально индексированный, виртуально с подсказками и физически помеченный, с 32 строками B, 32-битной шириной чтения и 36-битными физическими адресами. Повторение пути чтения для такого кеша очень похоже на путь, указанный выше. Вместо тегов читаются vhints и сопоставляются с подмножеством виртуального адреса. Позже в конвейере виртуальный адрес преобразуется в физический адрес TLB, и считывается физический тег (только один, поскольку vhint указывает путь чтения кеша). Наконец, физический адрес сравнивается с физическим тегом, чтобы определить, произошло ли совпадение.

Некоторые конструкции SPARC увеличили скорость своих кэшей L1 на несколько задержек затвора, свернув сумматор виртуальных адресов в декодеры SRAM. См. Сумма адресованного декодера .

История [ править ]

Ранняя история технологии кэширования тесно связана с изобретением и использованием виртуальной памяти. [ необходима цитата ] Из-за нехватки и стоимости полупроводниковой памяти ранние мэйнфреймы в 1960-х годах использовали сложную иерархию физической памяти, отображенную на плоское пространство виртуальной памяти, используемое программами. Технологии памяти будут охватывать полупроводник, магнитный сердечник, барабан и диск. Виртуальная память, видимая и используемая программами, будет плоской, а кэширование будет использоваться для извлечения данных и инструкций в самую быструю память перед доступом к процессору. Были проведены обширные исследования по оптимизации размеров кеша. Было обнаружено, что оптимальные значения во многом зависят от языка программирования, используемого с Algol, требующим наименьшего размера, а Fortran и Cobol - с наибольшим размером кэша. [оспаривается ]

На заре микрокомпьютерных технологий доступ к памяти был лишь немного медленнее, чем доступ к регистрам . Но с 1980-х годов [51] разрыв в производительности процессора и памяти увеличивается. Микропроцессоры стали намного быстрее памяти, особенно с точки зрения их рабочей частоты , поэтому память стала узким местом в производительности . Хотя технически было возможно, чтобы вся основная память была такой же быстрой, как процессор, был выбран более экономически жизнеспособный путь: использовать большое количество низкоскоростной памяти, но также ввести небольшую высокоскоростную кэш-память, чтобы уменьшить разрыв в производительности. Это обеспечило на порядок большую емкость - по той же цене - при лишь незначительном снижении совокупной производительности.

Первые реализации TLB [ править ]

Первый документальное использование в TLB было на GE 645 [52] и IBM 360/67 , [53] оба из которых используется ассоциативная память как TLB.

Кэш первой инструкции [ править ]

Первое задокументированное использование кэша инструкций было на CDC 6600 . [54]

Первый кеш данных [ править ]

Первое задокументированное использование кэша данных было на IBM System / 360 Model 85 [55].

В микропроцессорах 68k [ править ]

68010 , выпущенный в 1982 году, имеет режим «петля» , который можно считать кэш крошечного и специальным случаем инструкции, ускоряющую петлю , которые состоят только из двух команд. 68020 , выпущенный в 1984 году, заменил , что с типичной кэш команд из 256 байт, будучи первым 68k процессор серии с признаком истинной на кристалле кэш - память.

68030 , выпущенный в 1987 году, в основном 68020 ядро с дополнительной кэш данных 256 байт, на чипе блок управления памятью (MMU), процесс усадки, и режим добавлен взрыв для кэшей. 68040 , выпущенный в 1990 году, имеет раздвоение инструкции и кэш - память данных четыре килобайта каждых. 68060 , выпущенный в 1994 году, имеют следующее: кэш данных 8 Кб (четыре способа ассоциативный), 8 кэша команд Кб (четыре способа ассоциативный), 96-байтный буфер FIFO буфер команд, 256-запись кэш ветви, и 64-вход буфер MMU кэша трансляции адресов (четырехсторонний ассоциативный).

В микропроцессорах x86 [ править ]

Когда микропроцессоры x86 в 386 достигли тактовой частоты 20 МГц и выше, для повышения производительности в системах начали использоваться небольшие объемы быстрой кэш-памяти. Это произошло из-за того, что DRAM, используемая для основной памяти, имела значительную задержку, до 120 нс, а также циклы обновления. Кэш был построен из более дорогих, но значительно более быстрых ячеек памяти SRAM , которые в то время имели задержки от 10 до 25 нс. Ранние кэши были внешними по отношению к процессору и обычно располагались на материнской плате в виде восьми или девяти DIP- устройств, помещенных в гнезда, чтобы включить кэш в качестве дополнительной опции или функции обновления.

Некоторые версии процессора Intel 386 могут поддерживать от 16 до 256 КБ внешнего кэша.

В процессоре 486 кэш размером 8 КБ был интегрирован непосредственно в кристалл ЦП. Этот кеш был назван кешем уровня 1 или L1, чтобы отличать его от более медленного кеша на материнской плате или кеша уровня 2 (L2). Эти кэши на материнской плате были намного больше, наиболее распространенный размер - 256 КБ. Популярность кэш-памяти на материнской плате продолжалась в эпоху Pentium MMX, но стала устаревшей из-за внедрения SDRAM и растущего несоответствия между тактовой частотой шины и тактовой частотой процессора, из-за чего кэш на материнской плате был лишь немного быстрее, чем основная память.

Следующее развитие реализации кэш-памяти в микропроцессорах x86 началось с Pentium Pro , который перенес вторичный кэш в тот же пакет, что и микропроцессор, работающий с той же частотой, что и микропроцессор.

Кэш-память на материнской плате пользовалась продолжительной популярностью благодаря процессорам AMD K6-2 и AMD K6-III , которые по-прежнему использовали Socket 7 , который ранее использовался Intel с кешами на материнской плате. K6-III содержал 256 КБ встроенной кэш-памяти L2 и использовал преимущества встроенной кэш-памяти в качестве кэша третьего уровня, названного L3 (выпускались материнские платы с объемом встроенной кэш-памяти до 2 МБ). После того, как Socket 7 устарела, кэш на материнской плате исчез из систем x86.

Трехуровневые кэши снова использовались сначала с введением нескольких процессорных ядер, где кэш L3 был добавлен к кристаллу ЦП. Стало обычным явлением, что общий размер кэша становится все больше в новых поколениях процессоров, и в последнее время (по состоянию на 2011 год) нередко встречаются размеры кэша уровня 3 в десятки мегабайт. [56]

Intel представила встроенный кэш уровня 4 с микроархитектурой Haswell . Процессоры Crystalwell [27] Haswell, оснащенные вариантом GT3e интегрированной графики Intel Iris Pro, фактически имеют 128 МБ встроенной памяти DRAM ( eDRAM ) в том же корпусе. Этот кэш L4 динамически распределяется между встроенным графическим процессором и процессором и служит кешем жертвы для кеша L3 процессора. [28]

В микропроцессорах ARM [ править ]

ЦП Apple M1 имеет 128 или 192 КБ кэша L1 инструкций для каждого ядра (важно для задержки / однопоточной производительности), в зависимости от типа ядра, необычно большой для кеша L1 любого типа ЦП, а не только для ноутбука, в то время как общий кеш размер памяти не является необычно большим (общий размер более важен для пропускной способности) для портативного компьютера, и в мэйнфреймах IBM доступны гораздо большие общие размеры (например, L3 или L4).

Текущее исследование [ править ]

Ранние конструкции кеша полностью ориентированы на прямую стоимость кеша и оперативной памяти и среднюю скорость выполнения. Более поздние конструкции кэшей также учитывают энергоэффективность , [57] отказоустойчивость и другие цели. [58] [59] Исследователи также исследовали использование новых технологий памяти, таких как eDRAM (встроенная DRAM) и NVRAM (энергонезависимая RAM), для проектирования кешей. [60]

Для компьютерных архитекторов доступно несколько инструментов, которые помогут изучить компромиссы между временем цикла кэш-памяти, энергией и площадью; симулятор кэша CACTI [61] и симулятор набора команд SimpleScalar - это два варианта с открытым исходным кодом. Моделирование кэшей 2D и 3D SRAM , eDRAM , STT-RAM , ReRAM и PCM можно выполнить с помощью инструмента DESTINY. [62]

Многопортовый кеш [ править ]

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

См. Также [ править ]

  • Предиктор ветвления
  • Кэш (вычисления)
  • Алгоритмы кеширования
  • Согласованность кеша
  • Инструкции по управлению кешем
  • Иерархия кеша
  • Политики размещения кеша
  • Предварительная выборка кеша
  • Dinero (симулятор кеша от Университета Висконсина )
  • Блок инструкции
  • Местоположение ссылки
  • Мемоизация
  • Иерархия памяти
  • Микрооперация
  • Распределение без записи
  • Оперативная память блокнота
  • Сумма адресованного декодера
  • Буфер записи

Примечания [ править ]

  1. ^ Самая первая машина подкачки, Ferranti Atlas [20] [21], не имела таблиц страниц в основной памяти; была ассоциативная память с одной записью на каждые 512 слов на странице кадра ядра.

Ссылки [ править ]

  1. Габриэль Торрес (12 сентября 2007 г.). «Как работает кэш-память» .
  2. ^ « Обзор методов проектирования TLB », Параллелизм и вычисления, 2016.
  3. ^ Смит, Алан Джей (сентябрь 1982 г.). «Кэш-память» (PDF) . Вычислительные обзоры . 14 (3): 473–530. DOI : 10.1145 / 356887.356892 . S2CID 6023466 .  
  4. ^ «Изменение компьютерной архитектуры - способ повысить пропускную способность, - предлагают исследователи IBM». Электроника . 49 (25): 30–31. 23 декабря 1976 г.
  5. ^ "IBM z13 и IBM z13s Техническое введение" (PDF) . IBM . Март 2016. с. 20.
  6. ^ «Информационный бюллетень о продукте: ускорение сетевой инфраструктуры 5G от ядра до периферии» . Intel Newsroom (пресс-релиз) . Проверено 12 апреля 2020 . Кэш L1 32 КБ / ядро, кэш L2 4,5 МБ на 4-ядерный кластер и общий кэш LLC до 15 МБ.
  7. ^ Смит, Райан. «Intel представляет Atom P5900: 10-нм атом для сетей радиодоступа» . www.anandtech.com . Проверено 12 апреля 2020 .
  8. ^ «Дизайн кэша» (PDF) . ucsd.edu . 2010-12-02. п. 10–15 . Проверено 24 февраля 2014 .
  9. ^ IEEE Xplore - Построение ассоциативного кэша поэтапного набора для снижения энергопотребления . Ieeexplore.ieee.org (11 августа 2009 г.). Проверено 30 июля 2013.
  10. ^ Санджив Джахагирдар; Варгезе Джордж; Индер Содхи; Райан Уэллс (2012). «Управление питанием микросхемы Intel Core третьего поколения под кодовым названием Ivy Bridge» (PDF) . hotchips.org . п. 18 . Проверено 16 декабря 2015 .
  11. ^ а б Андре Сезнек (1993). «Случай для двусторонних асимметричных кешей». Новости компьютерной архитектуры ACM SIGARCH . 21 (2): 169–178. DOI : 10.1145 / 173682.165152 .
  12. ^ а б К. Козыракис. «Лекция 3: Расширенные методы кэширования» (PDF) . Архивировано из оригинального (PDF) 7 сентября 2012 года.
  13. ^ Микроархитектура «Асимметрично-ассоциативные кеши имеют ... основные преимущества перед обычными ассоциативно-множественными кэшами».
  14. ^ Натан Н. Сэдлер; Дэниел Дж. Сорин (2006). «Выбор схемы защиты от ошибок для кэша данных L1 микропроцессора» (PDF) . п. 4.
  15. ^ Джон Л. Хеннесси; Дэвид А. Паттерсон (2011). Компьютерная архитектура: количественный подход . п. В-9. ISBN 978-0-12-383872-8.
  16. ^ Дэвид А. Паттерсон; Джон Л. Хеннесси (2009). Компьютерная организация и дизайн: аппаратно-программный интерфейс . п. 484. ISBN 978-0-12-374493-7.
  17. ^ a b c Джин Куперман (2003). «Основы кеширования» .
  18. Бен Дуган (2002). «По поводу кеша» .
  19. ^ Харви Г. Крагон. «Системы памяти и конвейерные процессоры». 1996. ISBN 0-86720-474-5 , ISBN 978-0-86720-474-2 . «Глава 4.1: Адресация кэша, виртуальная или реальная» стр. 209 [1]  
  20. ^ Самнер, FH; Haley, G .; Чен, ECY (1962). «Центральный блок управления компьютера« Атлас »». Обработка информации 1962 . Материалы Конгресса ИФИП. Материалы Конгресса ИФИП 62. Спартанец.
  21. ^ a b Килберн, Т .; Пейн, РБ; Ховарт, ди-джей (декабрь 1961 г.). «Супервайзер Атласа» . Компьютеры - ключ к тотальному управлению системами . Материалы конференций. 20 Труды Восточной совместной компьютерной конференции Вашингтон, округ Колумбия, Макмиллан. С. 279–294.
  22. ^ Каширас, Стефанос; Рос, Альберто (2013). Новая перспектива эффективной согласованности виртуального кэша . 40-й Международный симпозиум по компьютерной архитектуре (ISCA) . С. 535–547. CiteSeerX 10.1.1.307.9125 . DOI : 10.1145 / 2485922.2485968 . ISBN  9781450320795. S2CID  15434231 .
  23. ^ «Понимание кеширования» . Linux Journal . Проверено 2 мая 2010 .
  24. ^ Тейлор, Джордж; Дэвис, Питер; Фармвальд, Майкл (1990). «TLB Slice - недорогой высокоскоростной механизм трансляции адресов». CH2887-8 / 90/0000/0355 $ 01.OO. Cite journal requires |journal= (help)
  25. Тимоти Роско; Эндрю Бауманн (2009-03-03). «Кеши и TLB расширенных операционных систем (263-3800-00L)» (PDF) . systems.ethz.ch . Архивировано из оригинального (PDF) 07.10.2011 . Проверено 14 февраля 2016 .
  26. ^ NPJouppi. «Повышение производительности кэша с прямым отображением за счет добавления небольшого полностью ассоциативного кеша и буферов предварительной выборки». . - семнадцатый ежегодный международный симпозиум по компьютерной архитектуры, 1990. Материалы, DOI : 10,1109 / ISCA.1990.134547
  27. ^ a b "Продукты (ранее Crystal Well)" . Intel . Проверено 15 сентября 2013 .
  28. ^ a b «Обзор графики Intel Iris Pro 5200: тестирование Core i7-4950HQ» . AnandTech . Проверено 16 сентября 2013 .
  29. ^ Ян Cutress (2 сентября 2015). «Запуск Intel Skylake для мобильных и настольных ПК с анализом архитектуры» . AnandTech.
  30. ^ Ананд Лал Шимпи (2000-11-20). «Кэш Pentium 4 - Intel Pentium 4 1,4 ГГц и 1,5 ГГц» . AnandTech . Проверено 30 ноября 2015 .
  31. ^ a b Агнер Туман (2014-02-19). «Микроархитектура процессоров Intel, AMD и VIA: руководство по оптимизации для программистов на ассемблере и производителей компиляторов» (PDF) . agner.org . Проверено 21 марта 2014 .
  32. Дэвид Кантер (26 августа 2010 г.). «Микроархитектура AMD Bulldozer - продолжение подсистемы памяти» . Технологии реального мира .
  33. Дэвид Кантер (25 сентября 2010 г.). «Микроархитектура Intel Sandy Bridge - декодирование инструкций и кэш-память» . Технологии реального мира .
  34. ^ a b Варух Соломон; Ави Мендельсон; Дорон Оренштейн; Йоав Альмог; Ронни Ронен (август 2001 г.). "Кэш микроопераций: мощный интерфейс для ISA переменной длины" (PDF) . ISLPED'01: Материалы Международного симпозиума 2001 г. по маломощной электронике и дизайну (IEEE Cat. No. 01TH8581) . Intel . С. 4–9. DOI : 10,1109 / LPE.2001.945363 . ISBN  978-1-58113-371-4. S2CID  195859085 . Проверено 6 октября 2013 .
  35. ^ a b Ананд Лал Шимпи (2012-10-05). «Анализ архитектуры Intel Haswell» . AnandTech . Проверено 20 октября 2013 .
  36. ^ Ян Cutress (2016-08-18). «Микроархитектура AMD Zen: раскрыты двойные планировщики, кэш микроопераций и иерархия памяти» . AnandTech . Проверено 3 апреля 2017 .
  37. Леон Гу; Дипти Мотиани (октябрь 2003 г.). «Кэш трассировки» (PDF) . Проверено 6 октября 2013 .
  38. Кун Ню (28 мая 2015 г.). "Как работает BTIC (кэш целевых инструкций ветвления)?" . Проверено 7 апреля 2018 .
  39. ^ «Intel Smart Cache: Демо» . Intel . Проверено 26 января 2012 .
  40. ^ «Внутри Intel Core Microarchitecture и интеллектуальный доступ к памяти» . Intel . 2006. с. 5. Архивировано из оригинального (PDF) 29 декабря 2011 года . Проверено 26 января 2012 .
  41. ^ «Обзор графики Intel Iris Pro 5200: Core i7-4950HQ протестирован» . AnandTech . Проверено 25 февраля 2014 .
  42. ^ Тянь Тянь; Чиу-Пи Ши (2012-03-08). «Программные методы для многоядерных систем с общим кешем» . Intel . Проверено 24 ноября 2015 .
  43. Одед Лемпель (28 июля 2013). «Семейство процессоров Intel Core 2-го поколения: Intel Core i7, i5 и i3» (PDF) . hotchips.org . п. 7–10,31–45 . Проверено 21 января 2014 .
  44. ^ Чен, Дж. Брэдли; Борг, Анита; Джуппи, Норман П. (1992). «Исследование производительности TLB на основе моделирования». Новости компьютерной архитектуры SIGARCH . 20 (2): 114–123. DOI : 10.1145 / 146628.139708 .
  45. ^ «Объяснение кэша L1 и L2» . amecomputers.com . Проверено 9 июня 2014 .
  46. ^ а б в Ин Чжэн; Брайан Т. Дэвис; Мэтью Джордан (25.06.2004). «Оценка производительности эксклюзивных иерархий кэша» (PDF) . Мичиганский технологический университет . Проверено 9 июня 2014 .
  47. ^ Aamer Джалил; Эрик Борч; Малини Бхандару; Саймон С. Стили-младший; Джоэл Эмер (27.09.2010). «Достижение производительности неинклюзивного кэша с помощью инклюзивных кешей» (PDF) . jaleels.org . Проверено 9 июня 2014 .
  48. ^ «AMD K8» . Sandpile.org . Архивировано из оригинала на 2007-05-15 . Проверено 2 июня 2007 .
  49. ^ "Cortex-R4 и Cortex-R4F Техническое справочное руководство" . arm.com . Проверено 28 сентября 2013 .
  50. ^ "L210 Cache Controller Technical Reference Manual" . arm.com . Проверено 28 сентября 2013 .
  51. ^ Mahapatra, Nihar R .; Венкатрао, Балакришна (1999). «Узкое место процессор-память: проблемы и решения» (PDF) . Перекресток . 5 (3es): 2 – es. DOI : 10.1145 / 357783.331677 . S2CID 11557476 . Проверено 5 марта 2013 .  
  52. ^ Системное руководство GE-645 (PDF) . General Electric . Январь 1968 . Проверено 10 июля 2020 .
  53. ^ Функциональные характеристики IBM System / 360 Model 67 (PDF) . Третье издание. IBM . Февраль 1972 года. GA27-2719-2.
  54. ^ Джеймс Э. Торнтон (октябрь 1964 г.), "Параллельная работа с контрольными данными 6600" (PDF) , Proc. осенней совместной компьютерной конференции 27-29 октября 1964 г., часть II: высокоскоростные компьютерные системы
  55. ^ IBM (июнь 1968 г.). Функциональные характеристики IBM System / 360 Model 85 (PDF) . ВТОРОЕ ИЗДАНИЕ. A22-6916-1.
  56. ^ «Семейство процессоров Intel® Xeon® E7» . Intel . Проверено 10 октября 2013 .
  57. ^ Sparsh Mittal (март 2014). «Обзор архитектурных методов повышения энергоэффективности кэша» . Устойчивые вычисления: информатика и системы . 4 (1): 33–43. DOI : 10.1016 / j.suscom.2013.11.001 .
  58. ^ Салли Ади (2009). «Дизайн микросхемы предотвращает скрытую атаку на данные» . Cite journal requires |journal= (help)
  59. ^ Чжэнхун Ван; Руби Б. Ли (8–12 ноября 2008 г.). Новая архитектура кеш-памяти с повышенной производительностью и безопасностью (PDF) . 41-й ежегодный международный симпозиум IEEE / ACM по микроархитектуре. С. 83–93. Архивировано из оригинального (PDF) 6 марта 2012 года.
  60. ^ Спарш Миттал; Джеффри С. Веттер; Донг Ли (июнь 2015 г.). «Обзор архитектурных подходов к управлению встроенной памятью DRAM и энергонезависимыми встроенными кэшами» . Транзакции IEEE в параллельных и распределенных системах . 26 (6): 1524–1537. DOI : 10.1109 / TPDS.2014.2324563 . S2CID 14583671 . 
  61. ^ "CACTI" . Hpl.hp.com . Проверено 2 мая 2010 .
  62. ^ "3d_cache_modeling_tool / destiny" . code.ornl.gov . Проверено 26 февраля 2015 .

Внешние ссылки [ править ]

  • Память, часть 2: кеши ЦП  - статья Ульриха Дреппера на lwn.net, подробно описывающая кеши ЦП
  • Оценка ассоциативности в кэше ЦП - Хилл и Смит (1989) - вводит емкость, конфликты и обязательную классификацию
  • Производительность кэша для тестов SPEC CPU2000 - Hill and Cantin (2003) - этот справочный документ обновлялся несколько раз. В нем подробно и четко представлены результаты моделирования для достаточно широкого набора тестов и организаций кеширования.
  • Иерархия памяти в системах на основе кэша - Рууд ван дер Пас, 2002, Sun Microsystems - хорошая вводная статья в кэширование памяти ЦП
  • A Cache Primer - Пол Генуа, PE, 2004, Freescale Semiconductor, еще одна вводная статья
  • 8-позиционный ассоциативный кеш-память,  написанный на VHDL
  • Понимание кэширования и производительности ЦП  - статья Джона Стоукса об Ars Technica
  • Обзор процессора IBM POWER4  - статья Павла Данилова о ixbtlabs
  • Что такое кэш-память и ее типы!
  • Кэширование памяти  - лекция Принстонского университета