Страдают ли современные процессоры от замедления из-за зависимостей инструкций?

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

В современных процессорах до сих пор так? Можно ли создать в реальной программе сценарий, в котором у процессора достаточно данных (он не ждет данных из памяти), но из-за зависимостей данных он не работает на полной скорости (максимум инструкций за такт)?

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


person Bogi    schedule 02.09.2020    source источник
comment
да. И да, к большому огорчению инженеров Itanium. Достойная статья: здесь, прокрутите до пункта Планирование инструкций   -  person Hans Passant    schedule 03.09.2020
comment
Сокращение FP является классическим примером этого из-за более высокой задержки операций FP: Почему mulss занимает всего 3 цикла на Haswell, в отличие от таблиц инструкций Agner. ? (Развертывание циклов FP с несколькими аккумуляторами). Если вы не выполняете развертывание с несколькими накопителями, чтобы скрыть задержку во время компиляции, во время выполнения можно будет найти не так уж много ILP. Строгие правила FP — частая причина, по которой компиляторы не делают этого за вас, потому что математика FP не является строго ассоциативной.   -  person Peter Cordes    schedule 03.09.2020
comment
Кроме того, обычно для кода обычно достигается меньше максимального IPC для большей части кода. Часто из-за остановок из-за промахов кеша и промахов ветвей, но даже между ними в некотором коде существует ограниченный параллелизм. В особенности погоня за указателем (обход связанного списка) вредна для зависимостей, переносимых циклом, или зависимостей данных или элементов управления, присущих бинарному поиску.   -  person Peter Cordes    schedule 03.09.2020