Параллелизм и иерархии памяти: целостность данных в кэш-памяти

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

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

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

Потребность в обеспечении последовательности записи менее очевидна, но не менее важна. Предположим, что последовательность записи не выстроена и процессор Р1 записывает данные в место X, а за ним в это же место ведет запись процессор Р2. Выстраивание последовательности операций записи гарантирует, что каждый процессор в определенный момент времени увидит запись, сделанную процессором Р2. Если мы не выстроим последовательность операций записи, может получиться так, что некоторые процессоры смогут увидеть запись, произведенную процессором Р2, первой, а затем увидят запись, произведенную процессором Р1, бесконечно придерживаясь значения, записанного процессором P1. Проще всего избавиться от подобных осложнений за счет гарантии того, что все операции записи в одно и то же место будут видны в одном и том же порядке; это свойство называется обеспечением последовательности записи.

Основные схемы поддержания целостности данных

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

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

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

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

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





Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: