Конвеєр команд

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

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

Елементарний конвеєр[ред. | ред. код]

В основі концепції конвеєризації обчислень є твердження про те, що процес обробки машинної команди можна розбити на декілька практично незалежних етапів, які потім можна суміщати в часі для декількох команд в відповідній апаратурі (конвеєрі команд).

Загальноприйнятим в теорії конвеєрних структур є така послідовність етапів:

  • вибірка (instruction fetch, IF) — завантаження нової команди з пам'яті;
  • декодування (instruction decode, ID) — інтерпретація та відправлення команди до відповідного операційного пристрою в залежності від різновиду операції;
  • виконання (execution, EX) — виконання команд та обчислення ефективної адреси пам'яті для результату або операндів, які необхідно завантажити;
  • звертання до пам'яті (memory, MEM) — виконання операцій з пам'яттю (для команд завантаження/збереження);
  • збереження результату (writeback, WB) — збереження результату обчислень в регістрі.

Слід зазначити, що така структура є типовою для RISC-архітектур, семантика та кількість етапів в яких зазвичай не дуже відрізняється від наведених, тоді як в CISC-архітектурах конвеєр може бути набагато складнішим.

В процесі виконання команд в конвеєрі, відбувається суміщення вказаних етапів виконання для декількох команд (тобто в конвеєрі одночасно знаходяться декілька — до 5 в даному випадку) на різних стадіях. Кожний етап конвеєрного обчислення виконується за один машинний цикл. Зрозуміло, що виконання однієї окремої команди на послідовному процесорі (де команда виконується зразу за один машинний цикл) може бути швидшим, аніж в конвеєрній організації. Але за рахунок суміщення виконання різних команд загальна швидкодія істотно збільшується.

Класифікація[ред. | ред. код]

Спочатку визначимо декілька понять:

  • пропускна здатність — максимальна кількість команд, які виконуються за один такт машинного часу (instructions per cycle, IPC);
  • тривалість етапу (стадії) — кількість машинних циклів для виконання одного етапу конвеєрного обчислення (може бути різною для різних етапів);
  • необхідний (максимальний) ступінь паралелізму — кількість (незалежних) команд, які потрібно завантажити в конвеєр для повного використання його потенціалу.

Найпростіший (класичний) конвеєр[ред. | ред. код]

Характеристики пристрою:

  • Пропускна здатність = 1 IPC
  • Тривалість стадії = 1 цикл
  • Необхідний (максимальний) ступінь паралелізму = 1 команда

Суперскалярний конвеєр[ред. | ред. код]

Характеристики пристрою:

  • Пропускна здатність = n IPC (=3 IPC на малюнку)
  • Тривалість стадії = 1 цикл
  • Необхідний (максимальний) ступінь паралелізму = n команд (=3 на малюнку)

Як бачимо, в тому випадку, коли тривалість всіх стадій є однаковою, пропускна здатність суперскалярного конвеєра в n разів вища за звичайний. Однак для повного завантаження та максимальної ефективності необхідно, щоби на кожному циклі роботи він був завантажений n командами, які можуть виконуватись незалежно одна від одної. Така вимога істотно обмежує ефективність суперскалярного конвеєра, адже ступінь схованого паралелізму звичайних послідовних програм, зазвичай, є не дуже високою і в середньому обмежена числами близько 2.5-3 IPC, хоча на окремих класах задач може бути істотно вищою. Подальше збільшення рівня паралелізму потребує вже зміни самої парадигми програмування.

VLIW-конвеєр[ред. | ред. код]

  • Пропускна здатність = n IPC (=3 IPC на малюнку)
  • Тривалість стадії = 1 цикл
  • Необхідний (максимальний) ступінь паралелізму = n команд (=3 на малюнку)

З малюнку легко бачити, що базові параметри VLIW-конвеєра повністю збігаються з такими для суперскалярного конвеєра (хоча що стосується реальних, а не теоретичних, показників IPC, то вважається що спеціальні інструменти VLIW-процесорів для виявлення схованого паралелізму послідовних програм є оптимістичнішими, аніж суперскалярний підхід). VLIW-процесори апаратурно є набагато простішими, аніж суперскалярними, і це можна бачити з конфігурації конвеєра. Тут підготовка до виконання цілого комплексу команд, упакованих в довге командне слово, на стадії EX відбувається одночасно (пакування відбувається ще на етапі компіляції програми), тоді як в звичайному суперскалярному процесорі кожна команда проходить усі стадії окремо.

Суперконвеєр[ред. | ред. код]

Припустимо, що деякі з вказаних нами етапів типового 5-стадійного конвеєра в свою чергу також допускають розбиття на елементарніші «суперстадії» (на малюнку таке розбиття показане сірими лініями). Тоді стає можливим зменшення тривалості машинного циклу за рахунок того, що кожна з таких «елементарних» стадій може виконуватись швидше аніж «звичайна», а в результаті проміжок часу (вимірюваний одним машинним циклом) між виходом оброблених команд з конвеєра зменшується. В теоретичній моделі з малюнку, де кожна зі «звичайних» стадій розбита на 4 «суперстадії», отримаємо 4-кратний приріст швидкодії за умови, що кількість часу на виконання «звичайної» стадії залишається незмінною. Таким чином, в загальному випадку для (не суперскалярного) суперконвеєра, в якому кожній «звичайній» стадії відповідає m «суперстадій» (елементарних стадій):

  • Пропускна здатність = 1 IPC, але тривалість циклу 1/m в порівнянні зі звичайним конвеєром
  • Тривалість стадії = 1 цикл для «суперстадії», або m циклів для кожної «звичайної стадії»
  • Необхідний (максимальний) ступінь паралелізму = m команд

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

Суперскалярний суперконвеєр[ред. | ред. код]

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

  • Пропускна здатність = n IPC, але тривалість циклу 1/m в порівнянні зі звичайним конвеєром
  • Тривалість стадії = 1 цикл для «суперстадії», або m циклів для кожної «звичайної стадії»
  • Необхідний (максимальний) ступінь паралелізму = m*n команд

Конфлікти в конвеєрі[ред. | ред. код]

Функціональні модулі[ред. | ред. код]

Етап виконання[ред. | ред. код]

Сучасні процесори мають такі модулі етапу виконання:

  • швидка цілочисельна арифметика і логічні операції;
  • повільні цілочисельні дії, такі як множення, множення-додавання (для скалярного добутку) і ділення;
  • дії з рухомою комою.

Швидкі дії зазвичай виконуються за один цикл, повільні — конвеєризуються.

Для множення використовуються такі алгоритми — Wallace tree[en], Dadda tree[en], Алгоритм Бута.

Джерела[ред. | ред. код]