Якщо конвеєр має велику глибину (наприклад, 20 ступенів), то проміжок часу між формуванням ознаки результату і тактом, де він аналізується, може бути ще більшим. В інженерних задачах приблизно кожна шоста команда є командою умовного переходу, тому призупинення конвеєра при виконанні команд переходів до визначення справжнього напрямки переходу істотно позначаться на продуктивності процесора.
Найбільш ефективним методом зниження втрат від конфліктів з управління служить передбачення переходів. Суть даного методу полягає в тому, що при виконанні команди умовного переходу спеціальний блок процесора визначає найбільш ймовірний напрямок переходу, не чекаючи формування ознак, на підставі аналізу яких такий перехід реалізується. Процесор починає вибирати з пам'яті і виконувати команди по передвіщеної гілки програми (так зване виконання за припущенням, або "спекулятивне" виконання). Однак так як напрям переходу може бути передбачене невірно, то одержувані результати з метою забезпечення можливість їх анулювання не заносяться в пам'ять або регістри (тобто для них не виконується етап WB), а накопичуються в спеціальному буфері результатів.
У сучасних процесорах ймовірність правильного передбачення напрямки переходів сягає 90% [6,11].
Конфлікти за даними виникають в випадках, коли виконання однієї команди залежить від результату виконання попередньої команди. При обговоренні цих конфліктів будемо припускати, що команда i передує команді j [11].
Всі види залежностей за даними можуть бути класифіковані за типом асоціацій: RAR - В«читання після читанняВ», WAR - В«запис після читання В»і WAW -В« запис після запису В», RAW -В« читання після запису В».
Деякі з залежностей за даними можуть бути усунені. RAR, по суті справи, відповідає відсутності залежності, оскільки в даному випадку порядок виконання команд не має значення. Дійсною залежністю є тільки В«читання після запису В»(RAW), так як необхідно прочитати попередньо записані нові дані, не старі.
Зайві залежності за даними з'являються в результаті В«записи після читанняВ» (WAR) і В«Записи після записуВ» (WAW). Зайві залежності з'являються по декількох причин: не оптимізований програмний код, обмеження кількості регістрів, прагнення до економії пам'яті, наявність програмних циклів. Важливо відзначити, що запис може бути проведена в будь-який вільний ресурс, а не тільки той, який зазначений у програмі [1].
1. Конфлікти типу RAW (Read After Write): команда j намагається прочитати операнд перш, ніж команда i запише на це місце свій результат. При цьому команда j може отримати некоректну старе значення операнда.
Проілюструємо цей тип конфлікту на прикладі виконання команд, представлених у таблиці 2.1. Нехай виконувані команди мають наступний вигляд:
i
ADD R1, R2
R1 = R1 + R2
i +1 = j
SUB R3, R1
R3 = R3-R1
Команда i змінить стан регістра R1 в такті 5. Але команда i +1 повинна прочитати значення операнда R1 в такті 4. Якщо не прийняті спеціальні заходи, то з регістра R1 буде прочитано значення, яке було в ньому до виконання команди i.
Зменшення впливу конфлікту типу RAW забезпечується методом обходу (Просування) даних. У цьому випадку результати, отримані на виходах виконавчих пристроїв, крім входів приймача результату передаються також на входи всіх виконавчих пристроїв процесора. Якщо пристрій управління виявляє, що даний результат потрібно одній з наступних команд у Як операнд, то він відразу ж, паралельно з записом в приймач результату, передається на вхід виконавчого пристрою для використання наступній командою.
Конфлікти типу RAW обумовлені саме конвеєрної організацією обробки команд.
Головною причиною двох інших типів конфліктів за даними є можливість невпорядкованого виконання команд в сучасних роцессор, тобто виконання команд не в тому порядку, в якому вони записані в програмі.
2. Конфлікти типу WAR (Write After Read): команда j намагається записати результат в приймач, перш ніж він вважається звідти командою i, При цьому команда i може отримати некоректну нове значення операнда:
Цей конфлікт виникне в випадку, якщо команда j внаслідок неупорядкованого виконання завершиться раніше, ніж команда i прочитає старе вміст регістра R2.
3. Конфлікти типу WAW (Write After Write): команда j намагається записати результат в приймач, перш ніж у цей же приймач буде записаний результат виконання команди i, тобто запис закінчується в невірному порядку, залишаючи в приймачі результату значення, записане командою i:
Усунення конфліктів за даними типів WAR і WAW досягається шляхом відмови від неврегульо...