To proste pytanie z bardzo złożoną odpowiedzią.
Po pierwsze, trochę tła.
Rzeczywista konstrukcja VLSI jest niezwykle techniczną dziedziną, w której stale zmienia się równowaga kompromisów. Czas, który obwód zajmuje do obliczenia odpowiedzi, rzadko jest jedynym ważnym czynnikiem. Istnieje również pobór mocy i obszar fizyczny, a także szereg czynników, które ujawniają, że projektowane obwody są w rzeczywistości analogowe (np. Rezystancja drutu, pojemność pasożytnicza). Wszystkie te są ważne w rzeczywistym obwodzie i mogą mieć wpływ na wybór projektu.
Po drugie, musisz wziąć pod uwagę cały cykl życia projektu. Dodatek odpowiedni dla realizacji VLSI może nie być odpowiedni dla realizacji FPGA. Jeśli projekt przejdzie fazę testowaną na FPGA ... otrzymujesz obraz.
Po trzecie, nie każdy sumator jest równy. Na typowym procesorze jest wiele dodatków, które wykonują różne zadania; prawdopodobnie istnieje kilka liczb całkowitych ALU, zmiennoprzecinkowy sumator mantysy, sumator, który dokonuje obliczenia adresu, sumator, który oblicza cele gałęzi i tak dalej. To nie liczy dodawania przeniesienia, które można znaleźć w nowoczesnych jednostkach mnożenia. Każda ma swoje osobliwości i ograniczenia.
Na przykład obliczanie celu rozgałęzienia zwykle obejmuje dodanie małej stałej do pełnego słowa, co sugeruje inny projekt sumatora niż ten, który dodaje dwa pełne słowa razem. Podobnie dodawanie zmiennoprzecinkowe wymaga etapu zaokrąglania po dodaniu, który może zająć mniej niż cykl, więc nie ma powodu, dla którego nie mógłbyś ukraść reszty cyklu, aby zakończyć dodawanie.
Wreszcie, a może przede wszystkim, duzi gracze (np. Intel, AMD, NVIDIA) są dość szczerzy na temat szczegółów implementacji niskiego poziomu z oczywistych powodów, chyba że uważają, że mogą uzyskać z tego papier i / lub patent. Nawet wtedy często nie jesteś pewien, co właściwie zrobili bez inżynierii odwrotnej.
To powiedziawszy, jest kilka rzeczy, które wiemy.
Kluczową rzeczą, którą musisz zdać sobie sprawę, jest to, że metody „noszenia z wyprzedzeniem” są elementami składowymi, a niekoniecznie metodami same w sobie. Analogia może być tutaj słuszna.
Jeśli myślisz o klasach algorytmów, prawdopodobnie nauczyłeś się kilku algorytmów sortowania, takich jak szybkie sortowanie, scalanie, wstawianie itd. W prawdziwym świecie, jeśli sortowanie jest wąskim gardłem w wydajności, każdy porządny inżynier pomyślałby o nich jako prymitywnych elementach, z których można zbudować „prawdziwy” rodzaj.
Na przykład algorytm sortowania ze standardowej biblioteki GNU C ++ używa szybkiego sortowania, używając wstawiania sortowania, gdy odstępy stają się wystarczająco małe. Jeśli jednak po kilku przejściach wygląda na to, że szybkie sortowanie partycjonowania uderzyło w zachowanie patologiczne, wraca do sortowania sterty. To trzy różne algorytmy sortowania, które pozwalają uzyskać jeden rodzaj siły przemysłowej.
To samo dotyczy obwodów sumujących. Wiadomo na przykład, że jednostka całkowita Pentium 4 zastosowała sumator Han-Carlsona, który jest mieszanką Kogge-Stone i Brent-Kung. (Han-Carlson jest szczególnie interesujący, ponieważ jest to „słaby punkt” w kompromisie między opóźnieniem propagacji a obszarem matrycy, który jest również dość energooszczędny.) Często opłaca się stosować kombinację kilku metod.
„Czyste” sumatory przenoszenia są nadal bardzo normą w obwodach syntezowanych (np. Jeśli podajesz operator Verilog „+” do Cadence lub Synopsys), jeśli chodzi o ręczne projektowanie, nowoczesne wysokiej klasy procesory z ich superskalarnymi wyjściami- Wydaje się, że silniki realizacji zamówień wydają się zmierzać w kierunku nieco innej konstrukcji swoich jednostek całkowitych.
Sumatory spekulacyjne to obwody, które mają wyjątkowo małe opóźnienie propagacji, ale działają poprawnie tylko przez pewien czas (typowo 95% czasu), i można bardzo mało logicznie stwierdzić, czy sumator spekulacyjny zwraca poprawny wynik, czy nie. Chodzi więc o to, aby wykonać spekulacyjny dodatek i połowę dodatku noszącego równolegle, w jednym cyklu. Jeśli dodatek spekulacyjny zwrócił poprawną odpowiedź, instrukcja jest wykonywana. W przeciwnym razie zablokuj rurociąg i wykonaj drugą połowę dokładnego dodania.
Ponieważ wiesz, że wolna ścieżka zajmie dwa cykle, projektanci mogliby zastosować więcej miejsca i energooszczędną metodę, nawet jeśli byłaby zbyt wolna do ogólnego użytku.