Considere una ALU de 32 bits o 64 bits que debe implementar tanto la suma de ceros iniciales como la suma de enteros , con baja latencia (digamos unos pocos ciclos), implementada en un proceso lógico moderno de alta frecuencia.
¿Cuál es generalmente más complejo, un sumador rápido o un conteo cero inicial rápido?
integrated-circuit
circuit-design
adder
BeeOnRope
fuente
fuente
clz
instrucciones disponibles en la mayoría de las ISA modernas.clz
instrucción SIMD entera en la unidad flotante, lo cual es bastante inusual (la única otra cosa entera que sigue ese patrón es el número entero mul, lo que no es sorprendente teniendo en cuenta el costo de la rapidez, multiplicadores de ancho).Respuestas:
Para un contador cero inicial de 64 bits, lo que necesitaría es como máximo una cadena combinatoria de 6 NOR de profundidad más un XOR (o equivalente) ("es el primer bit cero y el segundo bit uno", "son los bits anteriores cero, utilizando el resultado del paso anterior ") y LUT de 6 bits.
Eso es muy poco.
Un sumador trivial de búsqueda anticipada con operandos de 64 bits necesita seis etapas, por lo que puede ser mínimamente más rápido, lo que también es muy poco.
En otras palabras: no puedo darte una respuesta definitiva; Las implementaciones rápidas reales dependerán de los bloques estándar que el diseñador de hardware puede emplear: por ejemplo, en un FPGA moderno de alto rendimiento, simplemente usarías un bloque aritmético (y no te importaría el diseño), o lo construirías a partir de 6 -LUTs; entonces, estas consideraciones combinatorias no tienen relevancia para el diseño de FPGA. En un ASIC de una CPU de silicio real, ninguno de los componentes estará cerca de ser lo más complejo durante un solo ciclo de reloj y, por lo tanto, se podrían favorecer más pasos combinatorios a favor de, por ejemplo, una sobrecarga de enrutamiento más baja o una menor probabilidad de conmutación.
fuente