Процесор

буфера адреси переходу (ВТВ — branch target buffer), і заснованої на бітах передісторії розгалужень, що генеруються блоком цілочислових обчислень, призначеним для обробки мікрокоманд переходів (Integer Unit). Передбачення переходів (розгалужень) покликано звести до мінімуму холосту роботу конвеєра і забезпечити його безперервним потоком команд. Узагалі, в середньому до 10 відсотків коду програми складають безумовні переходи, що передають управління за новою зазначеною адресою, і від 10 до 20 відсотків — умовні переходи, що змінюють або не змінюють хід виконання програми в залежності від результату порівняння або виконання якої-небудь іншої умови. У випадку, якщо умовний перехід не виконується, програма просто продовжує виконання наступної команди.

Безумовні переходи проблем не викликають, процесор точно знає, що вони будуть виконані, і тому просто починає вибірку команд за зазначеною адресою. Команди умовних переходів становлять певні труднощі, тому що процесор не знає, чи буде виконаний перехід доти, поки команда не пройде виконавчий ступінь конвеєра. Однак очікування, поки команда розгалуження покине виконавчий, ступінь, означає тимчасову відмову від можливості вибірки й обробки подальших команд.

Для передбачення переходів процесор використовує розширений алгоритм Yeh'a, що дозволяє з великою вірогідністю спрогнозувати, чи буде виконуватися перехід. Якщо передбачення виявиться правильним, то виконання продовжиться з малою затримкою або зовсім без затримки. Якщо ж припущення помилкове, то частково виконані команди доведеться видаляти з конвеєра, а нові команди вибирати з області пам'яті з правильною адресою, декодувати й виконувати їх. Це спричинить за собою істотне зниження продуктивності, що прямо залежить від глибини конвеєра — для архітектури Р6 у випадку помилкового передбачення переходу втрати складуть від 4 до 15 тактів

Алгоритм передбачення розгалужень є динамічним дворівневим і ґрунтується на поводженні команд переходу за попередній період часу (оскільки той самий перехід часто виконується більш ніж один раз, наприклад у циклі), а також на поводженні конкретних груп команд, для яких із великою ймовірністю можна передбачити конкретний перехід. Точність передбачення цього алгоритму складає приблизно 90 відсотків.

Отже, 16-байтові команди передаються в дешифратор команд (Instruction Decoder), що складається з трьох паралельних дешифраторів, два з яких — прості (Simple) і один — складний (Complex). Завдання кожного дешифратора — перетворення ІА-інструкції на одну або кілька мікрокоманд (micro-ops).

Прості дешифратори обробляють команди х86, трансльовані в єдину мікрокоманду. Складний дешифратор працює з командами, яким відповідають від однієї до чотирьох мікрокоманд. Деякі особливо складні команди неможливо

безпосередньо декодувати навіть складним дешифратором, тому вони переда-ються в планувальник послідовності мікрокоманд (MIS — microcode instruction sequencer), що генерує необхідну кількість мікрокоманд. Якщо простий дешифратор зустрічає команду, яка не піддається трансляції, то вона передається в складний дешифратор або в планувальник послідовності мікрокоманд.

У випадку, якщо складні й прості команди бездоганно вирівняні їхніми відповідними дешифраторами, то дешифратори здатні генерувати загалом шість мікрокоманд за такт, але, як правило, з усіх трьох дешифраторів за один такт видаються три мікрокоманди, що відповідають у середньому двом-трьом ІА-командам, які передаються в буфер відновлення послідовності (ROB — Reorder Buffer). ROB містить 40 елементів завбільшки 254 байт кожен і може зберігати мікрокоманду, два зв'язаних із нею операнди, результат і кілька бітів стану.

Останнім етапом перед виконанням команд є відображення регістрів, здійснюване в таблиці псевдонімів

1 2 3 4 5 6 7 8 9 10 11