авання команди умовного розгалуження;
- перевірка виконання умови переходу;
- обчислення адреси переходу;
- передача управління у разі перехода.
На кожному етапі використовуються спеціальні прийоми підвищення продуктивності [1].
1. Для швидкого декодування застосовуються або додаткові біти в полі команди, або преддекодірованіе команд при їх вибірці з кеш-пам'яті команд.
2. Часто, коли команда вже обрана з кеш-пам'яті команд, умова переходу ще обчислено. Щоб не затримувати потік команд, в даному випадку використовується пророкування переходу по однієї з кількох можливих схем. p> Механізм передбачення переходів виконує дві основні функції - пророкування програмного адреси інструкції, на яку проводиться перехід (для всіх інструкцій переходу), і пророкування напрямки розгалуження (для інструкцій умовного переходу). Обидва передбачення повинні бути виконані завчасно - раніше, ніж почнеться декодування і обробка інструкції переходу - для того, щоб вибірка нового блоку інструкцій була проведена без втрат зайвих тактів або з мінімальними втратами.
Необхідність передбачення адреси В«цільовоїВ» інструкції викликана тим, що ця адреса може бути витягнутий з x86-інструкції переходу і обчислений тільки на фінальній стадії декодування, з великою затримкою. Більше того, навіть просте виділення інструкцій змінної довжини з ліченого блоку і пошук серед них інструкцій переходу займе якийсь час. Тому в процесорах архітектури x86 пророкування виробляють з цілого блоку, без розбиття його на складові інструкції.
У сучасних процесорах для передбачення адреси переходу зазвичай використовують спеціальну таблицю адрес переходів BTB (Branch Target Buffer). Ця таблиця влаштована подібно кешу і містить адреси інструкцій, на які раніше вироблялися переходи. Наприклад, в процесорі P-III таблиця BTB має розмір 512 елементів і організована у вигляді 128 наборів з асоціативністю 4. Для адресації набору використовуються молодші розряди адреси 16-байтового блоку інструкцій. Якщо в цьому блоці є інструкції переходу, і якщо ці інструкції відпрацьовували раніше, то алгоритм передбачення може дуже швидко знайти адресу цільової інструкції в таблиці BTB і почати зчитування блоку, що містить цю інструкцію. Адреси цільових інструкцій поміщаються в BTB в момент відставки відповідних інструкцій переходу.
В інших сучасних процесорах розмір таблиці BTB досягає 2048 елементів (K8) і 4096 елементів (P-4). Організація даної підсистеми в процесорі K8 дещо відрізняється від класичної і грунтується на попередній розмітці блоків інструкцій в так званих масивах селекторів перед приміщенням їх в I-кеш. Ці селектори прив'язані до положення інструкцій в I-кеші і при їх витіснення звідти зберігаються в L2-кеші (у так званих ECC-бітах, що призначаються для корекції помилок). Елементи таблиці BTB також прив'язані до положення інструкцій в I-кеші і губляться при їх витіснення. Це дещо знижує ефективність передбачення адрес переходів в процесорі K8.
Для передбачення напрямки умовного переходу використовується інший механізм, заснований на вивченні поведінки переходів в програмі в процесі її виконання (свого роду В«збір статистики В»). Цей механізм враховує як локальне поведінка конкретної інструкції переходу (наприклад, В«як правило, переходитьВ», В«як правило, не переходить В»), так і глобальні закономірності (В« чергується за певним законом В»тощо). Історія поведінки інструкцій умовного переходу записується в спеціальних структурах, зазвичай званих В«таблицями історії переходівВ» (Branch History Table, BHT). Сучасні механізми передбачення переходів забезпечують правильне передбачення більш ніж в 90 відсотках випадків.
Перерахуємо деякі механізми, використовувані в новому процесорі P8, що має найбільш досконалу систему передбачення переходів:
- поєднання локального та глобального механізмів для передбачення В«звичайнихВ» інструкцій переходу з урахуванням історії їх поведінки;
- статичний провісник для інструкцій, відбувається перехід в перший раз, заснований на емпіричних закономірностях (наприклад, В«Перехід назадВ» зазвичай передбачається як досконалий, оскільки може означати перехід по циклу, а В«перехід впередВ» - Як недосконалий);
- провісник коротких циклів, що розпізнає такі переходи і визначальний число ітерацій циклу (дозволяє правильно передбачити момент виходу з циклу);
- провісник непрямих переходів, що визначає цільові адреси для різних виконань інструкції переходу (з урахуванням можливого чергування цих адрес);
провісник цільових адрес для інструкцій виходу з підпрограми, що використовує слабкий апаратний стек для запам'ятовування адрес повернення (Return Address Stack) для ефективної відпрацювання інструкцій Call - Return. p> В інших процесорах компанії Intel використовується тільки частина перерахованих механізмів. Ці механізми удосконалюються з кожним новим поколінням про...