Что означает «разделенный» кеш.И чем это полезно (если оно есть)? - PullRequest
3 голосов
/ 18 апреля 2019

Я задавал вопрос об архитектуре компьютера, и в нем упоминалось, что кеш - это разделенный кеш, и никакой опасности это не означает?

1 Ответ

11 голосов
/ 19 апреля 2019

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

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

Насколько мне известно, идея дизайна разделенного кэша была впервые предложена и оценена Джеймсом Беллом, Дэвидом Касасентом и К. Кордоном Беллом в их работе под названием Исследование альтернативных организаций кэша , который был опубликован в 1974 году в журнале IEEE TC (IEEE версия немного яснее). Авторы обнаружили с помощью симулятора, что для почти всех возможностей кэша, рассмотренных в исследовании, равное разделение приводит к лучшей производительности (см. Рисунок 5). Из бумаги:

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

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

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

Обратите внимание, что в статье не обсуждается, почему разделенный дизайн может иметь лучшую или худшую производительность, чем унифицированный дизайн. Также обратите внимание, как авторы использовали термины «выделенный кеш» и «однородный кеш». Термины «разделить» и «объединить» появились в более поздних работах, которые, я полагаю, были впервые использованы Аланом Джей Смитом в Указаниях для иерархий памяти и их компонентов: исследования и разработки в 1978 г. Но я не уверен, потому что то, как Алан использовал эти термины, создает впечатление, что они уже известны. Из статьи Алана мне кажется, что первым процессором, использовавшим конструкцию с разделенным кэшем, был IBM 801 около 1975 года, и, вероятно, вторым процессором был S-1 (около 1976 года). Вполне возможно, что инженеры этих процессоров могли придумать идею раздельного дизайна независимо.

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

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

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

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

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

  • LASIC: зацикленные сонные кеши инструкций на основе технологии STT-RAM : кэш инструкций в основном доступен только для чтения, за исключением случаев пропуска, в этом случае строка должна быть извлечена и заполненав кеш.Это означает, что при использовании STT-RAM (или фактически любой другой технологии NVRAM) дорогостоящие операции записи происходят реже по сравнению с использованием STT-RAM для кэша данных.В документе показано, что с помощью кэша цикла SRAM (например, LSD в процессорах Intel) и кэша команд STT-RAM можно значительно снизить потребление энергии, особенно когда выполняется цикл, который полностью помещается в кэш цикла.Энергонезависимое свойство STT-RAM позволяет авторам полностью отключить кэш команд без потери его содержимого.Напротив, при использовании кеша SRAM статическое энергопотребление значительно больше, и его включение приводит к потере содержимого.Тем не менее, с предложенным дизайном существует потеря производительности (по сравнению с чистой иерархией кэша SRAM).
  • Технико-экономическое обоснование I-кэша на основе NVM посредством улучшений MSHR : В этом документе также предлагаетсяиспользование STT-RAM для кэша команд, в то время как кэш данных и кэш L2 остаются на основе SRAM.Здесь нет цикла кеша.Вместо этого этот документ нацелен на проблему высокой задержки записи STT-RAM, которая возникает при заполнении строки в кэше.Идея состоит в том, что когда запрашиваемая строка принимается из кэша L2, кэш L1 сначала буферизует строку в MSHR, выделенную для его запроса.MSHR все еще основаны на SRAM.Затем строка кэша команд может быть подана в конвейер непосредственно из MSHR без необходимости потенциально останавливаться, пока не будет записана в кэш STT-RAM.Как и в предыдущей работе, предложенная архитектура улучшает энергопотребление за счет снижения производительности.
  • Исследование на уровне системы кеша данных уровня 1 на основе STT-MRAM : Предлагается использовать STT-ОЗУ для кэша данных L1 при сохранении всех других кэшей на основе SRAM.
  • Оптимизация цикла при наличии кэшей STT-MRAM: исследование компромиссов между производительностью и энергией : сравнение энергопотребления ипроизводительность чистой (только SRAM или только STT-RAM) и гибридной (L2 и кэш команд основаны на STT-RAM) иерархий.

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

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

Я не знаю ни одного процессора, разработанного за последние 15 лет, который бы имел унифицированный (L1) кэш.В современных процессорах унифицированный дизайн в основном используется для уровней кэширования с более высоким номером, что имеет смысл, поскольку они не связаны напрямую с конвейером.Интересным примером, когда кэш-память второго уровня следует разделенной конструкции, является процессор Intel Itanium 2 9000.Этот процессор имеет трехуровневую иерархию кэша, в которой кэши L1 и L2 разделены и являются частными для каждого ядра, а кэш L3 унифицирован и совместно используется всеми ядрами.Кэши L2D и L2I имеют размер 256 КБ и 1 МБ соответственно.Позднее процессоры Itanium уменьшили размер L2I до 512 КБ.Руководство по Itanium 2 9000 объясняет, почему L2 был разделен:

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

.,.

L3 получает запросы как от L2I, так и от L2D, но отдает приоритет запросу L2I в редком случае конфликта.Перемещение точки арбитража из L1-L2 в процессоре Itanium 2 в кэш-память L2-L3 значительно уменьшает конфликты благодаря высокой частоте попаданий в L2.

(я думаю "против доступа к данным"был написан дважды по ошибке.)

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

было упомянуто, что кэш-память является разделенным кешем, и нетОпасность, что именно это означает?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...