Позачергове виконання

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

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

Концепція[ред. | ред. код]

Виконання інструкцій по порядку (In-order)[ред. | ред. код]

  1. Зчитування інструкції
  2. Якщо всі операнди інструкції доступні, то вона передається на виконання відповідного виконавчого модуля, інакше процесор зупиняється, чекаючи готовності операндів.
  3. Інструкція виконується у відповідному модулі.
  4. Модуль записує результат назад в регістровий файл.

Позачергове виконання (Out-of-order)[ред. | ред. код]

  1. Зчитування інструкції
  2. Поміщення інструкції в чергу
  3. Інструкція знаходиться в черзі до тих пір, поки її операнди не стануть доступні. Таким чином інструкція може покинути чергу перш, ніж та, що потрапила туди раніше.
  4. Вибрана з черги інструкція виконується у відповідному модулі.
  5. Результат поміщається в чергу.
  6. Тільки після того, як всі інструкції, які були в черзі попереду даної, виконаються, її результат поміщається в регістровий файл.

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

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

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

Див. також[ред. | ред. код]

Література[ред. | ред. код]