Це прямо запитання з дуже складною відповіддю.
По-перше, деяке тло.
Дизайн VLSI у реальному світі - надзвичайно технічна сфера, яка має постійно мінливий баланс компромісів. Час, який потрібен ланцюгу для обчислення відповіді, рідко є єдиним важливим фактором. Також є енергоспоживання та фізична площа, а також маса факторів, які виявляють, що схеми, які ви проектуєте, насправді є аналогами (наприклад, опір проводу, паразитна ємність). Все це важливо в реальній схемі і може впливати на те, який дизайн буде обрано.
По-друге, ви повинні врахувати весь життєвий цикл проекту. Суматор, який підходить для реалізації VLSI, може бути непридатним для реалізації FPGA. Якщо дизайн буде проходити етап, який тестується на FPGA ... ви отримаєте картинку.
По-третє, не кожен суматор робиться рівним. У типовому процесорі є безліч допоміжних пристроїв, навколо яких виконуються різні завдання; ймовірно, існує декілька цілих ALU, суматор мантіси з плаваючою комою, суматор, який виконує обчислення адреси, суматор, який обчислює цілі гілки тощо. Це не враховуючи суми, що зберігають, які ви знаходите в сучасних одиницях множення. У кожного свої особливості та обмеження.
Наприклад, підрахунок цілі гілки, як правило, включає додавання невеликої константи до повного слова, що пропонує інший дизайн додавача від того, який додає два повні слова разом. Так само додавання з плаваючою точкою вимагає етапу округлення після додавання, який може зайняти менше циклу, тому немає жодної причини, чому ви не змогли вкрасти решту циклу, щоб закінчити додавання.
Нарешті, і, мабуть, найголовніше, що великі гравці (наприклад, Intel, AMD, NVIDIA) з чітко виражених причин досить чітко описуються на деталях впровадження на низькому рівні, якщо вони не думають, що вони можуть отримати папір та / або патент. Навіть тоді ви часто не можете бути впевнені, що вони насправді зробили без реверсивної інженерії.
Сказавши це, ми знаємо кілька речей.
Ключове, що вам потрібно усвідомити, - це те, що способи переносу-оглядання є будівельними блоками, а не обов'язково самими методами. Тут може бути аналогія.
Якщо ви думаєте про класи алгоритмів, ви, мабуть, вивчили купу алгоритмів сортування, таких як швидке сортування, сортування об'єднань, сортування вставки тощо. У реальному світі, якщо сортування - це вузьке місце продуктивності, будь-який порядний інженер вважатиме це як примітивні будівельні блоки, з яких можна побудувати «справжній» сорт.
Наприклад, алгоритм сортування зі стандартної бібліотеки GNU C ++ використовує швидке сортування, використовуючи сортування вставки, коли інтервали стають досить маленькими. Однак якщо після декількох проходів схоже, що швидке розбиття сортування потрапило на патологічну поведінку, воно повернеться до нагромадження купи. Це три різних алгоритми сортування, щоб зробити один сорт промисловості.
Те ж саме стосується схем суматора. Відомо, наприклад, що ціла одиниця Pentium 4 використовувала суматор Хан-Карлсона, який представляє собою суміш Когге-Стоун та Брент-Кунг. (Хан-Карлсон особливо цікавий тим, що це "солодке місце" у взаємозв'язку між затримкою розповсюдження та плоттю відмирання, що також є досить енергоефективним.) Часто доводиться використовувати суміш декількох методів.
"Очищені" носії з переносом з підсилювачем досі все ще є нормою для синтезованих мікросхем (наприклад, якщо ви подаєте оператора Verilog "+" на Cadence або Synopsys), коли справа стосується ручного дизайну, сучасних процесорів високого класу з їх суперскаліруемими виходами - Двигуни виконання замовлення, здається, рухаються до дещо іншого дизайну для їх цілих одиниць.
Спекулятивні суматори - це схеми, які мають надзвичайно низьку затримку розповсюдження, але працюють лише певний час (95% часу є типовим), і можна з дуже малою логікою сказати, повертає спекулятивний суматор правильний результат чи ні. Таким чином, ідея полягає в тому, щоб зробити спекулятивне додавання і половину додавання "переносити", паралельно, за один цикл. Якщо спекулятивний суматор повернув правильну відповідь, інструкція виконується. В іншому випадку відкладіть трубопровід і виконайте другу половину точного доповнення.
Оскільки ви знаєте, що повільний шлях займе два цикли, дизайнери могли б використовувати більш простірний та енергоефективний метод, навіть якщо це буде занадто повільним для загального використання.