Скачиваний:
62
Добавлен:
16.04.2013
Размер:
430.08 Кб
Скачать

4.4.6.2. Согласованность памяти

В архитектуре Itanium, обращения инструкций делаются процессором не когерентно (согласовано) относительно обращений другого процессора к инструкциям и/или данным, но при этом обращения к инструкциям делаются процессором когерентно относительно обращений к данным делаемым тем же самым процессором. Поэтому не требуется аппаратных средств для сохранения процессорных кэшей инструкций совместимых с кэшами данных любого другого процессора, включая собственный кэш данных процессора; но при этом требуются аппаратные средства процессора, чтобы сохранить процессорный кэш инструкций совместимый с кэшами инструкций любого другого процессора. Обращения к данным от различных процессоров в одном и том же когерентном домене являются когерентными относительно друг друга; эта согласованность (consistency) обеспечивается аппаратно. Обращения к данным от одного и того же процессора подчиняются правилам зависимости данных, см. раздел 4.4.7 «Упорядочивание доступа к памяти».

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

Чтобы гарантировать, что запись данного процессора становится видимой потоку инструкций самого процессора или другого процессора, записанная строка (или строки) должна быть сброшена в память. Для этой цели программа может использовать инструкцию fc. Обновления памяти устройствамиDMA, когерентны относительно обращений к инструкциям и к данным процессоров. Согласованность между кэшами инструкций и данных процессоров относительно обновления памяти устройствамиDMAподдерживается аппаратно. В случае если программа модифицирует свои собственные инструкции, то используются инструкцииsync.iи srlz.i, чтобы гарантировать, что предыдущие когерентные действия соблюдаются данной точкой программы. За примерами самомодифицирующегося кода обратитесь к описанию инструкцииsync.iв томе 3 «Справочник набора инструкций».

4.4.7. Упорядочивание доступа к памяти

Упорядочивание доступа к данным памяти должно удовлетворять одной из зависимостей по данным: RAW(чтение после записи),WAW(запись после записи), либоWAR(запись после чтения). Кроме того, записи и сбросы памяти должны соблюдать управляющие зависимости. Если бы не эти ограничения, то чтения, записи и сбросы могли бы происходить в порядке отличном от порядка указанного в программе. Заметим, что не существует упорядочивания между обращениями к инструкциям и обращениями к данным или между двумя обращениями к инструкциям. Описанные ниже механизмы определены для того, чтобы предписать специальный порядок доступа к памяти. Далее в рассуждениях, термины «предыдущий» и «последующий» используются в отношении программы задающей порядок. Термин «видимый» используется в отношении ко всем архитектурно видимым эффектам выполнения доступа к памяти (как минимум это включает чтение или запись памяти).

Обращения к памяти следуют одной из четырех семантик упорядочивания памяти: без упорядочивания,освобождение(release),запрос(acquire), либозабор(fence). Не упорядоченные обращения к памяти могут стать видимыми в любом порядке. Обращения к памяти типа освобождение, гарантируют, что все предыдущие обращения к памяти стали видимыми до того, как они сами стали видимыми. Обращения к памяти типа запрос, гарантируют, что они стали видимыми до всех последующих обращений к памяти. Операции типа забор объединяют семантики освобождения и запроса, образуя двунаправленный забор, т.е. они гарантируют, что все предыдущие обращения к данным стали видимыми до того, как любое последующее обращение к данным станет видимым.

Явное упорядочивание памяти делается в форме набора инструкций: упорядоченной загрузки и упорядоченной проверки загрузки (ld.acq, ld.c.clr.acq), упорядоченного сохранения (st.rel), семафоров (cmpxchg, xchg, fetchadd) и забора памяти (mf). Инструкцииld.acq иld.c.clr.acqследуют запросным семантикам. Инструкция st.relследует семантике освобождения. Инструкцияmfработает забором. Инструкции xchg, cmpxchg.acq, fetchadd.acqимеют запросные семантики. Инструкции cmpxchg.rel, fetchadd.relимеют семантики освобождения. Семафорные инструкции, также имеют неявное упорядочивание. Если есть запись, то она всегда произойдет после чтения. Кроме того, чтение и запись будут выполнены неделимо (atomically), без вклинивания доступов в этот же регион памяти.

Табл.4.20 иллюстрирует взаимодействия упорядочивания между доступами к памяти с различными семантиками упорядочивания. Значок «О» указывает, что первая и вторая ссылки выполняются упорядоченно относительно друг друга. Значок «-» указывает, что не подразумевается никакого другого упорядочивания, кроме зависимости по данным (и управляющих зависимостей для записей и сливаний).

Табл.4.20. Правила упорядочивания памяти

Первая ссылка

Вторая ссылка

Забор

Запрос

Освобождение

Без упорядоч.

Забор

О

О

О

О

Запрос

О

О

О

О

Освобождение

О

-

О

-

Без упорядоч.

О

-

О

-

В табл. 4.21 собраны инструкции упорядочивания памяти, связанные с кэшируемостью памяти. Для определения правил упорядочивания связанных с некэшируемой памятью, синхронизацией кэша и привилегированными инструкциями, обратитесь к разделу 4.4.7 «Атрибут последовательности и упорядочивание» во втором томе.

Табл.4.21. Инструкции упорядочивания памяти.

Мнемоника

Действие

ld.acq, ld.c.clr.acq

Упорядочивание загрузки и упорядочивание проверки загрузки

st.rel

Упорядочивание сохранения

xchg

Обмен памяти и основного регистра

cmpxchg.acq, cmpxchg.rel

Условный обмен памяти и основного регистра

fetchadd.acq, fetchadd.rel

Добавить непосредственное значение в памяти

mf

Забор упорядочивания памяти

Соседние файлы в папке M9