Кеш процессора - CPU cache

А Кеш процессора это аппаратный кеш используется центральное процессорное устройство (CPU) компьютер для снижения средней стоимости (времени или энергии) доступа данные от основная память.[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; когда до МиБ размеров (т.е. для большего размера, отличного от L1), очень рано шаблон сломался, чтобы обеспечить большие кеши без принудительного использования парадигмы удвоения размера, например Intel Core 2 Duo с кеш-памятью L2 3 МиБ в апреле 2008 года. Однако гораздо позже для размеров L1 это все еще учитывается только в небольшом количестве КиБ, однако IBM zEC12 с 2012 года является исключением, чтобы получить необычно большой для своего времени кэш данных L1 96 КиБ, и, например, в IBM z13 имеющий кэш инструкций L1 96 КиБ (и кэш данных L1 128 КБайт),[5] и Intel Ледяное озеро на базе процессоров с 2018 года, с кешем данных L1 48 КиБ и кешем инструкций L1 48 КБ. В 2020 году некоторые Intel Atom ЦП (до 24 ядер) имеют размер кеш-памяти (кратный) 4,5 и 15 МБ.[6][7]

Записи кеша

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

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

Политики

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

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

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

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

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

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

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

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

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

Глохнет процессор

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Структура записи в кеш

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

тегблок данныхбиты флагов

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

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

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

тегиндекссмещение блока

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

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

tag_length = address_length - index_length - block_offset_length

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

Пример

Оригинал Pentium 4 процессор имел четырехсторонний ассоциативный кэш данных L1 размером 8KiB по размеру, с 64-байтовыми блоками кэша. Следовательно, имеется 8 КиБ / 64 = 128 блоков кеша. Количество наборов равно количеству блоков кеша, разделенному на количество способов ассоциативности, что приводит к 128/4 = 32 наборам, и, следовательно, 25 = 32 разных индекса. Есть 26 = 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 Кэш уровня 4, который служит кешем жертвы для кеша уровня 3 процессора.[28] в Skylake микроархитектура кэш уровня 4 больше не работает как кеш жертвы.[29]

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

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

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

Запись в кэш объединения (WCC)

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

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

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

Одна из ранних работ, описывающих кеш-память μop как альтернативный интерфейс для Intel Семейство процессоров P6 это газета 2001 года "Кэш микроопераций: мощный интерфейс для ISA переменной длины".[34] Позже Intel включила кеши μop в свои Песчаный Мост процессоров и в последовательных микроархитектурах, таких как Ivy Bridge и Haswell.[31]:121–123[35] AMD реализовала кеш-память μop в своих Микроархитектура дзен.[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, IBM z15 с 2019 все уровни до L1 реализуются eDRAM, заменяя SRAM полностью (для кешей, например, он все еще используется для регистров) для 128 КиБ L1 для инструкций и для данных, или вместе 256 КиБ. На основе руки Яблоко M1 имеет 192 КБ кэш-памяти L1 для каждого из четырех высокопроизводительных ядер, что является необычно большим объемом; однако четыре высокоэффективных ядра имеют меньшее количество.

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

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

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

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

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

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

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

Общий кеш верхнего уровня, который вызывается перед доступом к памяти, обычно называется кеш последнего уровня (ООО). Дополнительные методы используются для повышения уровня параллелизма, когда 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]

Пример: 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 Альфа 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 Система / 360 Модель 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 микропроцессоры достигли тактовой частоты 20 МГц и выше в 386, небольшие объемы быстрой кэш-памяти стали использоваться в системах для повышения производительности. Это было потому, что DRAM Используемая для основной памяти имела значительную задержку, до 120 нс, а также циклы обновления. Кэш был построен из более дорогих, но значительно более быстрых, SRAM ячейки памяти, который в то время имел задержки от 10 до 25 нс. Ранние кеши были внешними по отношению к процессору и обычно располагались на материнской плате в виде восьми или девяти ОКУНАТЬ устройства, помещенные в сокеты, чтобы включить кэш в качестве дополнительной функции или функции обновления.

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

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

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

Кэш-память на материнской плате пользовалась неизменной популярностью благодаря AMD K6-2 и AMD K6-III процессоры, которые все еще использовали Разъем 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

Яблоко 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 - количество портов, подключенных через процессор и кеш. Преимущество этого заключается в том, что конвейерный процессор может обращаться к памяти на разных этапах своего конвейера. Еще одно преимущество состоит в том, что он позволяет использовать суперскалярные процессоры с разными уровнями кэш-памяти.

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

Примечания

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

Рекомендации

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

внешняя ссылка