Позачергове виконання
Позачергове виконання (англ. Out-of-order execution) — парадигма, що застосовується при розробці процесорів з метою підвищення продуктивності. Її особливість в тому, що інструкції надходять до виконавчих модулів не в порядку їх слідування, як було в концепції виконання інструкцій по порядку (англ. In-Order execution), а за готовністю до виконання. Серед широко відомих машин вперше ця парадигма була в істотній мірі реалізована в машинах CDC 6600 компанії Control Data і IBM System/360 Model 91 компанії IBM.
Концепція
Виконання інструкцій по порядку (In-order)
- Зчитування інструкції
- Якщо всі операнди інструкції доступні, то вона передається на виконання відповідного виконавчого модуля, інакше процесор зупиняється, чекаючи готовності операндів.
- Інструкція виконується у відповідному модулі.
- Модуль записує результат назад в регістровий файл.
Позачергове виконання (Out-of-order)
- Зчитування інструкції
- Поміщення інструкції в чергу
- Інструкція знаходиться в черзі до тих пір, поки її операнди не стануть доступні. Таким чином інструкція може покинути чергу перш, ніж та, що потрапила туди раніше.
- Вибрана з черги інструкція виконується у відповідному модулі.
- Результат поміщається в чергу.
- Тільки після того, як всі інструкції, які були в черзі попереду даної, виконаються, її результат поміщається в регістровий файл.
Ключова ідея позачергового виконання полягає в можливості уникнути простою процесора в тих випадках, коли дані, необхідні для виконання чергової інструкції, недоступні. Як можна бачити вище, процесор уникає простоїв, які виникають в пункті 2 для чергового виконання інструкцій в разі, коли інструкція не може бути виконана через недоступність її операндів.
Процесор із позачерговим виконанням коду виконує ті інструкції, які готові, незалежно від їх порядку проходження в коді програми. Інструкції виконуються не в порядку їх слідування в коді програми, а в порядку доступності даних в регістрах процесора. Після виконання процесор змінює порядок результатів виконання інструкцій так, щоб створювалася видимість нормального, чергового виконання.
Позачергове виконання тим ефективніше, чим довший конвеєр процесора, і чим більша різниця в швидкості між пам'яттю (оперативною або кешем) і процесором. У сучасних комп'ютерах процесори працюють набагато швидше пам'яті, тому під час очікування надходження даних процесор може виконати безліч інструкцій, операнди яких доступні.