Чи фактично комп’ютери використовують добавки для переносу даних?


12

У курсах CS коледжів є багато деталей щодо носіїв, що містять шуму, таких як Kogge-Stone, Lander-Fischer тощо. Вони описуються як "поширені в галузі". Однак я не можу знайти жодних доказів (окрім, мабуть, Манчестерської ланцюжка) з останніх часів, що вони фактично використовуються десь конкретно. Пошук у Google повертає лише сторінки журналів та наукових досліджень. Принаймні наведені гіпотетичні реалізації.

Моє запитання: чи використовуються якісь конкретні місця / реалізації добавників для переносу даних? Або вони не мають відношення до реального світу?


1
Час циклу високопродуктивних процесорів та їхній єдиний цикл додають затримки, безумовно, вказують на те, що вони не використовують пульсацію (але це дозволить вибрати-перенести). Навіть для 22-нм-процесора Intel, проспівування 64 біт менш ніж 300ps може бути малоймовірним.
Пол А. Клейтон,

@ PaulA.Clayton У мене виникає враження від перегляду декількох таблиць даних, в яких використовуються допоміжні носії-вибору або декодери.
qwr

Відповіді:


16

Це прямо запитання з дуже складною відповіддю.

По-перше, деяке тло.

Дизайн VLSI у реальному світі - надзвичайно технічна сфера, яка має постійно мінливий баланс компромісів. Час, який потрібен ланцюгу для обчислення відповіді, рідко є єдиним важливим фактором. Також є енергоспоживання та фізична площа, а також маса факторів, які виявляють, що схеми, які ви проектуєте, насправді є аналогами (наприклад, опір проводу, паразитна ємність). Все це важливо в реальній схемі і може впливати на те, який дизайн буде обрано.

По-друге, ви повинні врахувати весь життєвий цикл проекту. Суматор, який підходить для реалізації VLSI, може бути непридатним для реалізації FPGA. Якщо дизайн буде проходити етап, який тестується на FPGA ... ви отримаєте картинку.

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

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

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

Сказавши це, ми знаємо кілька речей.

Ключове, що вам потрібно усвідомити, - це те, що способи переносу-оглядання є будівельними блоками, а не обов'язково самими методами. Тут може бути аналогія.

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

Наприклад, алгоритм сортування зі стандартної бібліотеки GNU C ++ використовує швидке сортування, використовуючи сортування вставки, коли інтервали стають досить маленькими. Однак якщо після декількох проходів схоже, що швидке розбиття сортування потрапило на патологічну поведінку, воно повернеться до нагромадження купи. Це три різних алгоритми сортування, щоб зробити один сорт промисловості.

Те ж саме стосується схем суматора. Відомо, наприклад, що ціла одиниця Pentium 4 використовувала суматор Хан-Карлсона, який представляє собою суміш Когге-Стоун та Брент-Кунг. (Хан-Карлсон особливо цікавий тим, що це "солодке місце" у взаємозв'язку між затримкою розповсюдження та плоттю відмирання, що також є досить енергоефективним.) Часто доводиться використовувати суміш декількох методів.

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

Спекулятивні суматори - це схеми, які мають надзвичайно низьку затримку розповсюдження, але працюють лише певний час (95% часу є типовим), і можна з дуже малою логікою сказати, повертає спекулятивний суматор правильний результат чи ні. Таким чином, ідея полягає в тому, щоб зробити спекулятивне додавання і половину додавання "переносити", паралельно, за один цикл. Якщо спекулятивний суматор повернув правильну відповідь, інструкція виконується. В іншому випадку відкладіть трубопровід і виконайте другу половину точного доповнення.

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


6

Так, багато комп’ютерів використовують добавки для переносу даних. Я інженерно розробив деякі старі мікропроцесори і можу навести кілька прикладів.

ALU на Intel 8008 (їх перший 8-розрядний процесор) включав велику ланцюг переноски, виконаний з динамічною логікою. Цей ланцюг займав стільки ж простору штампу, як і АЛУ. Carry lookahead показаний на таблиці 8008 , малюнок 3. Я не бачив жодних інших процесорів 1970-х років з переносом lookahead для ALU, тому 8008 трохи незвично в цьому плані.

6502 використовує примітивний переносний підсилювач для інкрементатора програмного лічильника (ПК). Він виявляє, чи буде здійснюватися перенесення з нижнього байту ПК, і використовує це для збільшення верхнього байта. Це зменшує перенесення пульсацій від потенційно 16 біт до 8 біт. ALU 6502 використовує пульсацію, хоча логіка переносу інвертується для змінних бітів, що відсікає інвертор із шляху та робить його трохи швидшим.

Z-80 має 16-розрядний інкремент / декремтер, який використовується для оновлення ПК, інструкції inc / dec та лічильник циклу. Він використовує структуру перенесення-пропуск, тому носії обчислюються для груп з двох біт. Крім того, він використовує деяку несучу-головку для генерування перенесення з бітів 0-7, 7-11 та 12-14. Інші носії обчислюються пульсаційними носіями ( деталі ). ALU Z-80, на диво, має 4 біти, тому кожна 8-бітна операція робить два проходи через ALU.

8085, з іншого боку, використовує пульсацію для свого 16-бітового інкрементатора / декрементера. Але, як і 6502, він отримує трохи прискорення, перетворюючи логіку перенесення в чергування бітів.

ARM-1 має 32-бітний ALU з не виносу випереджаючого перегляду, тільки пульсація перенесення. Він також використовує хитрість перевертання несучої в чергуються біти.

У світі мінікомп'ютерів багато процесорів були побудовані з відомої 4-бітової мікросхеми 74181 ALU, яка мала внутрішню несучу функцію. Приклади включають дані General Nova, Xerox Alto, VAX-11/780 та TI-990. (Див. Довший список у Вікіпедії .) Деякі з цих використаних пульсацій переносяться між кожним 4-бітовим мікросхемою, а деякі використовують мікросхему 74182 для перегляду lookahead для повного пошуку.

Підводячи підсумок, різні мікропроцесори використовують різноманітні методи перенесення залежно від їхніх цілей виконання та операцій, які перебувають на критичному шляху. АЛУ може використовувати повний носок (наприклад, 8008) або навіть напіврозмір (наприклад, Z-80). Інкремент може бути проблемою з продуктивністю, оскільки це, як правило, 16 біт в 8-бітовому процесорі, що призводить до подвоєної затримки вдвічі. Інкремент може мати пульсаційний носій (8085), один несучий носок (6502) або декілька носіїв ступінчастого типу (Z-80).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.