domingo, 7 de agosto de 2011

CPU - Computación Superescalar Pipeline

En micros modernos pueden encontrase más de una unidad de ejecución trabajando en paralelo. Esto incrementa la performance del micro. Por ejemplo, un procesador con 6 unidades de ejecución podría ejecutar seis instrucciones al mismo tiempo, es decir, en paralelo. Esto, en teoría, daría una performance similar a seis procesadores con una unidad de ejecución. Este tipo de arquitectura se denomina arquitectura superescalar.

Normalmente los procesadores no cuentan con varias unidades de ejecución idénticas; éstos tienen unidades especializadas en un tipo de instrucción. El mejor ejemplo es la unidad de punto flotante FU, la cual se encarga de ejecutar instrucciones matemáticas complejas. Normalmente entre la unidad de decode y de execution hay una unidad denominada Dispatch o Schedule (Planificador) encargada de enviar la instrucción a la unida de ejecución correcta, es decir, si la instrucción es del tipo matemática la enviará a la FPU y sino a una unidad de ejecución “genérica”. Normalmente, con “genérica” se entiende a las unidades denominadas ALU, Arithmetic and Logic Unit.

Otra característica interesante que los procesadores tienen desde hace mucho tiempo es la denominada pipeline, que es la capacidad de tener varias instrucciones diferentes en diferentes etapas del micro al mismo tiempo.

Luego de que la unidad de fetch envía la instrucción al decode, quedará libre, ¿cierto? Entonces, ¿por qué en lugar de no hacer nada, poner la unidad de fetch a cargar la próxima instrucción a ejecutar? Cuando la primer instrucción va a la unidad de ejecución, el fetch puede enviar la segunda al decode y cargar la tercera, y así sucesivamente.

En un micro con un pipeline de 11 etapas (etapa es otro nombre para cada unidad del micro), éste tendrá probablemente 11 instrucciones dentro al mismo tiempo casoi todo el tiempo. De hecho, siendo que todos los micros modernos tienen una arquitectura superescalar, el número de instrucciones simultáneamente dentro del micro será aún más alto. Por ejemplo una instrucción puede ir a la ALU y la próxima a la FPU por lo tanto el decode no debe esperar a que la unidad de ejecución se libere, pues se trata de dos unidades de ejecución diferentes.

A modo de ejemplo se ilustra cómo sería la ejecución de dos instrucciones sin pipeline (arriba) y con pipeline (abajo) de 4 etapas.



Además, para un micro con un pipeline de 11 etapas, una instrucción será ejecutada por completo una vez halla pasado por sus 11 unidades. A mayor número de etapas, mayor tiempo demorará una instrucción a ser ejecutada. Por otro lado, se debe tener presente que debido a este concepto varias instrucciones pueden correr dentro del micro al mismo tiempo. La primera instrucción raída por el fetch puede demorar 1 etapas en salir, per una vez que ésta sale, la segunda instrucción saldrá inmediatamente después (y no 11 etapas más tarde).