Подтвердить что ты не робот

Какая разница между Superscaling и конвейерной обработкой?

Ну выглядит слишком простой вопрос, который нужно задать, но я спросил, пройдя несколько ppts на обоих.

Оба метода увеличивают пропускную способность. И Superscaling почти всегда использует конвейерную обработку. Superscaling имеет более одного исполнительного блока, а также конвейерная обработка или я здесь не прав?

4b9b3361

Ответ 1

Суперскалярная конструкция включает процессор, способный выдавать несколько инструкций за один такт, с избыточными возможностями для выполнения команды. Мы говорим об этом в одном ядре, разумеется - многоядерная обработка отличается.

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

Они почти всегда используются вместе. Этот образ из Википедии показывает обе концепции в использовании, поскольку эти концепции лучше всего объясняются графически:

Superscalar/pipelining in use

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


Чтобы сломать его дальше, учитывая последнее изменение:

В приведенном выше примере инструкция проходит через 5 этапов, которые должны выполняться. Это IF (выбор команды), ID (декодирование команд), EX (выполнение), MEM (обновление памяти), WB (обратная запись в кеш).

В очень простой конструкции процессора каждый такт будет завершен, так что у нас будет:

  • IF
  • ID
  • EX
  • MEM
  • WB

Что бы сделать одну инструкцию в пять часов. Если мы затем добавим избыточный блок выполнения и представим суперскалярный дизайн, у нас получится это для двух команд A и B:

  • IF (A) IF (B)
  • ID (A) ID (B)
  • EX (A) EX (B)
  • MEM (A) MEM (B)
  • WB (A) WB (B)

Две инструкции в пяти часах - теоретический максимальный коэффициент усиления 100%.

Конвейеризация позволяет выполнять части одновременно, поэтому мы получим что-то вроде (для десяти инструкций от A до J):

  • IF (A) IF (B)
  • ID (A) ID (B) IF (C) IF (D)
  • EX (A) EX (B) ID (C) ID (D) IF (E) IF (F)
  • MEM (A) MEM (B) EX (C) EX (D) ID (E) ID (F) IF (G) IF (H)
  • WB (A) WB (B) MEM (C) MEM (D) EX (E) EX (F) ID (G) ID (H) IF (I) IF (J)
  • WB (C) WB (D) MEM (E) MEM (F) EX (G) EX (H) ID (I) ID (J)
  • WB (E) WB (F) MEM (G) MEM (H) EX (I) EX (J)
  • WB (G) WB (H) MEM (I) MEM (J)
  • WB (I) WB (J)

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

Статьи в Википедии для Superscalar и Строка инструкции довольно хороши.

Ответ 2

Долгое время назад, процессоры выполнили только одну машинную команду за раз. Только когда он был полностью закончен, CPU извлек следующую команду из памяти (или, позднее, кэш команд).

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

Таким образом, появилась "простая" конвейерная обработка: как только одна инструкция была выполнена декодированием и продолжалась в направлении следующей исполнительной субъединицы, почему бы еще не получить и не декодировать следующую команду? Если у вас было 10 таких "стадий", то , каждый из которых выполнял другую команду, теоретически можно было бы увеличить пропускную способность команд в десять раз, не увеличивая частоту процессора вообще! Конечно, это работает безупречно, когда нет никаких условных прыжков в коде (это привело к большим дополнительным усилиям для обработки условных прыжков специально).

Позже, когда закон Мура продолжает оставаться верным дольше, чем ожидалось, разработчики ЦП оказались со все более транзисторами, чтобы использовать и подумали "почему есть только одна из каждой исполнительной субъединицы?". Таким образом, родились суперскалярные процессоры с несколькими исполнительными подразделениями, способными делать то же самое параллельно, а проекты ЦП стали намного сложнее распределять команды через эти полностью параллельные блоки при этом результаты были такими же, как если бы инструкции выполнялись последовательно.

Ответ 3

Аналогия: стиральная одежда

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

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

В обычный день эти инструкции могут быть чем-то вроде:

  • возьмите рубашку со стойки.
  • вымойте рубашку
  • сухая рубашка
  • железная рубашка
  • сложите рубашку
  • положите рубашку на стойку.
  • возьмите брюки из стойки.
  • вымойте штаны
  • сушить штаны
  • сложите штаны
  • поставьте штаны на стойку.
  • возьмите пальто из стойки.
  • мыть пальто
  • сухое покрытие
  • железо пальто
  • положите пальто обратно на стойку.

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

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

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

Это конвейерная обработка. Секвенирование несвязанных действий, так что они используют разные компоненты одновременно. Сохраняя как можно больше различных компонентов одновременно, вы максимизируете эффективность и ускоряете время выполнения, в этом случае уменьшая 16 "циклов" до 9, ускорение более 40%.

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

  • возьмите рубашку со стойки, возьмите брюки из стойки.
  • вымойте рубашку, вымойте штаны, (возьмите пальто со стойки)
  • высушите рубашку, высушите брюки, (промойте пальто).
  • утюжить рубашку, свернуть штаны, (сушить пальто)
  • сложите рубашку, положите брюки обратно на стойку (утюг пальто).
  • положите рубашку на стойку (положите пальто обратно на стойку)

Это суперскалярный дизайн. Несколько подкомпонентов, способных выполнять одну и ту же задачу одновременно, но с процессором, решающим, как это сделать. В этом случае это привело к увеличению скорости на 50% (в 18 "циклах" новая архитектура могла работать через 3 итерации этой "программы", в то время как предыдущая архитектура могла работать только через 2).

Старые процессоры, такие как 386 или 486, являются простыми скалярными процессорами, они выполняют одну команду за раз в том порядке, в котором она была получена. Современные потребительские процессоры, поскольку PowerPC/Pentium являются конвейерными и суперскалярными. Процессор Core2 способен запускать тот же код, который был скомпилирован для 486, но все еще использует уровень инструкций parallelism, потому что он содержит свою собственную внутреннюю логику, которая анализирует машинный код и определяет, как его изменять и запускать (что можно запустить параллельно, что не может и т.д.). Это суть суперскалярного дизайна и почему это так практично.

Напротив, векторный параллельный процессор выполняет операции с несколькими частями данных сразу (вектор). Таким образом, вместо простого добавления x и y векторный процессор добавит, скажем, x0, x1, x2 к y0, y1, y2 (что приведет к z0, z1, z2). Проблема с этим дизайном заключается в том, что он плотно связан с определенной степенью parallelism процессора. Если вы запускаете скалярный код на векторном процессоре (предположим, что вы могли бы), вы бы не увидели преимущества векторной распараллеливания, потому что его нужно явно использовать, аналогично, если вы хотели бы использовать новый векторный процессор с большим количеством параллельных блоков обработки (например, способный добавлять векторы из 12 чисел вместо 3), вам нужно будет перекомпилировать ваш код. Конструкции векторных процессоров были популярны в старейшем поколении суперкомпьютеров, потому что они были просты в проектировании и существуют большие классы проблем в науке и технике с большим количеством естественных parallelism.

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

Ответ 4

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

В процессорах процесс конвейерной обработки точно такой же. "Инструкция" разбита на различные этапы исполнения, обычно что-то вроде 1. команды fetch, 2. выборки операндов (регистры или значения памяти, которые читаются), 2. выполнять вычисления, 3. записывать результаты (в память или регистры), Самая медленная из них может быть частью вычисления, и в этом случае общая пропускная способность команд через этот конвейер - это просто скорость вычислительной части (как если бы остальные части были "свободными".)

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

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

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

Существует множество методов, позволяющих уменьшить проблему необходимости остановки, которые немного сложно описать, но я их перечислим: 1. переадресация регистра, (также хранить для пересылки) 2. зарегистрировать переименование, посадка, 4. выход из строя. 5. Спекулятивное выполнение с откатом (и выходом на пенсию). Все современные процессоры используют практически все эти методы для реализации суперскалярных и конвейерных операций. Однако эти методы, как правило, уменьшают отдачу от количества конвейеров в процессоре до того, как киоски становятся неизбежными. На практике ни один производитель ЦП не делает более 4 конвейеров в одном ядре.

Многоядерность не имеет ничего общего ни с одним из этих методов. В основном это объединяет два микропроцессора для реализации симметричной многопроцессорности на одном чипе и обмена только теми компонентами, которые имеют смысл делиться (как правило, кэшем L3 и I/O). Однако метод, который Intel называет "гиперпотоком", - это метод попыток практически реализовать семантику многоядерного ядра в суперскалярной структуре одного ядра. Таким образом, одна микроархитектура содержит регистры двух (или более) виртуальных ядер и команд из двух (или более) разных потоков выполнения, но выполняется из общей суперскалярной системы. Идея состоит в том, что, поскольку регистры не могут мешать друг другу, будет больше parallelism, что приведет к меньшему количеству киосков. Таким образом, вместо того, чтобы просто выполнять два потока виртуального основного потока на половине скорости, это лучше из-за общего сокращения в киосках. Казалось бы, это говорит о том, что Intel может увеличить количество трубопроводов. Однако эта методика оказалась несколько недостаточной для практических реализаций. Однако, поскольку он является неотъемлемой частью суперскалярных методов, я все равно упомянул об этом.

Ответ 5

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

Superscaling отправляет несколько инструкций (или микрокоманд) нескольким исполняющим устройствам, существующим в ЦП. Он основан на избыточных единицах в CPU.

Конечно, эти подходы могут дополнять друг друга.