ТЛ; др
Более короткие конвейеры означают более высокие тактовые частоты, но могут снизить пропускную способность. Также смотрите ответы № 2 и 3 внизу (обещаю, что они короткие).
Более длинная версия:
Здесь есть несколько вещей, которые следует учитывать:
- Не все инструкции занимают одно и то же время
- Не все инструкции зависят от того, что было сделано немедленно (или даже десять или двадцать) инструкции назад
Очень упрощенный конвейер (то, что происходит в современных микросхемах Intel, более сложен) состоит из нескольких этапов:
Выбрать -> Декодировать -> Доступ к памяти -> Выполнить -> Обратная запись -> Обновление счетчика программы
В каждом -> есть временные затраты. Кроме того, каждый тик (тактовый цикл), все перемещается от одного этапа к следующему, поэтому ваша самая медленная стадия становится скоростью для ВСЕХ этапов (это действительно платит за то, чтобы они были максимально похожими по длине).
Допустим, у вас есть 5 инструкций, и вы хотите их выполнить (рис, взятый из википедии, здесь обновление для ПК не сделано). Это будет выглядеть так:
Даже если для выполнения каждой инструкции требуется 5 тактов, готовая инструкция выходит из конвейера каждый цикл. Если время, необходимое для каждой стадии, составляет 40 нс и 15 нс для промежуточных битов (используя мой шестиступенчатый конвейер выше), то для получения первой инструкции потребуется 40 * 6 + 5 * 15 = 315 нс.
Напротив, если бы я полностью исключил конвейер (но сохранил все остальное), потребовалось бы всего лишь 240 нс, чтобы вывести первую инструкцию. (Эта разница в скорости для выдачи «первой» инструкции называется задержкой. Как правило, она менее важна, чем пропускная способность, то есть количество инструкций в секунду).
Реальное отличие заключается в том, что в конвейерном примере я получаю новую инструкцию (после первой) каждые 60 нс. В нетранслируемом это занимает 240 каждый раз. Это показывает, что конвейеры хороши в улучшении пропускной способности.
Если сделать еще один шаг, то на этапе доступа к памяти мне понадобится дополнительный модуль (для вычисления адреса). Это означает, что если есть инструкция, которая не использует этап mem в этом цикле, то я могу сделать другое дополнение. Таким образом, я могу выполнить два этапа выполнения (один из которых находится на этапе доступа к памяти) на одном процессоре за один такт (планирование - это кошмар, но не будем идти туда. Кроме того, на этапе обновления ПК также потребуется дополнительный модуль в случай прыжка, поэтому я могу сделать три дополнительных состояния выполнения за один тик). Имея конвейер, он может быть спроектирован таким образом, чтобы две (или более) инструкции могли использовать разные этапы (или этапы перепрыгивания и т. Д.), Экономя ценное время.
Обратите внимание , что для того , чтобы сделать это, процессоры делают много «магии» ( из исполнения заказа , предсказания ветвлений и многое другое), но это позволяет несколько команд , чтобы выйти быстрее , чем без трубопровода (обратите внимание , что трубопроводы , которые являются слишком длинные очень сложны в управлении и требуют больших затрат, просто ожидая между этапами). Обратная сторона в том, что если вы сделаете конвейер слишком длинным, вы можете получить безумную тактовую частоту, но потерять большую часть первоначальных преимуществ (наличия логики одного типа, которая может существовать в нескольких местах и использоваться одновременно ).
Ответ № 2:
Процессоры SIMD (с одной инструкцией и несколькими данными) (как и большинство графических процессоров) выполняют много работы с большим количеством информации, но их выполнение занимает больше времени. Чтение всех значений занимает больше времени (означает более медленные часы, хотя это смещение из-за более широкой шины в некоторой степени), но вы можете выполнять намного больше инструкций за один раз (более эффективные инструкции за цикл).
Ответ № 3:
Потому что вы можете «обмануть» искусственно удлинить счетчик циклов, чтобы вы могли выполнять две инструкции в каждом цикле (просто вдвое уменьшите тактовую частоту). Также возможно делать что-то только каждые два такта, в отличие от одного (давая 2-кратную тактовую частоту, но не меняя инструкции в секунду).