Почему повышенная глубина трубопровода не всегда означает повышенную пропускную способность?
-
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. Переадресация данных смягчает эту проблему, но ... только до такой степени, что данные известен.
Я также подумал бы, что увеличение трубопроводов за пределами количества времени, самая длинная инструкция в серии будет предпринять для выполнения, не приведет к увеличению производительности. Я думаю, что остановка и ветвление - это фундаментальные проблемы.
Определенно киоски / пузыри в длинных трубопроводах вызывают огромную потерю пропускной способности. И, конечно же, чем дольше трубопровод более часы потрачены впустую.
Я давно попробовал подумать о других сценариях, где длинные трубопроводы могут привести к убыткам в производительности, но все это возвращается к стойлам. (И количество единиц исполнения и схемы выпуска, но у кого нет много общего с длиной трубопровода.)