Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
49. Прогнозування розгалужень
Сучасні процесори сімейства х86 використовують прогнозування розгалужень. При наявності в програмі розгалуження вони намагаються прогнозувати, котра з умов розгалуження буде істинною, і починають виконувати відповідну послідовність команд. Якщо прогноз був невірний, то процесор повертається на початок розгалуження і виконує іншу гілку- Такі ситуації ведуть до втрати продуктивності.
Архітектура ІА-64 передбачає Інший підхід. Мають виконуватись одночасно дві послідовності команд розгалуження. Потім з'ясовується, котра з умов істинна, а результати іншої послідовності просто відкидаються. Задача забезпечення паралельного виконання розгалуження покладається на компілятор, котрий повинен розгалужувати команди відповідним чином. Коли компілятор приходить до висновку, що такий підхід неефективний, то процесор, то побудований на базі архітектури ІА-64, буде діяти як простий х86. Тому одна з основних функцій, яку має виконувати компілятор, є передбачення виконання послідовності інструкцій при розгалуженнях з певною ймовірністю. Саме цей метод має усувати переходи і складати послідовність виконуваних команд.
Компілятор архітектури ІА-64 веде пошук розгалужених Інструкцій у вихідному коді програми і намагається передбачити результат аналізу умови переходу, що проілюстровано на рис. 8.1.
Достовірність передбачень може бути неточною, тому компілятор в першу чергу обробляє найочевидніші варіанти. Коли компілятор приходить до висновку, що передбачення можливе, то всі інструкції кожного блоку розгалужень маркуються ідентифікаторами-посиланнями на регістри передбачення. Ці посилання називаються предикатами (predicate). Наприклад, компілятор може помітити всі інструкції, котрі виконуються за умови TRUE, предикатом Р1, а всі інструкції, котрі виконуються за умови FALSE - предикатом Р2. Для зберігання предикатів відповідно специфікацій ІА-64 в кожній інструкції відводиться поле довжиною в 6 біт. Воно дозволяє посилатися на один з 64 (2е) однобітових регістрів передбачення.
Всім командам, котрі виконуються по одній і тій же гілці, присвоюється одне і те ж значення предиката. Відповідно до цього значення компілятор обирає команди, котрі можуть виконуватись одночасно. При цьому компілятор враховує причинно*наслідкові зв'язки, а саме - команди, котрим потрібні результати виконання Інших інструкцій, вимушені чекати своєї черги.
На наступному етапі компілятор упаковує по три Інструкції в 128-розрядні пакети (bundle). Поле шаблона пакета визначає незалежні інструкції як і біжучому, так І в наступних пакетах. Такі інструкції процесор буде виконувати паралельно. Структура пакету і формат інструкцій процесорів архітектури ІА-64 представлені на рис. 8.2.