Esta é uma pergunta direta com uma resposta muito complexa.
Primeiro, alguns antecedentes.
O projeto VLSI do mundo real é um campo extremamente técnico que apresenta um equilíbrio de trocas constante de mudanças. O tempo que um circuito leva para calcular uma resposta raramente é o único fator importante. Há também consumo de energia e área física, além de vários fatores que revelam que os circuitos que você está projetando são realmente analógicos (por exemplo, resistência do fio, capacitância parasitária). Tudo isso é importante em um circuito real e pode afetar o design escolhido.
Em segundo lugar, você deve considerar todo o ciclo de vida de um projeto. Um adicionador que é apropriado para uma realização VLSI pode não ser apropriado para uma realização FPGA. Se o projeto passar por uma fase sendo testada em um FPGA ... você entendeu.
Em terceiro lugar, nem todo somador é igual. Em uma CPU típica, existem muitos adicionadores que realizam tarefas diferentes; provavelmente existem várias ALUs inteiras, um somador de mantissa de ponto flutuante, um somador que aborda o cálculo, um somador que calcula alvos de ramificação e assim por diante. Isso não está contando os somadores de carry-save encontrados nas modernas unidades de multiplicação. Cada um tem suas próprias peculiaridades e restrições.
O cálculo da meta de ramificação, por exemplo, normalmente envolve a adição de uma pequena constante a uma palavra completa, o que sugere um design de somador diferente daquele que adiciona duas palavras completas. Da mesma forma, a adição de ponto flutuante requer uma etapa de arredondamento pós-adição que pode levar menos de um ciclo, portanto, não há razão para que você não possa roubar o restante do ciclo para finalizar a adição.
Por fim, e talvez o mais importante, os grandes players (por exemplo, Intel, AMD, NVIDIA) são bastante calados sobre detalhes de implementação de baixo nível por razões óbvias, a menos que pensem que podem obter um documento e / ou patente. Mesmo assim, muitas vezes você não pode ter certeza do que eles realmente fizeram sem a engenharia reversa.
Dito isto, existem algumas coisas que sabemos.
A principal coisa que você precisa entender é que os métodos carry-lookahead são blocos de construção e não necessariamente métodos em si mesmos. Uma analogia pode estar em ordem aqui.
Se você pensa em classes de algoritmos, provavelmente aprendeu vários algoritmos de classificação, como classificação rápida, classificação de mesclagem, classificação de inserção e assim por diante. No mundo real, se a classificação é um gargalo de desempenho, qualquer engenheiro decente pensaria neles como blocos de construção primitivos a partir dos quais uma classificação "real" pode ser construída.
O algoritmo de classificação da biblioteca padrão GNU C ++, por exemplo, usa classificação rápida, usando classificação de inserção quando os intervalos são pequenos o suficiente. No entanto, se após algumas passagens parecer que o particionamento de classificação rápida atingiu o comportamento patológico, ele voltará à classificação de heap. São três algoritmos de classificação diferentes para fazer uma classificação de força industrial.
O mesmo se aplica aos circuitos somadores. Sabe-se, por exemplo, que a unidade inteira Pentium 4 usava um somador Han-Carlson, que é uma mistura de Kogge-Stone e Brent-Kung. (Han-Carlson é especialmente interessante, porque é um "ponto ideal" na troca entre atraso de propagação e área da matriz, o que também é bastante eficiente em termos de energia.) Geralmente vale a pena usar uma mistura de vários métodos.
Os aditivos "puros" para transportadores com olhal ainda são a norma nos circuitos sintetizados (por exemplo, se você alimentar um operador Verilog "+" para a Cadence ou Synopsys), quando se trata de design manual, CPUs modernas de ponta com seus recursos superescalares. Os mecanismos de execução de ordem parecem estar se movendo em direção a um design ligeiramente diferente para suas unidades inteiras.
Adicionadores especulativos são circuitos com atraso de propagação extremamente baixo, mas funcionam corretamente corretamente algumas vezes (95% do tempo é típico), e é possível dizer com muito pouca lógica se o somador especulativo retorna o resultado correto ou não. Portanto, a ideia é fazer uma adição especulativa e metade de uma adição de carry-lookahead em paralelo, em um ciclo. Se o somador especulativo retornou a resposta correta, a instrução está concluída. Caso contrário, interrompa o pipeline e faça a outra metade da adição precisa.
Como você sabe que o caminho lento levará dois ciclos, os projetistas poderiam usar um método com mais espaço e economia de energia, mesmo que fosse muito lento para uso geral.