В компьютерной технике , вне порядка исполнения (или более формально динамического исполнение ) является парадигма используется в большинстве высокоэффективных центральных процессоров использовать циклов команд , которые могли бы быть потрачены впустую. В этой парадигме процессор выполняет инструкции в порядке, определяемом доступностью входных данных и исполнительных модулей [1], а не их исходным порядком в программе. [2]При этом процессор может избежать простоя в ожидании завершения предыдущей инструкции и может тем временем обработать следующие инструкции, которые могут выполняться немедленно и независимо. [3]
История
Выполнение вне очереди - это ограниченная форма вычисления потока данных , которая была основной областью исследований в области компьютерной архитектуры в 1970-х и начале 1980-х годов.
Важное научное исследование по этой теме было проведено Йельским Паттом и его симулятором HPSm . [4] Статья Джеймса Смита и А.Р. Плешкуна, опубликованная в 1985 году, завершила схему, описав, как точное поведение исключений может поддерживаться в вышедших из строя машинах.
Вероятно, первой машиной, использующей исполнение вне очереди, является CDC 6600 (1964 г.), которая использовала табло для разрешения конфликтов. Однако 6600 не хватало обработки конфликтов WAW , вместо этого она остановилась. Эту ситуацию Торнтон назвал «конфликтом первого порядка». [5] Несмотря на то, что у него было и разрешение конфликтов RAW (названное «Конфликт второго порядка» [6] ), и разрешение конфликтов WAR (названное «Конфликт третьего порядка» [7] ), всего этого достаточно, чтобы объявить его способным к полному выходу из строя. -исполнение порядка, 6600 не имеет точной обработки исключений. Ранняя и ограниченная форма предсказания ветвления была возможна до тех пор, пока ветвление велось к местоположениям в так называемом «стеке инструкций», который был ограничен в пределах семи слов от счетчика программ. [8]
Примерно через три года в IBM System / 360 Model 91 (1966) был представлен алгоритм Томасуло , который делает возможным полное выполнение вне очереди . В 1990 году IBM представила первый микропроцессор с нарушением порядка, POWER1 , хотя выполнение с нарушением порядка ограничено инструкциями с плавающей запятой (как и в случае с Model 91 [9] ).
В 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 Alpha 21264 (1996). Заметными исключениями из этой тенденции являются Sun UltraSPARC , HP / Intel Itanium , Intel Atom до Silvermont Architecture [10] и IBM POWER6 .
Высокая логическая сложность техники нарушения порядка является причиной того, что она не стала доступной для массовых машин до середины 1990-х годов. Многие процессоры начального уровня, предназначенные для чувствительных к стоимости рынков, все еще не используют эту парадигму из-за большой площади кремния, необходимой для ее реализации. Низкое энергопотребление - это еще одна цель проектирования, которой труднее достичь с помощью нестандартного исполнения (OoOE).
Основная концепция
Чтобы оценить выполнение OoO Execution, полезно сначала описать по порядку, чтобы иметь возможность сравнить их. Инструкции не могут быть выполнены мгновенно: они требуют времени (несколько циклов). Следовательно, результаты будут отставать от того, где они необходимы. По-прежнему необходимо отслеживать зависимости. Однако его подход довольно прост: каждый раз заглохнуть. OoO использует гораздо более сложные методы отслеживания данных, как показано ниже.
Заказанные процессоры
В более ранних процессорах обработка инструкций выполняется в командном цикле, обычно состоящем из следующих шагов:
- Получение инструкций .
- Если входные операнды доступны (например, в регистрах процессора), инструкция отправляется в соответствующий функциональный блок . Если один или несколько операндов недоступны в течение текущего тактового цикла (обычно из-за того, что они извлекаются из памяти ), процессор останавливается, пока они не станут доступными.
- Инструкция выполняется соответствующим функциональным блоком.
- Функциональный блок записывает результаты обратно в регистровый файл .
Часто упорядоченный процессор имеет простой «битовый вектор», в который записывается, в какие регистры конвейер (в конечном итоге) будет записывать. Если для каких-либо входных операндов в этом векторе установлен соответствующий бит, инструкция останавливается. По сути, вектор выполняет значительно упрощенную роль защиты от опасностей регистров. Таким образом, мы наблюдаем, что Out-of-Order использует 2D-матрицы, где In-order использует 1D-вектор для предотвращения опасности. [ необходима цитата ]
Вышедшие из строя процессоры
Эта новая парадигма разбивает обработку инструкций на следующие этапы:
- Получение инструкций.
- Отправка инструкций в очередь инструкций (также называемую буфером инструкций или станциями резервирования ).
- Инструкция ожидает в очереди, пока не станут доступны ее входные операнды. Инструкция может покинуть очередь до более старых инструкций.
- Инструкция выдается соответствующему функциональному блоку и выполняется этим блоком.
- Результаты поставлены в очередь.
- Только после того, как все более старые инструкции записывают свои результаты обратно в регистровый файл, этот результат записывается обратно в регистровый файл. Это называется этапом выпуска или выхода на пенсию.
Ключевая концепция обработки OoOE состоит в том, чтобы позволить процессору избежать определенного класса остановок, которые возникают, когда данные, необходимые для выполнения операции, недоступны. В схеме выше процессор OoOE избегает остановки, которая происходит на этапе (2) обработчика очередности, когда инструкция не полностью готова к обработке из-за отсутствия данных.
Процессоры OoOE заполнить эти «слоты» во время с другими инструкциями, которые готовы, а затем повторно порядком результатов в конце , чтобы сделать вид , что инструкции были обработаны в обычном режиме. Порядок команд в исходном компьютерном коде известен как порядок программ , в процессоре они обрабатываются в порядке данных, порядке , в котором данные, операнды становятся доступными в регистрах процессора. Для преобразования одного порядка в другой и поддержания логического порядка вывода требуется довольно сложная схема; сам процессор выполняет инструкции в случайном порядке.
Преимущество обработки OoOE растет по мере того, как конвейер команд становится глубже, а разница в скорости между основной памятью (или кэш-памятью ) и процессором увеличивается. На современных машинах процессор работает во много раз быстрее, чем память, поэтому в то время, когда исправный процессор тратит время на ожидание прибытия данных, он мог обработать большое количество инструкций.
Разделение отправки и выпуска позволяет выпускать вне очереди
Одно из отличий, созданных новой парадигмой, заключается в создании очередей, которые позволяют отделить этап отправки от этапа выдачи, а этап завершения отделен от этапа выполнения. Первым названием этой парадигмы была несвязанная архитектура . В более ранних последовательных процессорах эти этапы работали в достаточно синхронизированном конвейерном режиме.
Инструкции программы не могут выполняться в первоначально указанном порядке, если конечный результат правильный. Он отделяет этапы выборки и декодирования от этапа выполнения в конвейерном процессоре с помощью буфера .
Буфер предназначен для разделения доступа к памяти и выполнения функций в компьютерной программе, а также для достижения высокой производительности за счет использования мелкозернистого параллелизма между ними. [11] Таким образом, он эффективно скрывает все задержки памяти с точки зрения процессора.
Теоретически больший буфер может увеличить пропускную способность. Однако, если процессор имеет неверное предсказание ветвления, может потребоваться очистка всего буфера, что приведет к потере большого количества тактовых циклов и снижению эффективности. Кроме того, буферы большего размера создают больше тепла и занимают больше места для штампа . По этой причине разработчики процессоров сегодня отдают предпочтение многопоточному подходу к проектированию.
Развязанные архитектуры обычно считаются бесполезными для вычислений общего назначения, поскольку они плохо обрабатывают код с интенсивным управлением. [12] Код с интенсивным управлением включает такие вещи, как вложенные ветки, которые часто встречаются в ядрах операционной системы . Разделенные архитектуры играют важную роль в планировании в архитектурах с очень длинным командным словом (VLIW). [13]
Чтобы избежать ложных зависимостей операндов, которые уменьшили бы частоту выдачи инструкций не по порядку, используется метод, называемый переименованием регистров . В этой схеме больше физических регистров, чем определено архитектурой. Физические регистры имеют теги, поэтому одновременно могут существовать несколько версий одного и того же архитектурного регистра.
Разделение выполнения и обратной записи позволяет перезапустить программу
Очередь результатов необходима для решения таких проблем, как неверные предсказания переходов и исключения / ловушки. Очередь результатов позволяет перезапускать программы после исключения, которое требует выполнения инструкций в программном порядке. Очередь позволяет отбрасывать результаты из-за неверных прогнозов в более старых инструкциях ветвления и исключений, принятых для более старых инструкций.
Возможность отдавать инструкции после ветвей, которые еще предстоит выполнить, называется спекулятивным исполнением .
Выбор микроархитектуры
- Отправляются ли инструкции в централизованную очередь или в несколько распределенных очередей?
- Процессоры IBM PowerPC используют очереди, которые распределены между различными функциональными блоками, в то время как другие вышедшие из строя процессоры используют централизованную очередь. IBM использует термин станции резервирования для своих распределенных очередей.
- Существует ли реальная очередь результатов или результаты записываются непосредственно в регистровый файл? Для последнего функция организации очереди обрабатывается картами регистров, которые содержат информацию о переименовании регистров для каждой выполняющейся инструкции.
- Ранние вышедшие из строя процессоры Intel использовали очередь результатов, называемую буфером переупорядочения , в то время как большинство более поздних вышедших из строя процессоров использовали карты регистров.
- Точнее: микропроцессоры семейства Intel P6 имеют как буфер переупорядочения (ROB), так и таблицу псевдонимов регистров (RAT). ROB был мотивирован в основном восстановлением неверного предсказания ветки.
- Семейство Intel P6 было одним из первых микропроцессоров OoOE, но было вытеснено архитектурой NetBurst . Спустя годы Netburst оказался тупиком из-за своего длинного конвейера, предполагавшего возможность гораздо более высоких рабочих частот. Материалы не смогли соответствовать амбициозным целям разработки часов из-за проблем с температурой, и более поздние разработки, основанные на NetBurst, а именно Tejas и Jayhawk, были отменены. Intel вернулась к дизайну P6 как основе микроархитектур Core и Nehalem . Последующие микроархитектуры Sandy Bridge , Ivy Bridge и Haswell представляют собой отход от методов переупорядочения, использованных в P6, и используют методы переупорядочения из EV6 и P4, но с несколько более коротким конвейером. [14] [15]
Смотрите также
- Архитектура потока данных
- Забор памяти
- Система воспроизведения
- Табло
- Буфер для стеллажей
- Алгоритм Томасуло
Рекомендации
- ^ Кукунас, Джим (2015). Мощность и производительность: анализ и оптимизация программного обеспечения . Морган Кауфман. п. 37. ISBN 9780128008140.
- ^ «Внеочередное исполнение» (PDF) . cs.washington.edu. 2006 . Проверено 17 января 2014 .
не ждите выполнения предыдущих инструкций, если эта инструкция от них не зависит
- ^ «Внеочередное исполнение» . pcguide.com . Проверено 17 января 2014 .
Эта гибкость повышает производительность, поскольку позволяет выполнять работу с меньшим временем ожидания.
- ^ Hwu, W .; Патт, Йель Н. (1986). HPSm - высокопроизводительная архитектура с ограниченным потоком данных с минимальной функциональностью . ISCA '86 Труды 13-го ежегодного международного симпозиума по компьютерной архитектуре . ACM . С. 297–306. ISBN 978-0-8186-0719-6. Проверено 6 декабря 2013 .
- ↑ Торнтон (1970 , стр.125)
- ↑ Торнтон (1970 , стр. 126)
- Перейти ↑ Thornton 1970 , p. 127
- Перейти ↑ Thornton 1970 , p. 112 123
- ^ Томасуло, Роберт Марко (1967), «Эффективный алгоритм для использования нескольких арифметических единиц» (PDF) , IBM Journal of Research and Development , 11 (1): 25–33, CiteSeerX 10.1.1.639.7540 , doi : 10.1147 / rd .111.0025 , S2CID 8445049 , архивировано из оригинала (PDF) 12.06.2018
- ^ Ананд Лал Шимпи (06.05.2013). «Раскрыта архитектура Intel Silvermont: серьезно относимся к мобильным устройствам» . AnandTech .
- ^ Смит, Дж. Э. (1984). «Независимый доступ / выполнение компьютерных архитектур». ACM-транзакции в компьютерных системах . 2 (4): 289–308. CiteSeerX 10.1.1.127.4475 . DOI : 10.1145 / 357401.357403 . S2CID 13903321 .
- ^ Куриан, Л .; Хулина, PT; Кораор, LD (1994). «Эффекты задержки памяти в несвязанных архитектурах» (PDF) . Транзакции IEEE на компьютерах . 43 (10): 1129–1139. DOI : 10.1109 / 12.324539 . S2CID 6913858 . Архивировано из оригинального (PDF) на 2018-06-12.
- ^ Дороевец, Миннесота; Оклобджия, В. (1995). «Многопоточная несвязанная архитектура» . Международный журнал высокоскоростных вычислений . 7 (3): 465–480. DOI : 10.1142 / S0129053395000257 .
- ^ Кантер, Дэвид (25 сентября 2010 г.). "Микроархитектура Intel Sandy Bridge" .
- ^ «Интерфейс Haswell - анализ архитектуры Intel Haswell: создание нового ПК и нового Intel» .
- Торнтон, Джеймс (1970). Дизайн компьютера: данные управления 6600 (PDF) . ISBN 9780673059536.
дальнейшее чтение
- Смит, Джеймс Э .; Плешкун, АР (июнь 1985 г.). «Реализация точных прерываний в конвейерных процессорах». Новости компьютерной архитектуры ACM SIGARCH . 13 (3): 36–44. DOI : 10.1145 / 327070.327125 .
- Смит, Джеймс Э .; Плешкун, АР (май 1988 г.). «Реализация точных прерываний в конвейерных процессорах». Транзакции IEEE на компьютерах . 37 (5): 562–573. DOI : 10.1109 / 12.4607 .
- Смит, Джеймс Э .; Плешкун, АР (1998). «Реализация точных прерываний в конвейерных процессорах» . 25 лет международным симпозиумам по компьютерной архитектуре (избранные доклады) - ISCA '98 . С. 291–299 . DOI : 10.1145 / 285930.285988 . ISBN 1581130589.