stringtranslate.com

Кэш процессора

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

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

Обзор

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

Многие современные настольные , серверные и промышленные процессоры имеют как минимум три независимых уровня кэшей (L1, L2 и L3) и различные типы кэшей:

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

История

Материнская плата компьютера NeXTcube (1990). В нижнем крае изображения слева от середины находится процессор Motorola 68040, работающий на частоте 25 МГц с двумя отдельными кэшами уровня 1 по 4 КиБ каждый на чипе, один для инструкций и один для данных. Плата не имеет внешнего кэша L2.

Ранние примеры кэшей ЦП включают Atlas 2 [3] и IBM System/360 Model 85 [4] [5] в 1960-х годах. Первые ЦП, которые использовали кэш, имели только один уровень кэша; в отличие от более позднего кэша уровня 1, он не был разделен на L1d (для данных) и L1i (для инструкций). Раздельный кэш L1 начался в 1976 году с ЦП IBM 801 , [6] [7] стал мейнстримом в конце 1980-х годов, и в 1997 году вышел на рынок встраиваемых ЦП с ARMv5TE. В 2015 году даже менее дорогие SoC разделяли кэш L1. Они также имеют кэши L2, а для более крупных процессоров также и кэши L3. Кэш L2 обычно не разделяется и действует как общее хранилище для уже разделенного кэша L1. Каждое ядро ​​многоядерного процессора имеет выделенный кэш L1 и обычно не является общим для ядер. Кэш L2 и кэши более высокого уровня могут быть общими для ядер. Кэш L4 в настоящее время встречается редко и, как правило, представляет собой динамическую память с произвольным доступом (DRAM) на отдельном кристалле или чипе, а не статическую память с произвольным доступом (SRAM). Исключением является случай, когда eDRAM используется для всех уровней кэша, вплоть до L1. Исторически L1 также находился на отдельном кристалле, однако большие размеры кристалла позволили интегрировать его, а также другие уровни кэша, за возможным исключением последнего уровня. Каждый дополнительный уровень кэша, как правило, больше и оптимизируется по-разному.

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

Операция

Кэш записи

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

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

Политики

Политика замены

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

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

Написать политику

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

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

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

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

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

Процессор останавливается

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

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

Ассоциативность

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

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

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

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

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

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

Двусторонний ассоциативный кэш

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

Спекулятивное исполнение

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

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

Двусторонний перекошенный ассоциативный кэш

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

Псевдоассоциативный кэш

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

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

Многоколоночный кэш

По сравнению с кэшем с прямым отображением, кэш с ассоциативным набором имеет уменьшенное количество бит для индекса набора кэша, который отображается на набор кэша, где остаются несколько путей или блоков, например, 2 блока для кэша с ассоциативным набором с 2 путями и 4 блока для кэша с ассоциативным набором с 4 путями. По сравнению с кэшем с прямым отображением, неиспользуемые биты индекса кэша становятся частью битов тега. Например, кэш с ассоциативным набором с 2 путями вносит 1 бит в тег, а кэш с ассоциативным набором с 4 путями вносит 2 бита в тег. Основная идея многоколоночного кэша [17] заключается в использовании индекса набора для отображения на набор кэша, как это делает обычный кэш с ассоциативным набором, и в использовании добавленных битов тега для индексирования пути в наборе. Например, в 4-канальном ассоциативном кэше два бита используются для индексации пути 00, пути 01, пути 10 и пути 11 соответственно. Такая двойная индексация кэша называется «отображением основного местоположения», и ее задержка эквивалентна доступу с прямым отображением. Обширные эксперименты по проектированию многоколоночного кэша [17] показывают, что коэффициент попадания в основные местоположения достигает 90%. Если отображение кэша конфликтует с блоком кэша в основном местоположении, существующий блок кэша будет перемещен в другой путь кэша в том же наборе, который называется «выбранное местоположение». Поскольку недавно проиндексированный блок кэша является последним использованным (MRU) блоком, он помещается в основное местоположение в многоколоночном кэше с учетом временной локальности. Поскольку многоколоночный кэш разработан для кэша с высокой ассоциативностью, количество путей в каждом наборе велико; таким образом, легко найти выбранное местоположение в наборе. Выбранный индекс местоположения с помощью дополнительного оборудования поддерживается для основного местоположения в блоке кэша. [ необходима ссылка ]

Многоколоночный кэш сохраняет высокий коэффициент попаданий из-за своей высокой ассоциативности и имеет сопоставимую низкую задержку с кэшем с прямым отображением из-за высокого процента попаданий в основные местоположения. Концепции основных местоположений и выбранных местоположений в многоколоночном кэше использовались в нескольких конструкциях кэша в чипе ARM Cortex R, [18] кэш-памяти Intel с предсказанием пути, [19] реконфигурируемой многоканальной ассоциативной кэш-памяти IBM [20] и динамическом выборе пути замены кэша Oracle на основе битов табуляции адреса. [21]

Структура записи кэша

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

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

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

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

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

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

tag_length = address_length - index_length - block_offset_length

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

Пример

Оригинальный процессор 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 бит для поля тега. [25]

Флаговые биты

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

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

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

Промах кэша

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

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

Перевод адреса

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

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

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

Одна из ранних систем виртуальной памяти, IBM M44/44X , требовала доступа к таблице отображения, хранящейся в основной памяти, перед каждым запрограммированным доступом к основной памяти. [28] [NB 1] При отсутствии кэшей и при том, что память таблицы отображения работала с той же скоростью, что и основная память, это фактически снижало скорость доступа к памяти вдвое. Две ранние машины, которые использовали таблицу страниц в основной памяти для отображения, IBM System/360 Model 67 и GE 645 , обе имели небольшую ассоциативную память в качестве кэша для доступа к таблице страниц в памяти. Обе машины предшествовали первой машине с кэшем для основной памяти, IBM System/360 Model 85 , поэтому первый аппаратный кэш, используемый в компьютерной системе, был не кэшем данных или инструкций, а скорее TLB.

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

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

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

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

Проблемы с омонимами и синонимами

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

Виртуальные теги и подсказки

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

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

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

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

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

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

Раскрашивание страниц

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

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

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

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

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

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

Методика программной раскраски страниц использовалась для эффективного разделения общего кэша последнего уровня (LLC) в многоядерных процессорах. [35] Это управление LLC на основе операционной системы в многоядерных процессорах было принято Intel. [36]

Иерархия кэша в современном процессоре

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

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

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

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

Специализированные кэши

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

Кэш жертвы

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

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

Кэш трассировки

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

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

Объединение кэша записи (WCC)

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

Кэш микроопераций (μop или uop)

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

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

Извлечение полных предварительно декодированных инструкций устраняет необходимость многократного декодирования сложных инструкций переменной длины в более простые микрооперации фиксированной длины и упрощает процесс прогнозирования, извлечения, вращения и выравнивания извлеченных инструкций. Кэш μop эффективно разгружает аппаратное обеспечение извлечения и декодирования, тем самым снижая энергопотребление и улучшая поставку frontend декодированных микроопераций. Кэш μop также повышает производительность за счет более последовательной доставки декодированных микроопераций в backend и устранения различных узких мест в логике извлечения и декодирования CPU. [45] [46]

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

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

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

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

Умный кэш

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

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

Многоуровневые кэши

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

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

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

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

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

Многоядерные чипы

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

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

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

Раздельный против единого

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

Эксклюзивный против инклюзивного

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

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

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

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

Блокнотная память

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

Пример: К8

Для иллюстрации как специализации, так и многоуровневого кэширования ниже представлена ​​иерархия кэша ядра K8 в процессоре AMD Athlon 64. [59]

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

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

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 используется для указания того, какое из возможных мест памяти в данный момент хранится в кэше ЦП. [60] [61] Для простого дизайна с прямым отображением можно использовать быструю SRAM . Более ассоциативные кэши обычно используют адресуемую по содержимому память .

Выполнение

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

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

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

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

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

Поскольку кэш составляет 4 КиБ и имеет 64 строки B, в кэше всего 64 строки, и мы считываем по две за раз из Tag 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-х годов [62] разрыв в производительности между процессором и памятью рос. Микропроцессоры развивались намного быстрее памяти, особенно с точки зрения их рабочей частоты , поэтому память стала узким местом производительности . Хотя технически было возможно сделать всю основную память такой же быстрой, как ЦП, был выбран более экономически выгодный путь: использовать много низкоскоростной памяти, но также ввести небольшую высокоскоростную кэш-память, чтобы смягчить разрыв в производительности. Это обеспечило на порядок большую емкость — за ту же цену — при лишь немного сниженной совокупной производительности.

Первые реализации TLB

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

Первый кэш инструкций

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

Первый кэш данных

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

В микропроцессорах 68k

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

Процессор 68030 , выпущенный в 1987 году, по сути представляет собой ядро ​​68020 с дополнительным 256-байтным кэшем данных, встроенным блоком управления памятью (MMU), сокращением процесса и добавленным пакетным режимом для кэшей.

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

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

В микропроцессорах x86

Пример материнской платы с микропроцессором i386 (33 МГц), кэшем 64 КБ (25 нс; 8 чипов в левом нижнем углу), 2 МБ DRAM (70 нс; 8 SIMM справа от кэша) и контроллером кэша ( Austek A38202; справа от процессора)

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

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

В процессоре 486 кэш объемом 8 КБ был интегрирован непосредственно в кристалл ЦП. Этот кэш назывался кэшем уровня 1 или L1, чтобы отличать его от более медленного кэша на материнской плате или кэша уровня 2 (L2). Эти кэши на материнской плате были намного больше, наиболее распространенным размером было 256 КБ. Были некоторые системные платы, которые содержали разъемы для дочерней платы Intel 485Turbocache , которая имела либо 64, либо 128 КБ кэш-памяти. [67] [68] Популярность кэша на материнской плате сохранялась в эпоху 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 размером в десятки мегабайт. [69]

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

В микропроцессорах ARM

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

Текущие исследования

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

Существует несколько инструментов, доступных компьютерным архитекторам, которые помогают исследовать компромиссы между временем цикла кэширования, энергопотреблением и площадью; симулятор кэширования CACTI [72] и симулятор набора инструкций SimpleScalar — это два варианта с открытым исходным кодом.

Многопортовый кэш

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

Смотрите также

Примечания

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

Ссылки

  1. Торрес, Габриэль (12 сентября 2007 г.). «Как работает кэш-память».
  2. ^ Су, Чао; Цзэн, Цинкай (10.06.2021). Никополитидис, Петрос (ред.). «Обзор атак по сторонним каналам на кэш-память ЦП: систематический анализ, модели безопасности и контрмеры». Безопасность и коммуникационные сети . 2021 : 1–15. doi : 10.1155/2021/5559552 . ISSN  1939-0122.
  3. ^ Лэнди, Барри (ноябрь 2012 г.). «Атлас 2 в Кембриджской математической лаборатории (и Олдермастон и Центр САПР)». В Кембридже были разработаны два хранилища на туннельных диодах; одно, которое работало очень хорошо, ускоряло выборку операндов, другое предназначалось для ускорения выборки инструкций. Идея заключалась в том, что большинство инструкций выполняются последовательно, поэтому при выборке инструкции это слово помещалось в хранилище подчиненного устройства в место, указанное адресом выборки по модулю 32; оставшиеся биты адреса выборки также сохранялись. Если нужное слово находилось в подчиненном устройстве, оно считывалось оттуда, а не из основной памяти. Это дало бы значительное ускорение циклам инструкций длиной до 32 инструкций и уменьшило бы эффект для циклов длиной до 64 слов.
  4. ^ "IBM System/360 Model 85 Functional Characteristics" (PDF) . IBM . Июнь 1968. A22-6916-1.
  5. ^ Липтэй, Джон С. (март 1968 г.). «Структурные аспекты модели System/360 85 — Часть II. Кэш» (PDF) . IBM Systems Journal . 7 (1): 15–21. doi :10.1147/sj.71.0015.
  6. ^ Смит, Алан Джей (сентябрь 1982 г.). «Кэш-память» (PDF) . Computing Surveys . 14 (3): 473–530. doi :10.1145/356887.356892. S2CID  6023466.
  7. ^ «Изменение архитектуры компьютера — способ повысить производительность, предполагают исследователи IBM». Электроника . 49 (25): 30–31. Декабрь 1976 г.
  8. ^ Уайт, Билл; Де Леон, Сесилия А.; и др. (март 2016 г.). «Техническое введение в IBM z13 и IBM z13s» (PDF) . IBM. стр. 20.
  9. ^ «Информационный листок о продукте: ускорение сетевой инфраструктуры 5G от ядра до периферии». Intel Newsroom (пресс-релиз). Корпорация Intel. 25 февраля 2020 г. Получено 18 апреля 2024 г. Кэш L1 объемом 32 КБ на ядро, кэш L2 объемом 4,5 МБ на кластер из 4 ядер и общий кэш LLC объемом до 15 МБ.
  10. ^ Смит, Райан. «Intel запускает Atom P5900: 10-нм Atom для сетей радиодоступа». AnandTech . Получено 12 апреля 2020 г.
  11. ^ "Проектирование кэша" (PDF) . ucsd.edu . 2010-12-02. стр. 10–15 . Получено 2023-01-29 .
  12. ^ Megalingam, Rajesh Kannan; Deepu, KB; Joseph, Iype P.; Vikram, Vandana (2009). Phased set associative cache design for reduced power consumer. 2nd IEEE International Conference on Computer Science and Information Technology, 2009. стр. 551–556. doi :10.1109/ICCSIT.2009.5234663. ISBN 978-1-4244-4519-6. S2CID  18236635 . Получено 18 октября 2023 г. – через ieeexplore.ieee.org.
  13. ^ Джахагирдар, Санджив; Джордж, Варгезе; Содхи, Индер; Уэллс, Райан (2012). «Управление питанием микроархитектуры Intel Core третьего поколения, ранее известной под кодовым названием Ivy Bridge» (PDF) . hotchips.org . стр. 18. Архивировано из оригинала (PDF) 29-07-2020 . Получено 16-12-2015 .
  14. ^ ab Seznec, André (1993). «Дело в пользу двусторонних перекошенных ассоциативных кэшей». ACM SIGARCH Computer Architecture News . 21 (2): 169–178. doi : 10.1145/173682.165152 .
  15. ^ ab Kozyrakis, C. "Lecture 3: Advanced Caching Techniques" (PDF) . Архивировано из оригинала (PDF) 7 сентября 2012 г.
  16. ^ "Микроархитектура". Было показано, что асимметрично-ассоциативные кэши имеют два основных преимущества по сравнению с обычными наборно-ассоциативными кэшами.
  17. ^ ab Чжан, Чэньси; Чжан, Сяодун; Янь, Юн (сентябрь–октябрь 1997 г.). «Две быстрые и высокоассоциативные схемы кэширования». IEEE Micro . 17 (5): 40–49. doi :10.1109/40.621212.
  18. ^ "Руководство программиста серии ARM® Cortex®-R". developer.arm.com . 2014 . Получено 2023-05-04 .
  19. ^ «Кэш-память с прогнозированием пути».
  20. ^ "Реконфигурируемая многоканальная ассоциативная кэш-память". 22 ноября 1994 г. Получено 19 января 2024 г.
  21. ^ "Заявка на патент США на выбор пути динамической замены кэша на основе битов адресного тега (заявка № 20160350229, выданная 1 декабря 2016 г.) – Поиск патентов Justia". patents.justia.com .
  22. ^ Сэдлер, Натан Н.; Сорин, Дэниел Л. (2006). «Выбор схемы защиты от ошибок для кэша данных L1 микропроцессора» (PDF) . стр. 4.
  23. ^ Хеннесси, Джон Л.; Паттерсон, Дэвид А. (2011). Архитектура компьютера: количественный подход. Elsevier. стр. B-9. ISBN 978-0-12-383872-8.
  24. ^ Паттерсон, Дэвид А.; Хеннесси, Джон Л. (2009). Организация и проектирование компьютеров: интерфейс оборудования и программного обеспечения. Морган Кауфманн. стр. 484. ISBN 978-0-12-374493-7.
  25. ^ abc Куперман, Джин (2003). «Основы кэширования».
  26. ^ Дуган, Бен (2002). «Относительно кэша».
  27. ^ Cragon, Harvey G. (1996). Системы памяти и конвейерные процессоры. Jones & Bartlett Learning. стр. 209. ISBN 978-0-86720-474-2.
  28. ^ О'Нил, Р. В. Опыт использования многопрограммной системы с разделением времени и аппаратным обеспечением динамического перемещения адресов . Труды 30-й компьютерной конференции AFIPS (Весенняя объединенная компьютерная конференция, 1967 г.). стр. 611–621. doi :10.1145/1465482.1465581.
  29. ^ Самнер, Ф. Х.; Хейли, Г.; Чен, Э. С. И. (1962). «Центральный блок управления компьютером «Атлас»». Обработка информации 1962. Труды конгресса ИФИП. Т. Труды конгресса ИФИП 62. Spartan.
  30. ^ Килберн, Т.; Пейн, Р. Б.; Ховарт, DJ (декабрь 1961 г.). «The Atlas Supervisor». Компьютеры — ключ к тотальному управлению системами . Труды конференций. Том 20 Труды Восточной объединенной компьютерной конференции Вашингтон, округ Колумбия, Макмиллан. С. 279–294.
  31. ^ Kaxiras, Stefanos; Ros, Alberto (2013). Новая перспектива эффективной когерентности виртуального кэша . 40-й Международный симпозиум по архитектуре компьютеров (ISCA). стр. 535–547. CiteSeerX 10.1.1.307.9125 . doi :10.1145/2485922.2485968. ISBN  9781450320795. S2CID  15434231.
  32. ^ Bottomley, James (2004). "Понимание кэширования". Linux Journal . Получено 2010-05-02 .
  33. ^ Тейлор, Джордж; Дэвис, Питер; Фармвальд, Майкл (1990). «TLB Slice — недорогой высокоскоростной механизм трансляции адресов». ACM SIGARCH Computer Architecture News . 18 (2SI): 355–363. doi :10.1145/325096.325161.
  34. ^ Роско, Тимоти; Бауманн, Эндрю (2009-03-03). "Advanced Operating Systems Caches and TLBs (263-3800-00L)" (PDF) . systems.ethz.ch . Архивировано из оригинала (PDF) 2011-10-07 . Получено 2016-02-14 .
  35. ^ Линь, Цзян; Лу, Цинда; Дин, Сяонин; Чжан, Чжао; Чжан, Сяодун; Садаяппан, П. (2008). Получение знаний о разделении кэша на несколько ядер: преодоление разрыва между моделированием и реальными системами . IEEE 14-й Международный симпозиум по архитектуре высокопроизводительных компьютеров. Солт-Лейк-Сити, Юта. С. 367–378. doi :10.1109/HPCA.2008.4658653.
  36. ^ «Письмо Цзян Линю» (PDF) .
  37. ^ Jouppi, Norman P. (май 1990). «Улучшение производительности кэша с прямым отображением путем добавления небольшого полностью ассоциативного кэша и буферов предварительной выборки». Труды конференции 17-го ежегодного международного симпозиума по архитектуре компьютеров . 17-й ежегодный международный симпозиум по архитектуре компьютеров, 28–31 мая 1990 г. Сиэтл, Вашингтон, США. стр. 364–373. doi :10.1109/ISCA.1990.134547.
  38. ^ ab "Продукты (ранее Crystal Well)". Intel . Получено 2013-09-15 .
  39. ^ ab "Обзор графики Intel Iris Pro 5200: протестировано Core i7-4950HQ". AnandTech . Получено 16 сентября 2013 г.
  40. ^ Кютресс, Ян (2 сентября 2015 г.). «Выпуск мобильных и настольных процессоров Intel Skylake с анализом архитектуры». AnandTech.
  41. ^ Шимпи, Ананд Лал (2000-11-20). "Кэш Pentium 4 – Intel Pentium 4 1,4 ГГц и 1,5 ГГц". AnandTech . Получено 30 ноября 2015 г.
  42. ^ ab Fog, Agner (2014-02-19). "Микроархитектура процессоров Intel, AMD и VIA: руководство по оптимизации для программистов ассемблера и производителей компиляторов" (PDF) . agner.org . Получено 2014-03-21 .
  43. ^ Кантер, Дэвид (26 августа 2010 г.). «Микроархитектура Bulldozer от AMD – продолжение подсистемы памяти». Real World Technologies .
  44. ^ Кантер, Дэвид (25 сентября 2010 г.). «Микроархитектура Sandy Bridge от Intel – декодирование инструкций и кэш-память микропроцессоров». Real World Technologies .
  45. ^ ab Solomon, Baruch; Mendelson, Avi; Orenstein, Doron; Almog, Yoav; Ronen, Ronny (август 2001 г.). "Micro-Operation Cache: Power Aware Frontend for Variable Instruction Length ISA" (PDF) . ISLPED'01: Труды Международного симпозиума 2001 года по маломощной электронике и проектированию . Международный симпозиум 2001 года по маломощной электронике и проектированию (ISLPED'01), 6-7 августа 2001 г. Хантингтон-Бич, Калифорния, США: Ассоциация вычислительной техники . стр. 4–9. doi :10.1109/LPE.2001.945363. ISBN 978-1-58113-371-4. S2CID  195859085 . Получено 2013-10-06 .
  46. ^ ab Shimpi, Anand Lal (2012-10-05). "Проанализирована архитектура Intel Haswell". AnandTech . Получено 20-10-2013 .
  47. ^ Катресс, Ян (18 августа 2016 г.). «Микроархитектура AMD Zen: раскрыты двойные планировщики, кэш микроопераций и иерархия памяти». AnandTech . Получено 3 апреля 2017 г.
  48. ^ Гу, Леон; Мотиани, Дипти (октябрь 2003 г.). "Trace Cache" (PDF) . Получено 2013-10-06 .
  49. ^ Niu, Kun (28 мая 2015 г.). «Как работает BTIC (кэш целевых инструкций перехода)?» . Получено 7 апреля 2018 г.
  50. ^ "Intel Smart Cache: Demo". Intel . Получено 2012-01-26 .
  51. ^ "Внутри микроархитектуры Intel Core и интеллектуальный доступ к памяти". Intel . 2006. стр. 5. Архивировано из оригинала (PDF) 29.12.2011 . Получено 26.01.2012 .
  52. ^ "Обзор графики Intel Iris Pro 5200: протестировано Core i7-4950HQ". AnandTech . Получено 25.02.2014 .
  53. ^ Tian, ​​Tian; Shih, Chiu-Pi (2012-03-08). "Программные методы для многоядерных систем с общим кэшем". Intel . Получено 2015-11-24 .
  54. ^ Лемпель, Одед (28.07.2013). "Семейство процессоров Intel Core 2-го поколения: Intel Core i7, i5 и i3" (PDF) . hotchips.org . стр. 7–10, 31–45. Архивировано из оригинала (PDF) 29.07.2020 . Получено 21.01.2014 .
  55. ^ Чен, Дж. Брэдли; Борг, Анита; Джуппи, Норман П. (1992). «Исследование производительности TLB на основе моделирования». ACM SIGARCH Computer Architecture News . 20 (2): 114–123. doi : 10.1145/146628.139708 .
  56. ^ "Объяснение кэша L1 и L2". amecomputers.com . Архивировано из оригинала 2014-07-14 . Получено 2014-06-09 .
  57. ^ abc Zheng, Ying; Davis, Brian T.; Jordan, Matthew (10–12 марта 2004 г.). Оценка производительности эксклюзивных кэш-иерархий (PDF) . Международный симпозиум IEEE по анализу производительности систем и программного обеспечения. Остин, Техас, США. стр. 89–96. doi :10.1109/ISPASS.2004.1291359. ISBN 0-7803-8385-0. Архивировано из оригинала (PDF) 2012-08-13 . Получено 2014-06-09 .
  58. ^ Джалил, Аамер; Эрик Борч; Бхандару, Малини; Стили-младший, Саймон С.; Эмер, Джоэл (27.09.2010). «Достижение производительности неинклюзивного кэша с помощью инклюзивных кэшей» (PDF) . jaleels.org . Получено 09.06.2014 .
  59. ^ "AMD K8". Sandpile.org . Архивировано из оригинала 2007-05-15 . Получено 2007-06-02 .
  60. ^ "Техническое справочное руководство по Cortex-R4 и Cortex-R4F". arm.com . Получено 28.09.2013 .
  61. ^ "Техническое справочное руководство по контроллеру кэша L210". arm.com . Получено 28.09.2013 .
  62. ^ Махапатра, Нихар Р.; Венкатрао, Балакришна (1999). «Узкое место процессора и памяти: проблемы и решения» (PDF) . Перекрестки . 5 (3es): 2–es. doi :10.1145/357783.331677. S2CID  11557476. Архивировано из оригинала (PDF) 2014-03-05 . Получено 2013-03-05 .
  63. ^ Руководство по системе GE-645 (PDF) . General Electric . Январь 1968. Получено 10 июля 2020 г.
  64. ^ IBM System/360 Model 67 Functional Characteristics (PDF) . Третье издание. IBM . Февраль 1972 г. GA27-2719-2.
  65. ^ Торнтон, Джеймс Э. (октябрь 1964 г.). "Параллельная работа в управляющих данных 6600" (PDF) . Труды 27–29 октября 1964 г., осенняя совместная компьютерная конференция, часть II: сверхбыстрые компьютерные системы .
  66. ^ IBM (июнь 1968 г.). Функциональные характеристики IBM System/360 Model 85 (PDF) (2-е изд.). A22-6916-1.
  67. ^ Чен, Аллан, «Процессор 486: Высокопроизводительный вектор полета», Intel Corporation, Microcomputer Solutions, ноябрь/декабрь 1990 г., стр. 2
  68. ^ Рейлли, Джеймс, Херадпир, Шервин, «Обзор высокопроизводительного проектирования оборудования с использованием процессора 486», Intel Corporation, Microcomputer Solutions, ноябрь/декабрь 1990 г., стр. 20
  69. ^ "Семейство процессоров Intel® Xeon® E7". Intel . Получено 2013-10-10 .
  70. ^ Салли Эйди (ноябрь 2009 г.). «Проектирование чипа препятствует скрытой атаке на данные». IEEE Spectrum . 46 (11): 16. doi :10.1109/MSPEC.2009.5292036. S2CID  43892134.
  71. ^ Ван, Чжэнхун; Ли, Руби Б. (8–12 ноября 2008 г.). Новая архитектура кэша с улучшенной производительностью и безопасностью (PDF) . 41-й ежегодный Международный симпозиум IEEE/ACM по микроархитектуре. стр. 83–93. Архивировано (PDF) из оригинала 6 марта 2012 г.
  72. ^ "CACTI". HP Labs . Получено 29.01.2023 .

Внешние ссылки