Исполнение вне очереди - Википедия - Out-of-order execution

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

История

Внеочередное исполнение - это ограниченная форма поток данных вычисление, которое было основной областью исследований в компьютерная архитектура в 1970-х - начале 1980-х гг.

Важные академические исследования в этой области проводились Йельский Патт и его HPSm симулятор.[4] Бумага Джеймс Э. Смит и A.R. Pleszkun, опубликованные в 1985 году, завершили схему, описав, как точное поведение исключений может поддерживаться в вышедших из строя машинах.

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

Примерно три года спустя IBM System / 360 Модель 91 (1966) представил Алгоритм Томасуло, что делает возможным полное исполнение вне очереди. В 1990 году IBM представила первый вышедший из строя микропроцессор. МОЩНОСТЬ1, хотя выполнение вне очереди ограничено инструкциями с плавающей запятой (как и в случае с Model 91[5]).

В 1990-е годы исполнение вне очереди стало более распространенным явлением, и оно было представлено в IBM /Motorola PowerPC 601 (1993), Fujitsu /HAL SPARC64 (1995), Intel Pentium Pro (1995), MIPS R10000 (1996), HP PA-8000 (1996), AMD K5 (1996) и DEC Альфа 21264 (1996). Известные исключения из этой тенденции включают солнце UltraSPARC, HP /Intel Itanium, Intel Atom до Silvermont Architecture,[6] и IBM МОЩНОСТЬ6.

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

Основная концепция

Заказанные процессоры

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

  1. Инструкция принести.
  2. Если ввод операнды доступны (например, в регистрах процессора), инструкция отправляется в соответствующий функциональный блок. Если один или несколько операндов недоступны в течение текущего тактового цикла (обычно потому, что они выбираются из объем памяти ), процессор останавливается, пока они не станут доступны.
  3. Инструкция выполняется соответствующим функциональным блоком.
  4. Функциональный блок записывает результаты обратно в зарегистрировать файл.

Вышедшие из строя процессоры

Эта новая парадигма разбивает обработку инструкций на следующие этапы:

  1. Получение инструкций.
  2. Отправка инструкций в очередь инструкций (также называемую буфером инструкций или станции бронирования ).
  3. Инструкция ждет в очереди, пока не станут доступны ее входные операнды. Инструкция может покинуть очередь до более старых инструкций.
  4. Инструкция выдается соответствующему функциональному блоку и выполняется этим блоком.
  5. Результаты поставлены в очередь.
  6. Только после того, как результаты всех более старых инструкций записываются обратно в регистровый файл, этот результат записывается обратно в регистровый файл. Это называется этапом выпуска или выхода на пенсию.

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

Процессоры OoOE заполняют эти "слоты" одновременно с другими инструкциями, которые находятся готово, а затем измените порядок результатов в конце, чтобы казалось, что инструкции были обработаны как обычно. Порядок расположения инструкций в исходном компьютерном коде известен как заказ программы, в процессоре они обрабатываются порядок данных, порядок, в котором данные (операнды) становятся доступными в регистрах процессора. Для преобразования одного порядка в другой и поддержания логического порядка вывода требуется довольно сложная схема; сам процессор выполняет инструкции в случайном порядке.

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

Разделение отправки и выпуска позволяет выпускать вне очереди

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

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

Цель буфера - разделить доступ к памяти и выполнять функции в компьютерной программе и достигать высокой производительности за счет использования мелкозернистости параллелизм между двумя.[7] При этом он эффективно скрывает все задержки памяти с точки зрения процессора.

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

Разделенные архитектуры обычно считаются бесполезными для вычислений общего назначения, поскольку они плохо справляются с кодом, требующим интенсивного управления.[8] Код с интенсивным управлением включает такие вещи, как вложенные ветки, которые часто встречаются в Операционная система ядра. Несвязанные архитектуры играют важную роль в планировании в очень длинное командное слово (VLIW) архитектуры.[9]

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

Развязка выполнения и обратной записи позволяет перезапустить программу

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

Возможность отдавать инструкции в прошлые ветки, которые еще предстоит решить, известна как спекулятивное исполнение.

Выбор микроархитектуры

  • Отправляются ли инструкции в централизованную очередь или в несколько распределенных очередей?
IBM PowerPC процессоры используют очереди, которые распределены между различными функциональными модулями, в то время как другие вышедшие из строя процессоры используют централизованную очередь. IBM использует термин станции бронирования для своих распределенных очередей.
  • Существует ли реальная очередь результатов или результаты записываются непосредственно в файл реестра? Для последнего функция организации очереди обрабатывается картами регистров, которые содержат информацию о переименовании регистров для каждой выполняющейся инструкции.
Ранние вышедшие из строя процессоры Intel использовали очередь результатов, называемую буфер переупорядочения, в то время как большинство более поздних вышедших из строя процессоров используют карты регистров.
Точнее: Intel P6 микропроцессоры семейства имеют как буфер переупорядочения (ROB), так и зарегистрировать таблицу псевдонимов (КРЫСА). ROB был мотивирован в основном восстановлением неверного предсказания ветки.
Intel P6 семейство было одним из первых микропроцессоров OoOE, но было вытеснено NetBurst архитектура. Спустя годы Netburst оказался тупиком из-за своего длинного конвейера, предполагавшего возможность гораздо более высоких рабочих частот. Материалы не смогли соответствовать амбициозным целям разработки часов из-за проблем с температурой, и более поздние разработки, основанные на NetBurst, а именно Tejas и Jayhawk, были отменены. Intel вернулась к дизайну P6 в качестве основы Основной и Nehalem микроархитектуры. Успешный Песчаный Мост, Ivy Bridge, и Haswell микроархитектуры являются отходом от методов переупорядочивания, используемых в P6, и используют методы переупорядочения из EV6 и P4 но с несколько более коротким конвейером.[10][11]

Смотрите также

Рекомендации

  1. ^ Кукунас, Джим (2015). Мощность и производительность: анализ и оптимизация программного обеспечения. Морган Кауфман. п. 37. ISBN  9780128008140.
  2. ^ «Внеочередное исполнение» (PDF). cs.washington.edu. 2006 г.. Получено 2014-01-17. не ждите выполнения предыдущих инструкций, если эта инструкция от них не зависит
  3. ^ «Внеочередное исполнение». pcguide.com. Получено 2014-01-17. Эта гибкость повышает производительность, поскольку позволяет выполнять с меньшим временем ожидания.
  4. ^ Hwu, W .; Патт, Йель Н. (1986). HPSm, высокопроизводительная архитектура с ограниченным потоком данных с минимальной функциональностью. ISCA '86 Материалы 13-го ежегодного международного симпозиума по компьютерной архитектуре. ACM. С. 297–306. ISBN  978-0-8186-0719-6. Получено 2013-12-06.
  5. ^ Томасуло, Роберт Марко (1967), «Эффективный алгоритм использования нескольких арифметических единиц» (PDF), Журнал исследований и разработок IBM, 11 (1): 25–33, CiteSeerX  10.1.1.639.7540, Дои:10.1147 / ряд.111.0025, S2CID  8445049
  6. ^ Ананд Лал Шимпи (06.05.2013). «Раскрыта архитектура Intel Silvermont: серьезно относимся к мобильным устройствам». АнандТех.
  7. ^ Смит, Дж. Э. (1984). «Несвязанный доступ / выполнение компьютерных архитектур». ACM-транзакции в компьютерных системах. 2 (4): 289–308. CiteSeerX  10.1.1.127.4475. Дои:10.1145/357401.357403. S2CID  13903321.
  8. ^ Куриан, Л .; Хулина, П. Т .; Кораор, Л. Д. (1994). «Эффекты задержки памяти в несвязанных архитектурах» (PDF). Транзакции IEEE на компьютерах. 43 (10): 1129–1139. Дои:10.1109/12.324539. S2CID  6913858.
  9. ^ Дороевец, М. Н .; Оклобджия, В. (1995). «Многопоточная независимая архитектура». Международный журнал высокоскоростных вычислений. 7 (3): 465–480. Дои:10.1142 / S0129053395000257.
  10. ^ Кантер, Дэвид (25 сентября 2010 г.). "Микроархитектура Intel Sandy Bridge".
  11. ^ "Интерфейс Haswell - анализ архитектуры Intel Haswell: создание нового ПК и нового Intel".

дальнейшее чтение