¿Cómo realiza una unidad lógica aritmética (ALU) la multiplicación, suma y comparación en enteros sin signo muy grandes (8,000,000 bits o más)?

Es bastante simple hacer sumas o restas arbitrarias de longitud usando una ALU. La mayoría de las CPU en estos días tienen ALU de 32 bits o 64 bits (que pueden sumar, restar y, a veces, multiplicar o dividir)

El algoritmo general es el siguiente:

  1. Para cada porción de 32 bits de ambos números, X e Y (a partir del byte menos significativo)
    1. Seleccione la porción de 32 bits de los números X e Y
    2. Suma los dos números X, Y. Obtendrás un llevar a cabo
    3. Guarde los resultados en un registro (o memoria local)
    4. Cargue la siguiente porción de 32 bits de ambos números con la ejecución de la operación anterior agregada en
    5. Repita hasta quedar sin números (vaya al paso a.)

Eventualmente, terminarás con la suma de la suma completa

Multiplicación y DIvison es mucho más complicado de hacer para números de longitud arbitraria.

La ALU en sí misma no maneja inherentemente números tan grandes; por lo general, escribe funciones aritméticas de precisión arbitraria que manejan las manipulaciones en piezas pequeñas. IOW, si agrega 2 números de 64 bits en una CPU de 64 bits, y el bit de acarreo se establece, agrega 1 al “dígito siguiente a la izquierda”. Eso puede “extenderse” por cientos o miles de dígitos. Pero la ALU en sí misma aún maneja números de 64 bits.

Como ha sido trivial (el método se explicó en algunos libros [uno para cada tipo de CPU] que se vendieron por menos de $ 10, IIRC., Y solo uno de ellos habría revelado el método básico: solo necesitabas otros si querías código que alguien ya había escrito) durante al menos 40 años para hacerlo en software, no hay razón para gastar millones para crear hardware para hacerlo. Si bien el original fue escrito en ensamblaje, aritmética de precisión arbitraria: Wikipedia es una implementación de nivel superior de la misma idea.

Primero, un dispositivo de este tipo no tiene una demanda significativa, por lo que la fabricación personalizada sería imposible desde una perspectiva de costos. Nadie en su sano juicio lo aprobaría.

En segundo lugar, la única solución técnica sensata, suponiendo que estamos hablando de tecnología de silicio convencional, es tener algo interno que haga las operaciones poco a poco. En otras palabras, hágalo en software (o microcódigo) en un microprocesador.

Con el fin de realizar incluso adiciones de 64 bits en unos pocos ciclos, los procesadores modernos tienen mucha lógica adicional en la parte superior de la cadena de sumadores básicos y la distribuyen en varios ciclos. 8M es simplemente insostenible: demasiadas puertas en demasiadas etapas de tubería.

Las multiplicaciones son peores: uno necesitaría hacer 8 millones de adiciones, cada una con 8 millones de bits.

Hay múltiples paquetes de software disponibles para manejar números de precisión arbitraria cuando alguien necesita ir más allá de la precisión de enteros estándar y coma flotante. Estoy seguro de que algunos de ellos están lo suficientemente afinados como para que no tenga sentido incluso tener un procesador de 128 bits hoy para operaciones de ALU. Cuando podemos comenzar a construir máquinas con más de 2 ^ 64 bits de memoria direccionable, entonces podemos ver algunos procesadores de 128 bits.

De hecho, hay mucha más demanda de menor precisión en el silicio, para acelerar las cosas o quemar menos energía. Las GPU a menudo tienen soporte para punto flotante de 16 bits (“media precisión”).