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