Почему повышенная глубина трубопровода не всегда означает повышенную пропускную способность?

StackOverflow https://stackoverflow.com/questions/2597189

  •  25-09-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

На повсюду можно остановиться другими инструкциями при ожидании результата или на пропуске кэша. Трубопровождение не гарантирует, что операции полностью независимы. Вот отличная презентация о тонкостях архитектуры Intel / AMD X86: http://www.infoq.com/presentations/Click-Crash-course-modern-hardware.

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

Другие советы

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

Я предположительно, по-видимому, у вас может быть глубокий трубопровод, где несколько этапов пытаются получить доступ к тому же оборудованию (ALU и т. Д.), Что бы привести к тому, что удар производительности, хотя, надеюсь, вы бросаете достаточно дополнительных устройств для поддержки каждого этапа.

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

Рассмотрим случай прочитанного после записи (известный как сырые в учебниках).

В синтаксисе, где первый операнд получает результат, рассмотрим этот пример.

10: add r1, r2, r3
20: add r1, r1, r1

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top