viernes, 23 de agosto de 2013

Arquitecturas Segmentadas

Arquitecturas Comerciales No Von Neuman 

 

ARQUITECTURAS SEGMENTADAS

En esta entrada hablaremos sobre las arquitecturas segmentadas o que hacen uso de la segmentación, teniendo procesadores segmentados (o en pipeline) los cuales incorporan una técnica para acelerar el ritmo de ejecución de instrucciones.

Para aumentar la velocidad de procesamiento, se usa la segmentación para tener concurrencia a nivel de instrucción en un mismo procesador.

El proceso en pipeline o encadenado es similar al utilizado en cualquier cadena de montaje, y el nombre pipeline (tubería) se debe al hecho de que como en una tubería, en la entrada o input se aceptan nuevos elementos (instrucciones) antes de que los previamente aceptados salgan por el output.
Empecemos con el ejemplo de una cadena de montaje. Supongamos una gran pastelería en la que las tartas primero se hacen en el horno y después se empaquetan para la venta. El proceso de empaquetar una tarta consiste en:


1. Poner una caja vacía en la mesa.
2. Meter una tarta en la caja.
3. Cerrar y precintar la caja.
4. Poner una etiqueta en la caja.
5. Llevar la caja a un gran contenedor.


Si cada una de estas operaciones la realiza un operario en 10  segundos, parece claro que se tarda 50 s en empaquetar una tarta y, por lo tanto, en empaquetar 10 tartas se tardaría 500 s. 



Ahora supongamos que se dispone de una cadena de empaquetado de tartas  con una cinta transportadora sobre la que trabajan cinco operarios especializados en tareas distintas. 
El primer operario pone la caja-1 en la cinta transportadora, y ésta avanza hasta que la caja-1 está donde el segundo  operario, que introduce un a tarta dentro de la caja-1, al mismo tiempo que el primer operario pone otra ca ja-2 en la cinta. La caja-1 sigue avanzando hasta el tercer operario, que la cierra y la precinta, al mismo tiempo que el segundo operario mete otra tarta en la caja-2 y el primer operario pone otra caja-3 en la cinta. La caja-1 sigue su camino en la cinta pasando por el cuarto operario, que  pone una etiqueta, hasta llegar al quinto operario, que la retira de la cinta. En el momento que el quinto operario retira la caja de la cinta, hay cuatro cajas más en la cinta. 
Si cada una de estas fases de empaquetado se realiza en 10 s, a partir  de ahora, cada 10 s saldrá una nueva tarta empaquetada, en lugar de hacerlo  cada 50 s que se tardaba cuando no había cadena de empaquetado. A partir de ahora, en tener 10 tartas empaquetadas se tardará solamente 100 segundos,  mientras que en el caso de cuando se tenía un solo operario se tardaba 500 segundos.


Debe quedar claro que aunque ahora sale una nueva tarta  empaquetada cada 10 s, la preparación completa de cada tarta sigue  requiriendo 50 s (igual que cuando había una sola persona preparando las tartas).

Ahora esta técnica se puede aplicar al procesamiento de instrucciones en una computadora, y se realiza dividiendo en fases de ejecución cada instrucción.





La ejecución de una instrucción se puede descomponerse en las siguientes 5  etapas:
1. F: Alimentación de la instrucción (fetch)
2. D: Decodificación de la instrucción 
3. O: Extracción y cálculo de los operandos
4. E: Ejecución (en la ALU)
5. W: Escritura del resultado (write)
Si ahora la ejecución de una instrucción está descompuesta en 5 etapas, cada  etapa puede durar aproximadamente 1/5 de la duración total de la ejecución de la instrucción. Si suponemos que la duración de un ciclo de reloj es igual a la duración de cada una de estas pequeñas etapas, podemos decir, en principio, que con la técnica del pipelining se consigue que a cada ciclo de reloj finalice una instrucción, o lo que es lo mismo, una velocidad de instrucción por ciclo.

Existen situaciones especiales en las que se deben tomar algunas medidas para que el funcionamiento de un pipeline sea correcto:

Dependencias de datos: 

Sucede cuando dos o más instrucciones comparten un dato o una instrucción necesita un dato que sea resultado de otra instrucción, cuando se detecta esta situación: se puede detener el pipeline hasta que termine la otra instrucción; o se hace un data forwarding, es decir enviar el dato apenas se lo obtenga en la instrucción, para acortar tiempos de espera.

Bifurcaciones:

Cuando un conjunto de instrucciones llega a una bifurcación, sea esta condicional o no condicional, se tiene huecos vacíos en los que el procesador espera algun resultado, lo que se hace para optimizar el pipeline es usar esos huecos para ejecutar otras instrucciones que no tengan dependencias y que no alteren la lógica del programa al cambiar su orden de ejecución.


En el siguiente video se puede ver una animación del funcionamiento de un pipeline.






Bibliografía:

Francisco Aylagas Romero (2012). Arquitectura de Computadores. Madrid. Eureca media. Universidad Politécnica de Madrid.

No hay comentarios:

Publicar un comentario