Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Высокопроизводительные системы и подсистемы памяти. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
11.08.2026
Размер:
503 Кб
Скачать

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

Ведущее устройство также берет на себя все необходимые функции по реализации состояния Owned. Если какой-либо мастер запросит эту строку, то ведущее устройство обязано ответить и предоставить свою копию. Если состояние Modified можно представить как Exclusive Modified, то Owned – как Shared Modified. Если какая-либо строка становится Owned, то ее копии в других кэшпамятях, включая принадлежащие другим процессорам, должны иметь состояние Shared. Фактически, состояние Owned дает все преимущества ведущему устройству, но остальные процессоры эффективно работают только для функции чтения. А если какомуто из них необходимо произвести запись в свою строку с состоянием Shared, то приходится производить ее и в оперативную память, что приводит к ликвидации состояния Owned у другого процессора. Это не представляет проблемы для многопроцессорных систем, обычно имеющих один активно записывающий процессор и несколько процессоров, читающих строку, но в многопоточных средах, где разные процессоры могут одновременно выполнять разные потоки одного и того же процесса, производительность начинает заметно падать.

Для улучшения производительности создан протокол MOWESI. В этом протоколе вводится состояние Written. При записи в строку с состоянием Shared оно изменяется на состояние Written, остальные процессоры оповещаются о факте и обязываются ликвидировать или обновить свои устаревшие копии, после чего состояние строки изменяется на Modified или Owned соответственно. Обновления оперативной памяти удается избежать в обоих случаях. В табл. 4.2 приводятся возможные комбинации бит строки состояний, знак «x» означает, что состояние данного бита значения не имеет.

31

Таблица 4.2

Строка состояния для протокола MOWESI

Состояние

tagCtlV

tagCtlS

tagCtlD

 

 

 

 

 

 

 

 

Invalid

0

x

x

 

 

 

 

 

 

 

 

Clean

1

0

0

 

 

 

 

 

 

 

 

Dirty

1

0

1

 

 

 

 

 

 

 

 

Clean Shared

1

1

0

 

 

 

 

 

 

 

 

Dirty Shared

1

1

1

 

 

 

 

 

 

 

 

Состояния Clean и Dirty соответствуют состояниям Exclusive и Modified протокола MOESI, аналогично – соответствие состояния

Invalid. Однако состояния Clean Shared и Dirty Shared отличаются от состояний Shared и Owned. При записи в строку с одним из этих состояний процессор всегда изменяет его на Clean и обновляет оперативную память, а другие процессоры удаляют свои устаревшие копии. Другими словами, строка со статусом Clean или Dirty может изменить его на Clean Shared и Dirty Shared соответственно, но Clean Shared не сможет стать Dirty Shared и наоборот.

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

В кэш-памяти прямого отображения (англ.: direct mapped cache) каждый набор содержит только одну строку (один блок), так что кэш содержит S = B наборов. Таким образом, каждый из адресов в оперативной памяти отображается в одну-единственную строку кэш-памяти. Можно также дать следующее определение: если каждая строка ОЗУ имеет только одно фиксированное место в кэшпамяти, то такая кэш-память называется памятью с прямым отображением. Кэш-память с прямым отображением требует минимального объема управления.

Для понимания принципа работы кэш-памяти с прямым отображением упростим схему и предположим, что ОЗУ состоит из 1000 строк с номерами от 0 до 999, а кэш-память имеет емкость

32

100 строк. В кэш-памяти с прямым отображением строки ОЗУ с номерами 0, 100, 200, …, 900 могут сохраняться только в строке 0, строки 1, 101, 201, …, 901 ОЗУ — в строке 1, строки ОЗУ с номерами 99, 199, …, 999 сохраняются в строке 99 (рис. 4.3). Такая организация кэш-памяти обеспечивает быстрый поиск в ней нужной информации, поскольку необходимо проверить ее наличие только в одном месте. Однако емкость кэш-памяти при этом используется не в полной мере. Несмотря на то, что часть кэш-памяти может быть не заполнена, будет происходить вытеснение из нее полезной информации при последовательных обращениях, например, к строкам ОЗУ 101, 301, 101.

 

 

 

ОЗУ

 

 

 

999

 

 

 

 

 

Кэш-память

 

 

 

 

 

 

201

99

 

 

 

200

 

 

 

01

 

 

 

 

 

 

101

 

 

 

 

00

 

 

 

100

 

 

 

 

 

 

 

 

 

 

001

 

 

 

 

 

 

 

 

000

 

 

 

 

Рис. 4.3. Принцип организации кэш-памяти с прямым отображением

Структурная схема кэш-памяти с прямым отображением показана на рис. 4.4.

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

33

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

 

 

Кэш-память

 

 

 

 

 

 

Тэг

 

 

Данные

 

 

 

 

 

 

Тэг

 

 

Данные

Индекс от процессора

 

Тэг

 

 

Данные

 

 

 

 

 

 

 

 

 

 

 

 

 

Тэг от

 

 

 

 

 

 

 

 

 

Данные

 

 

 

 

 

 

 

 

 

 

==

 

 

 

 

Буфер

 

 

 

 

процес-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сора

 

 

 

 

 

 

 

 

 

Совпадение (hit)

 

 

 

 

 

 

Рис. 4.4. Структурная схема кэш-памяти с прямым отображением

При поступлении адреса от процессора поле «индекс» указывает на одну из строк, где могут быть данные. Затем сравнивается старший адрес с тэгом кэш-памяти. При совпадении происходит кэшпопадание, иначе – кэш-промах. В этом случае требуется всего лишь один многоразрядный компаратор (см. рис. 4.4), на вход которого подается тэг с той единственной кэш-строки, которая оказывается выбранной полем «индекс».

4.6. Кэш-память, ассоциативная по множеству

В случае наборно-ассоциативной или множественноассоциативной кэш-памяти с N секциями (англ.: N-way set associative cache) каждый набор состоит из N строк. Каждый адрес памяти

34

по-прежнему отображается в один-единственный набор, но число наборов в этом случае равно S = B/N, а данные могут оказаться в любой из N строк этого набора.

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

Адрес от процессора

Тэг

Набор

Смещение

 

 

 

Индекс

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Тэг А

 

 

Блок А

 

Тэг В

 

Блок В

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

==

Буфер

==

Буфер

 

 

 

 

 

Данные

Адрес тэга

 

 

 

 

 

 

Hit

 

 

 

1

Рис. 4.5. Двухвходовая наборно-ассоциативная кэш-память

На рис. 4.6 показана одна из реализаций четырехвходовой на- борно-ассоциативная кэш-памяти для 64-разрядного микропроцес-

35

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

Виртуальный адрес

63

12

11

5

 

4

3

2

 

 

0

 

 

 

Адрес строки

Адрес двойного слова

Адрес байта

 

 

56

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Set 0

 

 

 

 

Set 3

 

TLB

 

 

 

 

 

 

 

 

 

 

 

 

 

23

0

 

255

0

23

0

 

255

0

 

24

 

 

 

Данные - 4

 

 

 

Данные - 4

 

 

Тэг

V

Тэг

V

Физи-

 

дв. слова

 

дв. слова

 

 

 

 

 

 

 

 

 

 

 

ческий

 

 

 

 

 

 

 

 

 

 

 

адрес

 

 

 

 

 

 

 

 

 

 

 

 

 

==

 

 

 

 

==

 

 

 

 

 

 

 

 

 

 

 

 

 

Hit/miss

 

Рис. 4.6. Структурная схема четырехвходовой наборно-ассоциативной кэш-памяти для 64-разрядного микропроцессора

4.7. Многопортовость кэш-памяти

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

36

операции делать последовательно, то становится нецелесообразным одновременное выполнение нескольких операций. Выходом может служить создание многопортовой кэш-памяти с несколькими входами на чтение и запись. В этом случае различные исполнительные конвейеры пересылают/принимают информацию одновременно. Для высокопроизводительных RISC микропроцессоров с командами фиксированной длины параллельное и упреждающее декодирование команд реализуется достаточно просто. Команды загрузки/сохранения составляют от 20 до 50 % от общего потока команд, примерное соотношение операндов загрузки и сохранения составляет 2 к 1. Это означает, что портов памяти на чтение должно быть больше портов на запись также примерно в два раза.

Существует несколько способов организации многопортовой памяти:

идеальная многопортовость (ideal multiporting);

временное уплотнение (time division multiplexing);

зеркалирование (клонирование) (mirroring, cloning);

чередование (interleaving).

Идеальная многопортовость предполагает нестандартную структуру ячеек кэш-памяти. Обычная 1-портовая ячейка статической памяти состоит из шести полевых транзисторов, для 2- портовой реализации требуются дополнительные два транзистора. Такие 2-портовые ячейки занимают большую площадь, потребляют большую энергию и медленнее 1-портовых ячеек. Однако современные САПР проектирования позволяют достаточно просто синтезировать такую память. Для высокопроизводительных микропроцессоров число портов должно быть больше двух и соответствовать числу одновременно выполняемых инструкций. Создать требуемую эффективную многопортовую память можно полностью заказным проектированием. Такая работа требует очень высокой квалификации разработчиков. На рис. 4.7 приведен пример принципиальной электрической схемы многопортовой памяти регистрового файла [2].

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

37

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

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

Рис. 4.7. Принципиальная электрическая схема регистрового файла: WWL – словарная шина записи, RWL – словарная шина чтения, WBL – парофазные биты записи, RBL – биты чтения

38

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

4.8. Когерентность системы памяти

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

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

39

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

Существует две стратегии обеспечения когерентности: сквозная запись (write-through) и обратная запись (write-back).

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

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

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

40

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]