Las primeras instrucciones no necesariamente se "ejecutan secuencialmente" incluso en un ISA no VLIW, la ejecución solo debe aparecer secuencialmente. Una implementación superescalar en orden puede ejecutar más de una instrucción en paralelo con otra. Para hacer esto de manera efectiva, se debe aumentar (ampliar) el hardware para las instrucciones de decodificación, se debe agregar hardware para garantizar la independencia de los datos de las instrucciones que se ejecutarán en paralelo, se deben aumentar los recursos de ejecución y generalmente se aumenta el número de puertos de archivo de registro. Todos estos agregan transistores.
Una implementación fuera de orden, que permite que las instrucciones posteriores se ejecuten antes que las anteriores, siempre que no existan dependencias de datos, utiliza hardware adicional para manejar la programación de instrucciones tan pronto como los datos estén disponibles y agrega registros de renombrar y hardware para mapeo, asignar y liberarlos (más transistores) para evitar riesgos de escritura después de leer y escribir después de escribir. La ejecución fuera de orden permite al procesador evitar el estancamiento.
El reordenamiento de cargas y almacenes en un procesador fuera de servicio requiere asegurarse de que los almacenes anteriores en el orden del programa reenvíen resultados a cargas posteriores de la misma dirección. Esto implica la lógica de comparación de direcciones, así como el almacenamiento de las direcciones (y el tamaño) de las tiendas (y el almacenamiento de los datos) hasta que la tienda se haya confirmado en la memoria (el caché). (Para un ISA con un modelo de consistencia de memoria menos débil, también es necesario verificar que las cargas se ordenan correctamente con respecto a las tiendas de otros procesadores, más transistores).
La canalización agrega algo de control adicional y sobrecarga de almacenamiento en búfer y evita la reutilización de la lógica para diferentes partes del manejo de instrucciones, pero permite que las diferentes partes del manejo de una instrucción se superpongan a tiempo para diferentes instrucciones.
La canalización y la ejecución superescalar aumentan el impacto de los riesgos de control (es decir, ramas condicionales y saltos). La canalización (y también la ejecución fuera de orden) puede retrasar la disponibilidad del objetivo incluso de saltos incondicionales, por lo que agregar hardware para predecir los objetivos (y la dirección de las ramas condicionales) permite que continúe la búsqueda de instrucciones sin esperar la parte de ejecución del procesador para poner a disposición los datos necesarios. Los predictores más precisos tienden a requerir más transistores.
Para un procesador fuera de servicio, puede ser deseable permitir que se ejecute una carga de memoria antes de que se hayan calculado las direcciones de todas las tiendas anteriores, por lo que se requiere algún hardware para manejar dicha especulación, que podría incluir un predictor.
Los cachés pueden reducir la latencia y aumentar el ancho de banda de los accesos a la memoria, pero agregan transistores para almacenar los datos y almacenar etiquetas (y comparar etiquetas con la dirección solicitada). También se necesita hardware adicional para implementar la política de reemplazo. La captación previa de hardware agregará más transistores.
La implementación de la funcionalidad en hardware en lugar de software puede aumentar el rendimiento (al tiempo que requiere más transistores). Por ejemplo, administración de TLB, operaciones complejas como operaciones de multiplicación o coma flotante, operaciones especializadas como contar ceros iniciales. (Agregar instrucciones también aumenta la complejidad de la decodificación de instrucciones y, por lo general, también la complejidad de la ejecución, por ejemplo, para controlar qué partes del hardware de ejecución se utilizarán).
Las operaciones SIMD / vector aumentan la cantidad de trabajo realizado por instrucción pero requieren más almacenamiento de datos (registros más amplios) y generalmente usan más recursos de ejecución.
(El subprocesamiento múltiple especulativo también podría permitir que múltiples procesadores ejecuten un solo programa de subprocesos más rápido. Obviamente, agregar procesadores a un chip aumentará el recuento de transistores).
Tener más transistores disponibles también puede permitir a los arquitectos informáticos proporcionar a un ISA más registros visibles para el software, lo que puede reducir la frecuencia de los accesos a la memoria, que tienden a ser más lentos que los accesos de registro e implican cierto grado de indirección (por ejemplo, agregar un desplazamiento a la pila puntero) que aumenta la latencia.
La integración, que aumenta la cantidad de transistores en un chip pero no en el sistema, reduce la latencia de comunicación y aumenta el ancho de banda, lo que obviamente permite un aumento en el rendimiento. (También hay una reducción en el consumo de energía que puede traducirse en un mayor rendimiento).
Incluso en el nivel de ejecución de instrucciones, agregar transistores puede aumentar el rendimiento. Por ejemplo, un sumador de selección de acarreo agrega bits superiores dos veces en paralelo con diferentes supuestos del arrastre de los bits inferiores, seleccionando la suma correcta de los bits superiores cuando está disponible la realización de los bits inferiores, lo que obviamente requiere más transistores que un simple Ondulación de carga sumador pero reduciendo el retraso en la producción de la suma total. Del mismo modo, un multiplicador con una sola fila de sumadores de transporte de carga usa menos transistores (pero es más lento) que un multiplicador de árbol Dadda (o Wallace) y no se puede canalizar (por lo que tendría que replicarse para permitir que otra multiplicación comience la ejecución mientras que antes multiplicar estaba en progreso).
¡Lo anterior puede ser agotador pero no exhaustivo!