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

4.4.6. Атрибуты спекулятивности

Для присутствующих страниц (TLB.p=1), которые отмечены атрибутом памяти «спекулятивный» илиNaTPage, процессор может предварительно выбирать инструкции (включаяIA-32), выполнять генерацию адреса и выполнять обращения загрузок (включаяIA-32) без разрешения предыдущих управляющих зависимостей, включая предикаты, переходы и прерывания. Страница должна быть только отмечена как спекулятивная, если обращения к этой странице не имеют побочных эффектов. Например, многие схемы памяти устройств ввода/вывода имеют связанные с чтением побочные эффекты, и должны быть отмечены как не спекулятивные. Если страница отмечена как спекулятивная, то процессор может читать любое место страницы, в любое время, не зависимо от намерений программиста и изменений управляющего потока. В результате, программному обеспечению требуется все время поддерживать правильные атрибуты таблицы страниц для полейppn, psиmaвсех существующих трансляций, чьим атрибутом памяти является спекулятивность илиNaTPage. Высокая эффективность операций достижима только на спекулятивных страницах. Атрибут спекулятивности – это подсказка; процессор может вести себя и не спекулятивно.

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

Процессор не будет инициализировать обращения к памяти (выборки 16-байтовых связок инструкций, выборки IA-32 инструкций, сливания и заливанияRSE, обращенияVHPTи доступ к памяти данных) для не спекулятивных страниц, пока не будут разрешены все предыдущие управляющие зависимости (предикаты, переходы и исключения), т.е. обращение к памяти требует упорядоченного выполнения программы. Кроме того, для обращений к не спекулятивным страницам, процессор:

  • Не может генерировать любой доступ к данным для обращений к данным, являющимся спекулятивными по управлению или данным.

  • Генерирует ровно один доступ к памяти для каждого обращения к выровненным не спекулятивным данным. (Обращения к не выровненным данным может вызвать несколько доступов к памяти, хотя эти доступы гарантированно не будут накладываться – обращение к каждому байту будет только одно).

  • Может генерировать многократные доступы к 16-байтовой памяти (к одному и тому же адресу) для каждого обращения к выборке 16-байтовой связки инструкций.

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

Если страница с ограниченной спекулятивностью, не является спекулятивно доступной, то к ней могут делаться только не спекулятивные обращения. Если же страница с ограниченной спекулятивностью является спекулятивно доступной (accessible), то процессор может обращаться к ней нормально, включая использование кэширования и спекулятивные обращения, генерируемые аппаратно (hardware-generatedspeculativereferences), для улучшения эффективности. Аппаратно-генерируемые спекулятивные обращения включают не запрашиваемые предварительные выборки инструкций (включаяIA-32), обращения к данным с помощью инструкций, которые еще не были определены как требуемые в порядке выполнения программы (из-за потенциальных исключений на предшествующих инструкциях, либо ошибочных предсказаниях на предшествующих ветвлениях), аппаратно-генерируемые обращения предварительных выборок данных и активныеRSEобращения к памяти. Страница с ограниченной спекулятивностью может быть сделана спекулятивно доступной, только после успешного завершения не спекулятивного обращения к странице. Страница с ограниченной спекулятивностью ставшая спекулятивно доступной, может быть сделанаспекулятивно не доступной(inaccessible), либо явно программным обеспечением (описанным в разделе 4.4.11 «Передача атрибутов памяти»), либо не явно, по причинам задаваемым реализацией.

В табл. 4.12 и 4.13 определены правила, которые гарантируют, что виртуальные и физические доступы к не спекулятивным страницам выполняются в порядке программы и только один раз – там, где требуется порядком программы. Программное обеспечение, также должно гарантировать, что RSEтранзакции сливания/заливания не выполняются к не спекулятивной памяти, которая может содержать устройства ввода/вывода, в противном случае, поведение системы не определено.

Табл. 4.12. Разрешение спекуляций

Атрибут памяти

Загру­зка (ld)A

Спекулятивная загрузка (ld.s)B

Предвари­тельная загрузка (ld.a)

Спекулятивная продвинутая загрузка (ld.sa)

Аппаратно-генерируемые спекулятивные обращенияC

Спекулятивный

Да

Да

Да

Да

Да

Не спекулятивный

Да

Всегда сбой

Всегда сбой

Всегда сбой

Запрещено

Ограниченная спекулятивность

Да

Всегда сбой

Да

Всегда сбой

ОграниченоD

  1. Включая предварительную выборку строки в форме lfetch.fault.

  2. Включая предварительную выборку строки в форме lfetch, которая не вызывает сливания кэша, если атрибут памяти является не спекулятивным, либо с ограниченной спекулятивностью.

  3. Аппаратно-генерируемые спекулятивные обращения включают не запрашиваемые предварительные выборки инструкций (включая IA-32), аппаратно-генерируемые обращения предварительных выборок данных и активныеRSEобращения к памяти.

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

Табл. 4.13. Значения возвращаемого регистра в не ошибочных предварительных/спекулятивных загрузках

Атрибут памяти

Спекулятивная загрузка (ld.s)B

Предварительная загрузка (ld.a)

Спекулятивная продви­нутая загрузка (ld.sa)

успешная

сбой

успешная

сбой

успешная

сбой

Спекулятивный

Значение

NaTA

Значение

Нет

Значение

NaTA

Не спекулятивный

Нет

NaTB

Нет

НольC

Нет

NaTB

Ограниченная спекулятивность

Нет

NaTB

Значение

Нет

Нет

NaTB

  1. Спекулятивные или спекулятивные предварительные загрузки, которые вызывают отложенные исключения, приводят к не успешным спекуляциям. Процессор аварийно завершает обращение. Если приемником загрузки является GR, то процессор устанавливаетNaTбит регистра в 1. Если приемником загрузки являетсяFR, то процессор устанавливает приемныйFRв значениеNaTVal. Процессор выполняет все другие побочные эффекты (такие как пост-инкремент).

  2. Спекулятивные или спекулятивные предварительные загрузки для ограниченных или не спекулятивных страниц памяти приводят к не успешным спекуляциям. Процессор аварийно завершает обращение. Если приемником загрузки является GR, то процессор устанавливаетNaTбит регистра в 1. Если приемником загрузки являетсяFR, то процессор устанавливает приемныйFRв значениеNaTVal. Процессор выполняет все другие побочные эффекты (такие как пост-инкремент).

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