Страдат ли съвременните процесори от забавяне поради зависимости на инструкциите?

Докато изучавах компютърната организация, говорихме за зависимостите от данни и как те ограничават пропускателната способност на тръбопровода, защото изпълнението на една инструкция е блокирано от друга инструкция, която не е изпълнена.

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

Вярвам, че компилаторите ще се опитат да разбият веригите от зависимости. Има ли случаи, когато това не е възможно?


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