Esta es una pregunta sencilla con una respuesta muy compleja.
En primer lugar, algunos antecedentes.
El diseño VLSI del mundo real es un campo extremadamente técnico que presenta un equilibrio de compensaciones en constante cambio. El tiempo que toma un circuito para calcular una respuesta rara vez es el único factor importante. También hay consumo de energía y área física, además de un montón de factores que revelan que los circuitos que está diseñando son en realidad analógicos (por ejemplo, resistencia de cables, capacitancia parásita). Todos estos son importantes en un circuito real y pueden afectar el diseño elegido.
En segundo lugar, debe considerar todo el ciclo de vida de un proyecto. Un sumador que sea apropiado para una realización VLSI puede no ser apropiado para una realización FPGA. Si el diseño va a pasar por una fase que se está probando en un FPGA ... obtendrá la imagen.
En tercer lugar, no todos los sumadores son iguales. En una CPU típica, hay muchos sumadores que realizan tareas diferentes; Probablemente hay varias ALU enteras, un sumador de mantisa de coma flotante, un sumador que hace el cálculo de dirección, un sumador que calcula los objetivos de las ramas, y así sucesivamente. Eso no cuenta los sumadores carry-save que encuentras en las unidades de multiplicación modernas. Cada uno tiene sus propias peculiaridades y limitaciones.
El cálculo del objetivo de la rama, por ejemplo, generalmente implica agregar una pequeña constante a una palabra completa, lo que sugiere un diseño de sumador diferente de uno que agrega dos palabras completas juntas. Del mismo modo, la adición de punto flotante requiere un paso de redondeo posterior a la adición que puede tomar menos de un ciclo, por lo que no hay razón por la que no pueda robar el resto del ciclo para finalizar la adición.
Por último, y quizás lo más importante, los grandes jugadores (por ejemplo, Intel, AMD, NVIDIA) son bastante discretos sobre los detalles de implementación de bajo nivel por razones obvias, a menos que piensen que pueden obtener un documento y / o una patente. Incluso entonces, a menudo no puede estar seguro de lo que realmente hicieron sin ingeniería inversa.
Dicho esto, hay algunas cosas que sabemos.
La clave que debe tener en cuenta es que los métodos de anticipación son elementos básicos y no necesariamente métodos en sí mismos. Una analogía podría estar en orden aquí.
Si piensa en las clases de algoritmos, probablemente haya aprendido un montón de algoritmos de ordenación, como la ordenación rápida, la fusión, la inserción, etc. En el mundo real, si la clasificación es un cuello de botella en el rendimiento, cualquier ingeniero decente pensaría en estos como bloques de construcción primitivos a partir de los cuales se puede construir una clasificación "real".
El algoritmo de ordenamiento de la biblioteca estándar GNU C ++, por ejemplo, usa ordenamiento rápido, usando ordenamiento por inserción cuando los intervalos se vuelven lo suficientemente pequeños. Sin embargo, si después de algunos pases parece que la partición de clasificación rápida ha afectado el comportamiento patológico, vuelve a la clasificación de montón. Son tres algoritmos de clasificación diferentes para hacer una clasificación de fuerza industrial.
Lo mismo se aplica a los circuitos sumadores. Se sabe, por ejemplo, que la unidad entera Pentium 4 usaba un sumador Han-Carlson, que es una mezcla de Kogge-Stone y Brent-Kung. (Han-Carlson es especialmente interesante, porque es un "punto óptimo" en la compensación entre el retraso de propagación y el área de la matriz, que también es bastante eficiente en términos de energía). A menudo vale la pena usar una combinación de varios métodos.
Los sumadores "puros" de búsqueda anticipada siguen siendo la norma en los circuitos sintetizados (p. Ej., Si suministra un operador Verilog "+" a Cadence o Synopsys), cuando se trata de diseño manual, CPU modernas de alta gama con su superescalar- Los motores de ejecución de orden parecen moverse hacia un diseño ligeramente diferente para sus unidades enteras.
Los sumadores especulativos son circuitos que tienen un retardo de propagación extremadamente bajo, pero solo funcionan correctamente algunas veces (el 95% del tiempo es típico), y es posible decir con muy poca lógica si el sumador especulativo devuelve el resultado correcto o no. Entonces, la idea es hacer una adición especulativa y la mitad de una adición de anticipación en paralelo, en un ciclo. Si el sumador especulativo devolvió la respuesta correcta, la instrucción está hecha. De lo contrario, detenga la tubería y realice la otra mitad de la adición precisa.
Debido a que sabe que el camino lento tomará dos ciclos, los diseñadores podrían usar un método más eficiente en términos de espacio y energía incluso si fuera demasiado lento para el uso general.