Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПиП МПС(Ассемблер Левицкий экт 4) / MProc / M9 / Системная архитектура часть 4..doc
Скачиваний:
57
Добавлен:
16.04.2013
Размер:
751.1 Кб
Скачать

4.4.7. Атрибуты последовательности и упорядочивание

Упорядочивание памяти описано в разделе первого тома 4.4.7 «Упорядочивание обращений к памяти». Этот раздел описывает дополнительные правила упорядочивания для не кэшируемой памяти, операций синхронизации кэша (sync.i) и глобального сбросаTLB(ptc.g, ptc.ga).

Как описано в разделе 4.4.7 первого тома, зависимости чтение после записи (RAW), запись после записи (WAW) и запись после чтения (WAR) для одного и того же места памяти (зависимости по памяти) выполняются процессором в порядке программы1. В противном случае, все другие обращения к памяти не могут быть выполнены в произвольном порядке, если обращение не является определенно помеченным как упорядоченное. Обращения кIA-32 памяти следуют за более сильной процессорной совместимой моделью памяти. О деталях упорядочиванияIA-32 памяти см. раздел 10.6.10 «УпорядочиваниеIA-32 памяти». Явное упорядочивание делается в форме набораItaniumинструкций: упорядоченные загрузка и проверка загрузки (ld.acq, ld.c.clr.acq), упорядоченные сохранение (st.rel), семафоры (cmpxchg, xchg, fetchadd), забор памяти (mf), синхронизация (sync.i) и глобальный сбросTLB(ptc.g, ptc.ga). Инструкцияsync.iиспользуется для обслуживания упорядоченных отношений между кэшами инструкций и данных в локальных и удаленных процессорах. Инструкции глобального сбросаTLBобслуживают мультипроцессорную когерентностьTLB.

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

В следующем обсуждении термины «предыдущий» и «последующий» используются по отношению к порядку, указанному программой. Термин «видимый» используются по отношению ко всем архитектурно видимым эффектам выполнения инструкции. Для доступов к памяти и семафоров, это включает, по крайней мере, чтение и запись памяти. Для mf.a, видимость определяется платформным принятием предыдущих доступов к памяти. Видимостьsync.i, определяется видимостью предыдущих операций сливания кэша (fc). Для просмотровALAT(ld.c, chk.a), видимость определяется попаданием или промахомALAT. Для операций глобального сбросаTLB, видимость определяется удалением трансляции адреса из таблицTLBвсех процессоров в когерентном доменеTLB. Инструкции глобального сбросаTLB(ptc.g иptc.ga) следуют за семантикой освобождения и в локальном, и в удаленном процессоре.

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

Семантики упорядочивания

Описание

Инструкции, доступные для упорядочивания

Без упорядочивания

Не упорядоченные инструкции могут стать видимыми в любом порядке.

ld, ld.s, ld.a, ld.sa, ld.fill, ldf, ldf.s, ldf.sa, ldf.fill, ld.fp, ldfp.s, ldfp.sa,

st, st.spill, stf, stf.spill,

mf.a, sync.i, ld.c, chk.a

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

Инструкции освобождения гарантируют, что все предыдущие инструкции, доступные для упорядочивания, сделаются видимыми до того, как станут видимыми они сами.

cmpxchg.rel, fetchadd.rel, st.rel, ptc.g, ptc.ga

Запрос

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

cmpxchg.icq, fetchadd.icq, xchg, ld.acq, ld.c.clr.acq

Забор

Инструкции забора объединяют семантики освобождения и запроса в двунаправленный забор; т.е. они гарантируют, что все предыдущие доступные для упорядочивания инструкции, сделаются видимыми до того, как станет видимой любая последующая, доступная для упорядочивания инструкция.

mf

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

Сообщения межпроцессорных прерываний (IPI–Inter-ProcessorInterrupt) (8-байтовые сохранения по адресу блока процессорного прерывания, черезUCатрибут памяти) являются исключениями для последовательных семантик. СообщенияIPIне упорядочены по отношению к другимIPI, направляемым на тот же самый процессор. Далее, операции забора не требуют упорядочивания между двумяIPI. См. раздел 5.8.4.2 «Прерывание и упорядочиваниеIPI».

Табл. 4.15 описывает, для последовательных и не последовательных операций, упорядочивание между не упорядоченными операциями, операциями освобождения, запроса и типа забор. Табл. 4.15 описывает минимальные требования к упорядочиванию; реализация может предписывать более жесткое упорядочивание, чем требуется архитектурой. Фактический механизм для принудительного упорядочивания доступа к памяти является зависимым от реализации.

Табл. 4.15. Семантики упорядочивания

Первая операция

Вторая операция

Забор

Не последовательная

ПоследовательнаяA

Запрос

Освобож.

Не упоряд.

Запрос

Освобож.

Не упоряд.

Забор

О

О

О

О

О

О

О

Не последо­вательная

Запрос

О

О

О

О

О

О

О

Освобож.

О

О

O

Не упоряд.

О

О

O

Последова­тельнаяA

Запрос

О

О

О

О

OS

OS

OS

Освобож.

О

О

S

OS

S

Не упоряд.

О

ОB

C

SD

OSE

S

  1. Исключая IPI.

  2. «О» указывает, что первая и вторая операции становятся видимыми в порядке программы.

  3. Черточка указывает, что не подразумевается никакого упорядочивания.

  4. «S» указывает, что первая и вторая операции достигают периферийного домена в программном порядке.

  5. «OS» подразумевает, что применяются оба отношения упорядоченности и «О», и «S».

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

Например, когда в процессоре выполняется эта последовательность:

st [a]

st.rel [b]

а второй процессор выполняет эту последовательность:

ld.acq [b]

ld [a]

то если второй процессор наблюдает сохранение [b], то он будет также наблюдать сохранение [a].

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

Выровненным операциям st.relи семафорным операциям3, от множества процессоров в кэшируемую память с отложенной записью, становятся видимыми для всех наблюдателей в одном общем порядке (т.е. в частном чередовании; если он становится видимым любому наблюдателю, то он является видимым для всех наблюдателей), за исключением того, что дляst.rel, каждый процессор может наблюдать (черезldилиld.acq) свою собственную модификацию до того, как она станет наблюдаемой глобально.

Архитектура Itaniumгарантирует, что этот единый общий порядок только для выровненныхst.rel и семафорных операций в кэшируемую память с отложенной записью. Другие операции памяти4для множества процессоров, не требуются, чтобы стать видимыми в любом специальном порядке, если они не ограничивают друг друга правилами упорядочивания определенными в табл. 4.15.

Упорядочивание загрузок далее ограничено зависимостью по данным. Т.е. если одна загрузка читает значение, записанное более ранней загрузкой, причем тем же самым процессором (прямо или косвенно, через регистры или память), то обе загрузки станут видимыми в программном порядке.

Например, когда эта последовательность выполняется в процессоре:

st [a] = данные

st.rel [b] = a

а второй процессор выполняет эту последовательность:

ld x = [b]

ld y = [x]

то если второй процессор наблюдает сохранение [b], то он будет также наблюдать сохранение [a].

Также, например, когда эта последовательность выполняется в процессоре:

st [a]

st.rel [b] = ‘new’

а второй процессор выполняет эту последовательность:

ld x = [b]

cmp.eq.pl = x, ‘new’

(p1) ld y = [a]

то если второй процессор наблюдает сохранение [b], то он будет также наблюдать сохранение [a].

И, например, когда эта последовательность выполняется в процессоре:

st [a]

st.rel [b] = ‘new’

а второй процессор выполняет эту последовательность:

ld x = [b]

cmp.eq.pl = x, ‘new’

(p1) br target

. . .

target:

ld y = [a]

то если второй процессор наблюдает сохранение [b], то он будет также наблюдать сохранение [a].

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