stringtranslate.com

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

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

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

Обзор

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

Многие современные настольные , серверные и промышленные процессоры имеют как минимум три независимых кэша:

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

История

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

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

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

Записи кэша

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

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

Политика

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

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

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

Написание политик

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

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

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

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

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

Процессор глохнет

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

tag_length = address_length - index_length - block_offset_length

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

Пример

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

Биты флагов

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

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

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

Промах в кэше

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Раскраска страниц

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Тайник жертвы

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

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

Трассировка кэша

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

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

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

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

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

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

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

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

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

Кэш инструкций целевой ветви

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

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

Умный кэш

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

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

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

Другая проблема — фундаментальный компромисс между задержкой кэша и частотой попаданий. Кеши большего размера имеют более высокую частоту попаданий, но более длительную задержку. Чтобы решить эту проблему, многие компьютеры используют несколько уровней кэша: небольшие быстрые кэши подкреплены более крупными и медленными кэшами. Многоуровневые кэши обычно работают, сначала проверяя самый быстрый кэш, уровень 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 нежелательно, поскольку в результате увеличения задержки каждое ядро ​​будет работать значительно медленнее, чем одноядерный чип. Однако для кэша самого высокого уровня, который вызывается последним перед доступом к памяти, наличие глобального кэша желательно по нескольким причинам, например, чтобы позволить одному ядру использовать весь кэш, уменьшить избыточность данных, сделав возможным использование разных процессов или потоки для совместного использования кэшированных данных и снижение сложности используемых протоколов когерентности кэша. [52] Например, восьмиядерный чип с тремя уровнями может включать в себя кэш L1 для каждого ядра, один промежуточный кэш L2 для каждой пары ядер и один кэш L3, общий для всех ядер.

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

Отдельный против единого

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

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

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

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

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

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

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

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

Пример: К8

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

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

Тег ОЗУ

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

Выполнение

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

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

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

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

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

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

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

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

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

История

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

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

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

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

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

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

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

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

В микропроцессорах 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 Кбайт кэш-памяти. [66] [67] Популярность кэша на материнской плате сохранялась и в эпоху Pentium MMX , но он устарел из-за появления SDRAM и растущего несоответствия между тактовой частотой шины и тактовой частотой процессора, в результате чего кэш на материнской плате стал использоваться только для немного быстрее, чем основная память.

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

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

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

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

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

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

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

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

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

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

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

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

Примечания

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

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

  1. Торрес, Габриэль (12 сентября 2007 г.). «Как работает кэш-память».
  2. ^ Су, Чао; Цзэн, Цинкай (10 июня 2021 г.). Никополитидис, Петрос (ред.). «Обзор атак по побочным каналам на основе кэша ЦП: систематический анализ, модели безопасности и меры противодействия». Сети безопасности и связи . 2021 : 1–15. дои : 10.1155/2021/5559552 . ISSN  1939-0122.
  3. ^ «Атлас 2 в Кембриджской математической лаборатории (и Олдермастоне и Центре САПР)» . Ноябрь 2012 г. В Кембридже были разработаны два магазина туннельных диодов; один, который работал очень хорошо, ускорял выборку операндов, другой предназначался для ускорения выборки инструкций. Идея заключалась в том, что большинство инструкций выполняются последовательно, поэтому, когда инструкция была получена, это слово помещалось в подчиненное хранилище в место, заданное адресом выборки по модулю 32; остальные биты адреса выборки также были сохранены. Если искомое слово находилось в подчиненном устройстве, оно читалось оттуда, а не в основной памяти. Это значительно ускорит выполнение циклов длиной до 32 инструкций и уменьшит эффект для циклов длиной до 64 слов.
  4. ^ «Функциональные характеристики IBM System/360 Model 85» (PDF) . ИБМ . Июнь 1968 г. А22-6916-1.
  5. ^ Смит, Алан Джей (сентябрь 1982 г.). «Кэш-память» (PDF) . Вычислительные опросы . 14 (3): 473–530. дои : 10.1145/356887.356892. S2CID  6023466.
  6. ^ «Изменение компьютерной архитектуры — способ повысить пропускную способность, полагают исследователи IBM» . Электроника . 49 (25): 30–31. 23 декабря 1976 года.
  7. ^ «Техническое введение IBM z13 и IBM z13» (PDF) . ИБМ . Март 2016. с. 20.
  8. ^ «Информационный бюллетень о продукте: Ускорение сетевой инфраструктуры 5G от ядра до периферии» . Отдел новостей Intel (пресс-релиз) . Проверено 12 апреля 2020 г. Кэш L1 размером 32 КБ/ядро, кэш L2 объемом 4,5 МБ на 4-ядерный кластер и общий кэш LLC до 15 МБ.
  9. ^ Смит, Райан. «Intel запускает Atom P5900: 10-нм Atom для сетей радиодоступа». АнандТех . Проверено 12 апреля 2020 г.
  10. ^ «Дизайн кэша» (PDF) . ucsd.edu . 2010-12-02. стр. 10–15 . Проверено 29 января 2023 г.
  11. ^ Мегалингам, Раджеш Каннан; Дипу, КБ; Джозеф, Айпе П.; Викрам, Вандана (2009). Ассоциативный кэш с поэтапным набором для снижения энергопотребления. 2009 г. 2-я Международная конференция IEEE по компьютерным наукам и информационным технологиям. стр. 551–556. дои : 10.1109/ICCSIT.2009.5234663. ISBN 978-1-4244-4519-6. S2CID  18236635 . Получено 18 октября 2023 г. - через ieeexplore.ieee.org.
  12. ^ Джахагирдар, Санджив; Джордж, Варгезе; Содхи, Индер; Уэллс, Райан (2012). «Управление питанием микроархитектуры Intel Core третьего поколения, ранее известной под кодовым названием Ivy Bridge» (PDF) . hotchips.org . п. 18. Архивировано из оригинала (PDF) 29 июля 2020 г. Проверено 16 декабря 2015 г.
  13. ^ Аб Сезнец, Андре (1993). «Дело в пользу двусторонних асимметрично-ассоциативных кэшей». Новости компьютерной архитектуры ACM SIGARCH . 21 (2): 169–178. дои : 10.1145/173682.165152 .
  14. ^ Аб Козыракис, К. «Лекция 3: Расширенные методы кэширования» (PDF) . Архивировано из оригинала (PDF) 7 сентября 2012 г.
  15. ^ «Микроархитектура». Было показано, что перекошенные ассоциативные кэши имеют два основных преимущества перед обычными ассоциативными кэшами.
  16. ^ Аб Чжан, Чэньси; Чжан, Сяодун; Ян, Юн (сентябрь – октябрь 1997 г.). «Две быстрые и высокоассоциативные схемы кэширования». IEEE микро . 17 (5): 40–49. дои : 10.1109/40.621212.
  17. ^ «Руководство программиста серии ARM® Cortex®-R» . Developer.arm.com . 2014 . Проверено 4 мая 2023 г.
  18. ^ «Кэш-память с прогнозированием пути» .
  19. ^ «Реконфигурируемая многопутевая ассоциативная кэш-память» . 22 ноября 1994 года . Проверено 19 января 2024 г.
  20. ^ «Заявка на патент США на выбор способа замены динамического кэша на основе битов адресного тега. Патентная заявка (заявка № 20160350229, выданная 1 декабря 2016 г.) - Поиск патентов Justia» . патенты.justia.com .
  21. ^ Сэдлер, Натан Н.; Сорин, Дэниел Л. (2006). «Выбор схемы защиты от ошибок для кэша данных L1 микропроцессора» (PDF) . п. 4.
  22. ^ Хеннесси, Джон Л.; Паттерсон, Дэвид А. (2011). Компьютерная архитектура: количественный подход. Эльзевир. п. Б-9. ISBN 978-0-12-383872-8.
  23. ^ Паттерсон, Дэвид А.; Хеннесси, Джон Л. (2009). Организация и дизайн компьютера: аппаратно-программный интерфейс. Морган Кауфманн. п. 484. ИСБН 978-0-12-374493-7.
  24. ^ abc Куперман, Джин (2003). «Основы кэширования».
  25. ^ Дуган, Бен (2002). «По поводу кэша».
  26. ^ Крагон, Харви Г. (1996). Системы памяти и конвейерные процессоры. Джонс и Бартлетт Обучение. п. 209. ИСБН 978-0-86720-474-2.
  27. ^ О'Нил, Р.В. Опыт использования многопрограммной системы с разделением времени и аппаратным обеспечением динамического перемещения адресов . Учеб. 30-я компьютерная конференция AFIPS (Весенняя объединенная компьютерная конференция, 1967 г.). стр. 611–621. дои : 10.1145/1465482.1465581.
  28. ^ Самнер, FH; Хейли, Г.; Чен, ECY (1962). «Центральный блок управления компьютером «Атлас». Обработка информации 1962 . Материалы Конгресса ИФИП. Том. Материалы Конгресса ИФИП 62. Спартанец.
  29. ^ Килберн, Т.; Пейн, РБ; Ховарт, ди-джей (декабрь 1961 г.). «Супервайзер Атласа». Компьютеры – ключ к полному контролю над системами . Материалы конференций. Том. 20 Материалы Восточной объединенной компьютерной конференции Вашингтон, округ Колумбия Макмиллан. стр. 279–294.
  30. ^ Каширас, Стефанос; Рос, Альберто (2013). Новый взгляд на эффективную когерентность виртуального кэша . 40-й Международный симпозиум по компьютерной архитектуре (ISCA). стр. 535–547. CiteSeerX 10.1.1.307.9125 . дои : 10.1145/2485922.2485968. ISBN  9781450320795. S2CID  15434231.
  31. ^ «Понимание кэширования». Linux-журнал . Проверено 2 мая 2010 г.
  32. ^ Тейлор, Джордж; Дэвис, Питер; Фармвальд, Майкл (1990). «Срез TLB — недорогой высокоскоростной механизм трансляции адресов». Новости компьютерной архитектуры ACM SIGARCH . 18 (2СИ): 355–363. дои : 10.1145/325096.325161. CH2887-8/90/0000/0355$01.OO.
  33. ^ Роско, Тимоти; Бауманн, Эндрю (3 марта 2009 г.). «Кэши и TLB расширенных операционных систем (263-3800-00L)» (PDF) . system.ethz.ch . Архивировано из оригинала (PDF) 7 октября 2011 г. Проверено 14 февраля 2016 г.
  34. ^ Линь, Цзян; Лу, Цинда; Дин, Сяонин; Чжан, Чжао; Чжан, Сяодун; Садаяппан, П. (2008). Получение понимания многоядерного разделения кэша: устранение разрыва между моделированием и реальными системами . 14-й международный симпозиум IEEE по архитектуре высокопроизводительных компьютеров. Солт-Лейк-Сити, Юта. стр. 367–378. дои : 10.1109/HPCA.2008.4658653.
  35. ^ «Письмо Цзян Линю» (PDF) .
  36. ^ Н. П. Джуппи. «Улучшение производительности кэша с прямым отображением за счет добавления небольшого полностью ассоциативного кэша и буферов предварительной выборки». – 17-й ежегодный международный симпозиум по компьютерной архитектуре, 1990. Труды., doi : 10.1109/ISCA.1990.134547.
  37. ^ ab «Продукты (ранее Crystal Well)» . Интел . Проверено 15 сентября 2013 г.
  38. ^ ab «Обзор графики Intel Iris Pro 5200: протестировано Core i7-4950HQ» . АнандТех . Проверено 16 сентября 2013 г.
  39. ^ Катресс, Ян (2 сентября 2015 г.). «Запуск Intel Skylake для мобильных и настольных компьютеров с анализом архитектуры». АнандТех.
  40. ^ Шимпи, Ананд Лал (20 ноября 2000 г.). «Кэш Pentium 4 — Intel Pentium 4 1,4 ГГц и 1,5 ГГц». АнандТех . Проверено 30 ноября 2015 г.
  41. ^ аб Туман, Агнер (19 февраля 2014 г.). «Микроархитектура процессоров Intel, AMD и VIA: руководство по оптимизации для программистов-сборщиков и производителей компиляторов» (PDF) . agner.org . Проверено 21 марта 2014 г.
  42. Кантер, Дэвид (26 августа 2010 г.). «Микроархитектура Bulldozer от AMD - подсистема памяти, продолжение». Реальные мировые технологии .
  43. Кантер, Дэвид (25 сентября 2010 г.). «Микроархитектура Intel Sandy Bridge — декодирование инструкций и кэширование операций». Реальные мировые технологии .
  44. ^ аб Соломон, Варух; Мендельсон, Ави; Оренштейн, Дорон; Альмог, Йоав; Ронен, Ронни (август 2001 г.). «Кэш микроопераций: интерфейс с поддержкой энергопотребления для ISA переменной длины» (PDF) . ISLPED'01: Материалы Международного симпозиума по маломощной электронике и дизайну 2001 г. (каталожный номер IEEE 01TH8581) . Интел . стр. 4–9. дои : 10.1109/LPE.2001.945363. ISBN 978-1-58113-371-4. S2CID  195859085 . Проверено 6 октября 2013 г.
  45. ^ Аб Шимпи, Ананд Лал (5 октября 2012 г.). «Анализ архитектуры Intel Haswell». АнандТех . Проверено 20 октября 2013 г.
  46. ^ Катресс, Ян (18 августа 2016 г.). «Микроархитектура AMD Zen: раскрыты двойные планировщики, кэш микроопераций и иерархия памяти». АнандТех . Проверено 3 апреля 2017 г.
  47. ^ Гу, Леон; Мотиани, Дипти (октябрь 2003 г.). «Кэш трассировки» (PDF) . Проверено 6 октября 2013 г.
  48. Ню, Кун (28 мая 2015 г.). «Как работает BTIC (кэш целевых инструкций ветвления)?» . Проверено 7 апреля 2018 г.
  49. ^ «Intel Smart Cache: Демо» . Интел . Проверено 26 января 2012 г.
  50. ^ «Внутри микроархитектуры Intel Core и интеллектуального доступа к памяти» . Интел . 2006. с. 5. Архивировано из оригинала (PDF) 29 декабря 2011 г. Проверено 26 января 2012 г.
  51. ^ «Обзор графики Intel Iris Pro 5200: протестировано Core i7-4950HQ» . АнандТех . Проверено 25 февраля 2014 г.
  52. ^ Тиан, Тиан; Ши, Чиу-Пи (8 марта 2012 г.). «Программные методы для многоядерных систем с общим кэшем». Интел . Проверено 24 ноября 2015 г.
  53. ^ Лемпель, Одед (28 июля 2013 г.). «Семейство процессоров Intel Core 2-го поколения: Intel Core i7, i5 и i3» (PDF) . hotchips.org . стр. 7–10, 31–45. Архивировано из оригинала (PDF) 29 июля 2020 г. Проверено 21 января 2014 г.
  54. ^ Чен, Дж. Брэдли; Борг, Анита; Джуппи, Норман П. (1992). «Исследование производительности TLB на основе моделирования». SIGARCH Новости компьютерной архитектуры . 20 (2): 114–123. дои : 10.1145/146628.139708 .
  55. ^ «Объяснение кэша L1 и L2» . www.amecomputers.com . Архивировано из оригинала 14 июля 2014 г. Проверено 9 июня 2014 г.
  56. ^ abc Чжэн, Инь; Дэвис, Брайан Т.; Джордан, Мэтью (10–12 марта 2004 г.). Оценка производительности эксклюзивных иерархий кэша (PDF) . Международный симпозиум IEEE по анализу производительности систем и программного обеспечения. Остин, Техас, США. стр. 89–96. doi : 10.1109/ISPASS.2004.1291359. ISBN 0-7803-8385-0. Архивировано из оригинала (PDF) 13 августа 2012 г. Проверено 9 июня 2014 г.
  57. ^ Джалил, Аамер; Эрик Борч; Бхандару, Малини; Стили-младший, Саймон С.; Эмер, Джоэл (27 сентября 2010 г.). «Достижение производительности неинклюзивного кэша с помощью инклюзивных кэшей» (PDF) . сайт jaleels.org . Проверено 9 июня 2014 г.
  58. ^ "AMD K8" . Sandpile.org . Архивировано из оригинала 15 мая 2007 г. Проверено 2 июня 2007 г.
  59. ^ «Техническое справочное руководство Cortex-R4 и Cortex-R4F» . Arm.com . Проверено 28 сентября 2013 г.
  60. ^ «Техническое справочное руководство по контроллеру кэша L210» . Arm.com . Проверено 28 сентября 2013 г.
  61. ^ Махапатра, Нихар Р.; Венкатрао, Балакришна (1999). «Узкое место процессора и памяти: проблемы и решения» (PDF) . Перекресток . 5 (3с): 2–с. дои : 10.1145/357783.331677. S2CID  11557476. Архивировано из оригинала (PDF) 5 марта 2014 г. Проверено 5 марта 2013 г.
  62. ^ Системное руководство GE-645 (PDF) . Дженерал Электрик . Январь 1968 года . Проверено 10 июля 2020 г.
  63. ^ Функциональные характеристики IBM System/360 Model 67 (PDF) . Третье издание. ИБМ . Февраль 1972 г. GA27-2719-2.
  64. ^ Торнтон, Джеймс Э. (октябрь 1964 г.). «Параллельная работа с данными управления 6600» (PDF) . Материалы осенней совместной компьютерной конференции, состоявшейся 27–29 октября 1964 г., часть II: Очень быстродействующие компьютерные системы .
  65. ^ IBM (июнь 1968 г.). Функциональные характеристики IBM System / 360 Model 85 (PDF) (2-е изд.). А22-6916-1.
  66. ^ Чен, Аллан, «ЦП 486: НА векторе высокопроизводительного полета», Intel Corporation, Microcomputer Solutions, ноябрь/декабрь 1990 г., стр. 2
  67. ^ Рейли, Джеймс, Херадпир, Шервин, «Обзор проектирования высокопроизводительного оборудования с использованием процессора 486», Intel Corporation, Microcomputer Solutions, ноябрь/декабрь 1990 г., стр. 20
  68. ^ «Семейство процессоров Intel® Xeon® E7» . Интел . Проверено 10 октября 2013 г.
  69. ^ Салли Ади (ноябрь 2009 г.). «Проектирование микросхем предотвращает скрытую атаку на данные». IEEE-спектр . 46 (11): 16. doi :10.1109/MSPEC.2009.5292036. S2CID  43892134.
  70. ^ Ван, Чжэнхун; Ли, Руби Б. (8–12 ноября 2008 г.). Новая архитектура кэша с повышенной производительностью и безопасностью (PDF) . 41-й ежегодный международный симпозиум IEEE/ACM по микроархитектуре. стр. 83–93. Архивировано (PDF) из оригинала 6 марта 2012 г.
  71. ^ "КАКТЫ". Лаборатории HP . Проверено 29 января 2023 г.

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