тл; д-р
Коротші трубопроводи означають більш високу тактову швидкість, але можуть зменшити пропускну здатність. Також дивіться відповіді №2 та 3 внизу (вони короткі, обіцяю).
Більш дрібна версія:
Тут слід врахувати кілька речей:
- Не всі інструкції займають однаковий час
- Не всі інструкції залежать від того, що було зроблено негайно (або навіть десять-двадцять) інструкцій назад
Дуже спрощений конвеєр (що відбувається в сучасних мікросхемах Intel є поза складним) має кілька етапів:
Вилучити -> Розшифрувати -> Доступ до пам'яті -> Виконати -> Зворотний запис -> Оновлення лічильника програми
У кожного -> є витрати на час, які виникають. Крім того, у кожному галочці (тактовий цикл) все переміщується від однієї стадії до другої, тому ваш найповільніший етап стає швидкістю для ВСІХ етапів (це дійсно платить за те, щоб вони були максимально схожими за довжиною).
Скажімо, у вас є 5 інструкцій, і ви хочете їх виконати (рис, взятий з wikipedia, тут оновлення ПК не робиться). Це виглядатиме так:
Незважаючи на те, що кожна інструкція займає 5 тактових циклів, завершена інструкція виходить з конвеєра кожен цикл. Якщо час, необхідний для кожного етапу, становить 40 нс і 15 нс для проміжних бітів (використовуючи шестиступеневий конвеєр вище), для отримання першої інструкції знадобиться 40 * 6 + 5 * 15 = 315 нс.
На противагу цьому, якби я повністю усунув трубопровід (але все інше було б таким же), знадобиться всього 240 нс, щоб отримати першу інструкцію. (Ця різниця в швидкості для отримання «першої» інструкції називається затримкою. Зазвичай вона менш важлива, ніж пропускна здатність, яка є кількістю інструкцій в секунду).
Справжнє відмінне те, що в прикладі конвеєра я отримую нову інструкцію (після першої) кожні 60 нс. У не-конвеєрному це потрібно щоразу 240. Це показує, що трубопроводи добре покращують пропускну здатність.
Зробивши це крок далі, здавалося б, що на етапі доступу до пам'яті мені знадобиться блок доповнення (щоб зробити обчислення адреси). Це означає, що якщо є інструкція, яка не використовує етап пам'яті цього циклу, я можу зробити ще одне доповнення. Таким чином, я можу зробити два етапи виконання (при цьому один знаходиться на етапі доступу до пам’яті) на одному процесорі за один галочку (планування - це кошмар, але не будемо йти туди. Крім того, на етапі оновлення ПК також знадобиться блок доповнення в у випадку стрибка, тож я можу зробити три доповнення стану виконання в один галочку). Маючи трубопровід, він може бути сконструйований таким чином, що дві (або більше) інструкцій можуть використовувати різні етапи (або етапи стрибків, тощо), економлячи цінний час.
Зауважте, що для цього процесори роблять багато "магічних" ( поза виконанням порядку , передбачення гілок та багато іншого), але це дозволяє декілька інструкцій виходити швидше, ніж без конвеєра (зауважте, що трубопроводи, які занадто довго дуже важко керувати і вимагати більш високої вартості, просто чекаючи між етапами). Зворотний бік полягає в тому, що якщо зробити трубопровід занадто довгим, ви можете отримати шалену тактову частоту, але втратите більшу частину оригінальних переваг (мати той самий тип логіки, який може існувати в декількох місцях, і використовуватись одночасно ).
Відповідь №2:
Процесори SIMD (одноразова множина даних) (як і більшість графічних процесорів) роблять багато роботи над багатьма бітами інформації, але це займе більше часу. Читання всіх значень займає більше часу (означає більш повільний годинник, хоча це компенсується значно ширшою шиною в деякій мірі), але ви можете отримати набагато більше інструкцій за один раз (більш ефективні інструкції за цикл).
Відповідь №3:
Тому що ви можете "обдурити" штучно подовжити кількість циклів, щоб ви могли робити дві інструкції на кожен цикл (просто вдвічі зменшіть тактову частоту). Можна також робити щось кожні два тики на відміну від одного (даючи 2х тактову частоту, але не змінюючи інструкції секунди).