Конвеєр (інформатика)

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

В обчислювальній техніці, конвеєр (пайплайн, англ. pipeline) являє собою набір елементів обробки даних, з'єднаних послідовно, де вихід одного елемента є входом наступного. Елементи конвеєра часто виконуються паралельно за принципом time-sliced; через це деяка кількість буферного сховища часто вставляється між елементами.

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

Графічні конвеєри використовуються в більшості[джерело?] графічних процесорів (GPU). Вони складаються з декількох арифметичних пристроїв або повних процесорів, які реалізують різні етапи загальних операцій рендерингу (перспективної проєкції, відсікання вікна, кольорові та світлові обчислення).[джерело?]

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

  • Арифметичний конвеєр
  • Командний конвеєр
  • Векторний конвеєр
  • Одно та багатофункціональні конвеєри
  • Скалярні та векторні конвеєри

Програмні концепції (на противагу апаратним):

  • Програмні конвеєри, де команди можуть бути записані там, де вихід однієї операції автоматично подається до входу наступної операції. Unix-системи називають «трубу» класичним прикладом цього поняття, хоча і інші операційні системи також підтримують труби.[джерело?]
  • HTTP-конвеєр, де кілька запитів відправляються, не чекаючи результату першого запиту.[джерело?]

Концепт та мотивація[ред. | ред. код]

Конвеєрна обробка є природним поняттям в повсякденному житті, наприклад, на складальному конвеєрі. Розглянемо складання автомобіля: припустимо, що певні етапи складальної лінії повинні встановити двигун, встановити капот і встановити колеса (в такому порядку, з довільними інтерстиціальними кроками). Автомобіль на конвеєрі може знаходитися тільки на одному етапі одночасно. Після того, як на автомобіль встановлено його двигун, він переходить до монтування капота, в результаті наступне авто стає у чергу на установку двигуна. Перший автомобіль потім переходить до установки колеса, другий — до установки капота, а для третього автомобіля починається установка двигуна. Якщо установка двигуна займає 20 хвилин, установка капота займає 5 хвилин, а установка колеса займає 10 хвилин, обробка усіх трьох авто, за умови одночасної роботи тільки з одним, зайняла б 105 хвилин. З іншого боку, за допомогою конвеєра, загальний час, щоб закінчити всі три, складає 75 хвилин. За даних умов, кожен наступний автомобіль буде приходити з конвеєра з інтервалом 20 хвилин. 

Категорії конвеєрів[ред. | ред. код]

Лінійні конвеєри[ред. | ред. код]

Лінійний конвеєрний процесор являє собою ряд етапів обробки і доступу до пам'яті.

Нелінійні конвеєри[ред. | ред. код]

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

Витрати і недоліки[ред. | ред. код]

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

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

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

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

Конструктивні міркування[ред. | ред. код]

Одним з ключових аспектів конструкції конвеєра є балансування його ступенів. Використовуючи приклад лінії складання, ми могли б мати велику економію часу, якщо на етапи установки двигуна та коліс треба було всього 15 хвилин. Хоча затримка системи все одно буде 35 хвилин, ми зможемо виводити новий автомобіль кожні 15 хвилин. Іншими словами, випуск готового продукту конвеєрним методом займає час, який визначається його найповільнішою частиною. (Зверніть увагу, що якщо час, необхідний, для установки двигуна не може бути зменшений до рівня нижче 20 хвилин, то це не мало б ніякого значення для стабільної швидкості виведення нових авто, якщо всі інші компоненти збільшили час виробництва до 20 хвилин.) 

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

Графічні інструменти[ред. | ред. код]

Для того, щоб спостерігати за плануванням конвеєра (статичного або динамічного), використовуються таблиці резервування.

Таблиця резервування [ред. | ред. код]

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

Таблиця резервування в основному зображує час, затрачений на потік даних через трубопровід для функції. Різні функції в таблиці резервування йдуть за різними напрямками.

Кількість стовпців в таблиці резервування визначає час оцінки даної функції.

Реалізації[ред. | ред. код]

Буферизований синхронний конвеєр[ред. | ред. код]

Звичайні мікропроцесори синхронних схем використовують буферизовані синхронні конвеєри. У цих конвеєрів «регістри» вставляються в проміжні ступені синхронно з тактовою частотою. Час між кожним тактовим сигналом встановлюється, щоб бути більше найдовшої затримки між ступенями конвеєра, так що, коли регістри синхронізуються, дані, які записуються в них є остаточним результатом попереднього етапу.

Буферизований асинхронний конвеєр[ред. | ред. код]

Асинхронні конвеєри використовуються в асинхронних схемах, і мають свої регістри з асинхронною тактовою частотою. Взагалі кажучи, вони використовують запит-систему, в якій кожен етап може виявити, коли він «закінчив» свою діяльність. Коли стадію Si визнають закінченою, сигнал готовності посилається до етапу Si + 1. Після початку стадії Si + 1, яка приймає вхідні дані, вона повертає підтвердження про отримання даних від стадії Si. 

Мікропроцесор The AMULET являє собою приклад мікропроцесора, який використовує буферизовані асинхронні конвеєри 

Небуферизовані конвеєри[ред. | ред. код]

Небуферизовані конвеєри, так звані «хвильові конвеєри», не мають регістрів між власними етапами. Замість цього, затримки в конвеєрі є «збалансованими» так, що для кожного ступеня, різниця між початком та кінцем стабілізованих вихідних даних зведена до мінімуму. Таким чином, потоки даних «хвилями» рухаються по конвеєру, і кожна хвиля зберігається у максимально короткому синхронізованому вигляді. 

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

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

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

  • Quinn, Michael J. (2004). Parallel Programming in C with MPI and openMP (англ.). Dubuque, Iowa: McGraw-Hill Professional. ISBN 0072822562.

Посилання[ред. | ред. код]