Una de las optimizaciones más comunes utilizadas en los procesadores modernos es mantener el silicio lo más ocupado posible. Las unidades de caché acceden a la memoria para el procesador, por lo que otros circuitos no están ocupados por las docenas de ciclos de reloj que se requieren para acceder a la memoria. Los predictores de ramificación programan especulativamente las instrucciones para que el procesador no tenga que esperar a que una ramificación se resuelva por completo a las instrucciones de canalización después de una ramificación. Las instrucciones se ejecutan fuera de orden para que las instrucciones que siguen no se retrasen innecesariamente. Cualquier cosa que pueda ser paralelizada en un procesador, es.
Excepto aparentemente la ALU.
Que yo sepa, las ALU son circuitos integrados que dirigen las operaciones a uno de varios circuitos de operación individuales según la operación especificada por un campo de operación. Las ALU son combinatorias: si un procesador configura la ALU para realizar una operación, como la multiplicación, entonces mientras la ALU ejecuta ese cálculo específico, otras funciones dentro de la ALU, como la adición, son inaccesibles mientras la multiplicación aún se ejecuta. Me parece que un procesador que tenía circuitos lógicos separados para cada operación en lugar de una ALU podría ejecutar ambas operaciones en paralelo, lo que generaría ganancias de rendimiento para el código que utiliza en gran medida múltiples operaciones aritméticas.
Entonces, ¿por qué no se hace esto?
(O al menos, ¿por qué no es lo suficientemente común o lo suficientemente notable como para ser escrito en la literatura sobre arquitectura de computadoras?)