I computer utilizzano effettivamente gli additivi carry-lookahead?


12

Ci sono molti dettagli su come aggiungere additivi lookahead come Kogge-Stone, Lander-Fischer, ecc. Nei corsi CS del college. Sono descritti come "comuni nel settore". Tuttavia, non riesco a trovare alcuna prova (a parte forse la catena di trasporto di Manchester) degli ultimi tempi che sono stati effettivamente utilizzati ovunque in modo specifico. Una ricerca su Google restituisce solo pagine di riviste e ricerche accademiche. Al massimo, vengono fornite ipotetiche implementazioni.

La mia domanda è: ci sono posti specifici / implementazioni che vengono utilizzati additivi carry-lookahead? O sono irrilevanti per il mondo reale?


1
Il tempo di ciclo dei processori ad alte prestazioni e il loro ciclo singolo aggiungono certamente latenza a loro che non usano ripple-carry (ma ciò consentirebbe carry-select). Anche per il processo Intel a 22 nm, l'increspatura di 64 bit in meno di 300ps potrebbe essere improbabile.
Paul A. Clayton,

@ PaulA.Clayton Ho avuto l'impressione di guardare attraverso alcuni fogli di dati che vengono utilizzati additivi carry-select o decoder-like.
qwr

Risposte:


16

Questa è una domanda semplice con una risposta molto complessa.

Prima di tutto, alcuni retroscena.

Il design VLSI nel mondo reale è un campo estremamente tecnico che presenta un equilibrio di compromessi in continua evoluzione. Il tempo impiegato da un circuito per calcolare una risposta è raramente l'unico fattore importante. C'è anche assorbimento di potenza e area fisica, oltre a una serie di fattori che rivelano che i circuiti che stai progettando sono in realtà analogici (ad esempio resistenza del filo, capacità parassita). Tutti questi sono importanti in un circuito reale e possono influire sul design scelto.

In secondo luogo, devi considerare l'intero ciclo di vita di un progetto. Un sommatore che è appropriato per una realizzazione VLSI potrebbe non essere adatto per una realizzazione FPGA. Se il progetto passerà attraverso una fase in fase di test su un FPGA ... ottieni l'immagine.

In terzo luogo, non tutti i sommatori sono uguali. Su una CPU tipica, ci sono molti additivi in ​​giro che svolgono compiti diversi; ci sono probabilmente diversi ALU interi, un sommatore a mantissa a virgola mobile, un sommatore che indirizza il calcolo, un sommatore che calcola gli obiettivi di diramazione e così via. Questo non conta gli additivi carry-save che trovi nelle moderne unità di moltiplicazione. Ognuno ha le sue peculiarità e vincoli.

Il calcolo del target di diramazione, ad esempio, implica in genere l'aggiunta di una piccola costante a una parola completa, il che suggerisce un diverso disegno sommatore da uno che aggiunge due parole intere insieme. Allo stesso modo, l'aggiunta in virgola mobile richiede una fase di arrotondamento post-aggiunta che potrebbe richiedere meno di un ciclo, quindi non c'è motivo per cui non si possa rubare il resto del ciclo per completare l'aggiunta.

Infine, e forse soprattutto, i grandi attori (ad esempio Intel, AMD, NVIDIA) sono abbastanza a corto di dettagli sull'implementazione di basso livello per ovvi motivi, a meno che non pensino di poter ottenere un documento e / o un brevetto da esso. Anche allora, spesso non si può essere sicuri di ciò che hanno effettivamente fatto senza il reverse engineering.

Detto questo, ci sono alcune cose che sappiamo.

La cosa chiave che devi capire è che i metodi carry-lookahead sono elementi costitutivi e non necessariamente metodi in sé. Un'analogia potrebbe essere in ordine qui.

Se pensi alle classi di algoritmi, probabilmente hai imparato un sacco di algoritmi di ordinamento come ordinamento rapido, unione, ordinamento per inserzione e così via. Nel mondo reale, se l'ordinamento è un collo di bottiglia in termini di prestazioni, qualsiasi ingegnere decente penserebbe a questi come blocchi elementari primitivi dai quali può essere costruito un ordinamento "reale".

L'algoritmo di ordinamento della libreria standard GNU C ++, ad esempio, usa l'ordinamento rapido, usando l'ordinamento di inserzione quando gli intervalli diventano abbastanza piccoli. Tuttavia, se dopo alcuni passaggi sembra che il partizionamento rapido dell'ordinamento abbia colpito il comportamento patologico, ricade nell'ordinamento dell'heap. Sono tre diversi algoritmi di ordinamento per creare un ordinamento di forza industriale.

Lo stesso vale per i circuiti sommatori. È noto, ad esempio, che l'unità intera Pentium 4 utilizzava un sommatore Han-Carlson, che è un mix di Kogge-Stone e Brent-Kung. (Han-Carlson è particolarmente interessante, perché è un "punto debole" nel compromesso tra ritardo di propagazione e area del dado che è anche abbastanza efficiente dal punto di vista energetico.) Spesso paga usare un mix di diversi metodi.

Gli additivi "puri" carry-lookahead sono ancora la norma nei circuiti sintetizzati (ad esempio se si alimenta un operatore Verilog "+" a Cadence o Synopsys), quando si tratta di progettare a mano, moderne CPU di fascia alta con la loro superscalare out- i motori di esecuzione dell'ordine sembrano muoversi verso un design leggermente diverso per le loro unità intere.

Gli additivi speculativi sono circuiti che hanno un ritardo di propagazione estremamente basso, ma funzionano correttamente solo un po 'di tempo (il 95% del tempo è tipico) ed è possibile dire con pochissima logica se il sommatore speculativo restituisce il risultato corretto o meno. Quindi l'idea è di fare un'aggiunta speculativa e metà di un'aggiunta carry-lookhead in parallelo, in un ciclo. Se il sommatore speculativo ha restituito la risposta corretta, l'istruzione viene eseguita. Altrimenti, bloccare la tubazione ed eseguire l'altra metà dell'aggiunta accurata.

Poiché sai che il percorso lento richiederà due cicli, i progettisti potrebbero utilizzare un metodo più efficiente in termini di spazio e risparmio energetico, anche se sarebbe troppo lento per un uso generale.


6

Sì, molti computer utilizzano gli additivi carry-lookahead. Ho retroingegnerizzato alcuni vecchi microprocessori e posso fare alcuni esempi.

L'ALU sull'Intel 8008 (il loro primo processore a 8 bit) includeva un grande circuito carry-lookahead implementato con logica dinamica. Questo circuito occupava lo stesso spazio di muore dell'ALU stesso. Carry lookahead è mostrato nella scheda tecnica 8008 , figura 3. Non ho visto altri processori degli anni '70 con carry-lookahead per ALU, quindi l'8008 è un po 'insolito in questo senso.

Il 6502 utilizza la primitiva carry-lookahead per l'incrementatore del contatore di programmi (PC). Rileva se ci sarà un carry dal byte inferiore del PC e lo utilizza per incrementare il byte superiore. Ciò riduce il ripple carry da potenzialmente 16 bit a 8 bit. L'ALU del 6502 utilizza il ripple carry, sebbene la logica di carry sia invertita per i bit alternati, il che taglia un inverter fuori dal percorso e lo rende leggermente più veloce.

Lo Z-80 ha un incrementatore / decrementatore a 16 bit utilizzato per gli aggiornamenti del PC, istruzioni inc / dec e un contatore di loop. Utilizza una struttura carry-skip, quindi i carry vengono calcolati per gruppi di due bit. Inoltre, utilizza alcuni carry-lookahead per generare il carry dai bit 0-7, 7-11 e 12-14. Gli altri carry vengono calcolati con il ripple carry ( dettagli ). L'ALU della Z-80, sorprendentemente, è di 4 bit, quindi ogni operazione a 8 bit fa due passaggi attraverso l'ALU.

L'8085, d'altra parte, utilizza il ripple carry per il suo incrementatore / decrementatore a 16 bit. Ma come il 6502, ottiene un po 'di accelerazione invertendo la logica di trasporto in bit alternati.

L' ARM-1 ha un'ALU a 32 bit senza carry-lookahead, solo portare ondulazione. Utilizza anche il trucco di invertire il carry in bit alternati.

Nel mondo dei minicomputer, molti processori sono stati costruiti dal noto chip ALU 74181 a 4 bit, che aveva un look carry interno. Esempi includono i dati General Nova, Xerox Alto, VAX-11/780 e TI-990. (Vedi l' elenco Wikipedia più lungo .) Alcuni di questi ripple utilizzati vengono trasportati tra ogni chip a 4 bit e alcuni utilizzano il chip 74182 carry lookahead per un lookahead completo.

Riassumendo, diversi microprocessori utilizzano una varietà di tecniche di trasporto a seconda dei loro obiettivi prestazionali e delle operazioni sul percorso critico. L'ALU può utilizzare il carry-lookahead completo (come l'8008) o può anche essere di dimensioni medie (come lo Z-80). L'incrementatore può essere un problema di prestazioni perché in genere è a 16 bit in un processore a 8 bit, con conseguente doppio ritardo nell'ondulazione. L'incrementatore può avere carry ripple (8085), un lookahead carry (6502) o diversi stadi lookahead carry (Z-80).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.