Académique Documents
Professionnel Documents
Culture Documents
1. Fetch (Traer)
2. Decode (Descifrar)
3. Execute (Ejecutar)
4. Write (Escribir)
Cada uno de los conceptos anteriores puede ser usado para representar una fase en el "ciclo
de vida" de una instruccin. Una instruccin comienza en la fase de "traer", se mueve a la
fase de "descifrar", despus a la fase "ejecutar", y finalmente a la fase "escribir". Cada fase
toma un tiempo fijo, pero de ningn modo igual al que otra fase toma en cumplir su
cometido.
En la mayora de los ejemplos de procesadores con los que trabajaremos en este artculo,
las cuatro fases tomarn la misma cantidad de tiempo; ste no es generalmente el caso en
procesadores del mundo real. De cualquier manera, si el procesador simple del ejemplo
toma exactamente 1 nanosegundo para terminar cada etapa, entonces el procesador puede
acabar una instruccin cada 4 nanosegundos.
Fundamentos del "Pipelining": una analogia.
Esta seccin utiliza una analoga del sistema productivo de una fbrica para explicar el
termino "pipelining". Otras personas utilizan analogas ms simples, como lavar la ropa,
por ejemplo, para explicar esta tcnica, pero hay ciertas razones por las que eleg una
terminado acabe la etapa 5, el equipo en la etapa 1 comienza el otro SUV. A este ritmo,
toma exactamente cinco horas para acabar un solo SUV, y nuestra fbrica termina un SUV
cada cinco horas.
Nos pegamos un salto al futuro de un ao. Nuestro SUV, el ChwDelorian LE, se vende
como... bueno, se vende como un SUV, lo que significa que le va muy bien. De hecho, se
vende tan bien (a pesar de llamarse as) que hemos captado la atencin de las FF.AA. y nos
ofrecen un contrato millonario para proveer ChwDelorians al Ejrcito, de manera sostenida
y creciente. Las FF.AA. son exigentes, quieren ordenar mltiples ChwDelorians a la vez;
puede llegar una orden por 10 ChwDelorians tan fcilmente como una de 500. Mientras
ms de estas rdenes podamos cumplir por ao fiscal, ms dinero podremos lavar... ejem!,
ganar en ese perodo, con el resultado de que nuestras hojas de balance ya no parezcan
calendario -puros nmeros azules desde ahora! Esto, obviamente, significa que tendremos
que encontrar una manera de incrementar la cantidad de vehculos que nuestra fbrica
puede producir por hora (esto es, nuestra tasa de produccin de ChwDelorians). Construir
ms por hora significa que podemos cumplir los pedidos del Ejrcito ms rpidamente, y
eso significa "we can make more money, baby!
La forma ms intuitiva para incrementar nuestra tasa de produccin sera reducir el tiempo
de produccin de cada vehculo. Si, ya sea mediante presiones laborales o econmicas,
logrsemos que nuestros equipos trabajen al doble de velocidad, nuestra fbrica podra
producir el doble de vehculos en un mismo tiempo de trabajo. Pero nuestros equipos ya
estn trabajando tan duro como pueden, as que a menos que haya una irrupcin
tecnolgica que incremente su productividad, ser negreros no es una solucin viable.
Sin poder acelerar nuestros equipos, siempre existe la alternativa de usar la fuerza bruta y
simplemente inyectar dinero al problema con la construccin de una segunda lnea de
ensamblaje. Si fusemos a contratar y entrenar cinco nuevos equipos para formar esta lnea,
con la misma capacidad de producir un vehculo cada cinco horas, podramos completar el
asombroso total de... Dos! ChwDelorians cada cinco horas el doble de nuestra tasa de
produccin actual. Pero esto no es muy eficiente en trminos del uso de los recursos de la
produccin, pues no solamente tenemos el doble de equipos trabajando a la vez: tambin
tenemos el doble de equipos usando el taca-taca a la vez y eso s que es un problema
tremendo. Debe haber una manera "ms mejol" de hacer las cosas.
Enfrentados a la falta de opciones, contratamos a una consultora para encontrar una manera
inteligente de incrementar la produccin total de la fbrica sin doblar el nmero de equipos
ni sobreexplotar los actuales. Un ao despus, y varias lucas mediante, los consultores
aparecen con una solucin: "Por qu deberan nuestros empleados pasarse 4/5 del da
jugando taca-taca, tomando cafecito y leyendo Chilehardware, si podran estar haciendo
trabajo til durante ese tiempo? Con una apropiada programacin de los cinco equipos
existentes, nuestra fbrica podra completar un ChwDelorian por hora, y as mejorar
dramticamente la eficiencia y el volumen de produccin de nuestra lnea de ensamblaje. El
sistema revisado, se vera ms o menos as: el equipo 1 construye un chasis. Una vez que el
chasis est completo, lo envan al equipo 2 para que ensamblen el motor, mientras
empiezan la construccin de un nuevo chasis. Cuando los equipos 1 y 2 estn listos, el
trabajo del equipo 2 avanza hacia el equipo 3, el del equipo 1 al equipo 2, y el equipo 1
comienza a construir un nuevo chasis."
As, en tanto la lnea de ensamblaje comienza a llenarse con vehculos en diferentes etapas
de produccin, los equipos se ponen a trabajar simultneamente hasta que todos estn
trabajando en un vehculo diferente, en diferentes etapas de produccin. (Por supuesto, as
es como debera ser, para la mayora de nosotros, una lnea de ensamblaje eficiente en la
era post-Ford). Si podemos mantener la lnea llena, manteniendo a todos los equipos
trabajando a la vez, entonces podemos producir un ChwDelorian cada hora: un incremento
de 5x sobre la tasa de produccin anterior. Eso, mis estimados contertulios, vendra siendo
el "pipelining".
Mientras que el tiempo total consumido en cada etapa de produccin no ha cambiado de las
5 horas originales, la tasa a la cual la fbrica como un todo completa los autitos, y por ende
la tasa a la cual la fbrica puede cumplir los pedidos del Ejrcito, ha aumentado
drsticamente. El pipelining hace su truco con la optimizacin total de los recursos
existentes. No necesitamos acelerar cada etapa individual del proceso productivo, ni
tampoco incrementar descabelladamente la cantidad de recursos que inyectamos al
problema; todo lo que necesitamos es obtener ms trabajo de los recursos que ya existen.
Volviendo a los microprocesadores, debiera ser fcil el ver cmo este concepto se aplica a
las cuatro fases del ciclo de vida de una instruccin. Tal como los propietarios de la fbrica
en nuestra analoga queran incrementar el nmero de ChwDelorians que podan producir
en un tiempo det
erminado, los diseadores de microprocesadores siempre estn buscando formas de
incrementar el nmero de instrucciones que un CPU puede completar en un perodo de
tiempo dado. Cuando recordamos que un programa es una secuencia ordenada de
instrucciones, se hace claro que incrementar el nmero de instrucciones ejecutadas por
unidad de tiempo es una forma de disminuir el tiempo total de ejecucin de un programa.
En trminos de nuestra analoga, un programa es como una orden de ChwDelorians del
Ejrcito; tal como el incremento de nuestra tasa de produccin nos permite completar
pedidos ms rpidamente, incrementar la tasa de proceso de instrucciones de nuestro
procesador (esto es, el nmero de instrucciones completadas por unidad de tiempo) nos
permite correr programas ms rpido.
Un ejemplo sin pipelining.
Tiempo atrs, los procesadores sin pipelining trabajaban sobre una instruccin a la vez,
moviendo cada instruccin a travs de las cuatro fases de su ciclo de vida en el tiempo de
un ciclo de reloj. As, los procesadores sin pipeline se llaman tambin procesadores de ciclo
simple, porque todas las instrucciones toman exactamente un ciclo de reloj para ejecutarse
completamente (o, para pasar a travs de las cuatro fases de sus ciclos de vida).
Como el procesador completa instrucciones al ritmo de una por ciclo de reloj, queremos
que el reloj del CPU corra lo ms rpidamente posible, para que la tasa de ejecucin de
instrucciones del procesador (esto es, el nmero de instrucciones completadas por
nanosegundo) sea tan alta como sea posible. As necesitamos calcular la mnima cantidad
de tiempo que toma completar una instruccin, y hacer el ciclo de reloj equivalente a esa
longitud de tiempo. Simplemente pasa que en nuestro caso hipottico de CPU, las cuatro
fases del ciclo de vida de la instruccin toman un total de cuatro nanosegundos para
completarse, por lo tanto deberamos setear la duracin del ciclo de reloj del CPU a cuatro
nanosegundos, as el CPU puede completar todo el ciclo de vida de la instruccin, desde
fetch hasta write-back, en un solo ciclo. (Un ciclo de reloj de CPU es simplemente
denominado ciclo.)
como una especie de marcador para registrar la tasa de ejecucin de cada procesador, y
chequea la cajita en cada uno de los siguientes diagramas para ver cunto le toma al
procesador poblar esta cajita con instrucciones ejecutadas.
Siguiendo con el punto anterior, te puede intrigar por qu la instruccin azul completada en
el cuarto nanosegundo no aparece en la cajita "instrucciones completadas" antes del quinto
nanosegundo. La razn es simple, y emana de la naturaleza del diagrama: en tanto una
instruccin gasta un nanosegundo completo en cada etapa de ejecucin, la instruccin azul
entra en la fase de escritura al principio del cuarto nanosegundo y termina dicha etapa al
final del cuarto nanosegundo. Esto significa que recin en el quinto nanosegundo tenemos
completa la instruccin azul. As, al comienzo del quinto nanosegundo (que coincide con el
fin del cuarto) el procesador ha completado una instruccin.
Un ejemplo con pipelining.
Hacer "pipelining" a un procesador significa descomponer su proceso de ejecucin de
instrucciones lo que hemos estado llamando el "ciclo de vida" de la instruccin- en una
serie de etapas discretas de segmentacin, que pueden ser completadas en secuencia por
hardware especializado. Recuerda la manera en que dividimos el proceso de ensamblaje del
vehculo en cinco etapas discretas, con un equipo dedicado asignado al cumplimiento de
cada etapa, y tendrs el panorama claro.
En tanto el ciclo de vida de una instruccin consiste en cuatro fases completamente
distintas, podemos empezar por descomponer el proceso de ejecucin de instrucciones de
nuestro procesador de ciclo simple en una secuencia de cuatro etapas discretas de
segmentacin un pipeline de cuatro etapas-, donde cada etapa corresponde a una fase en
el ciclo de vida estndar de la instruccin:
Etap
a 4: Escribir los resultados de la instruccin en el archivo de registro.
Observa que nos referimos al nmero de etapas del pipeline como profundidad del pipeline.
Entonces, nuestro pipeline de 4 etapas tiene una profundidad de pipeline igual a 4.
Por conveniencia, digamos que cada una de las cuatro etapas del pipeline anterior toma
exactamente un nanosegundo para terminar su trabajo con una instruccin, tal como cada
equipo en nuestra lnea de ensamblaje demoraba una hora en terminar su porcin de trabajo
en el vehculo. Entonces nuestro proceso de 4 nanosegundos, en nuestro procesador de
ciclo simple, se divide ahora en 4 etapas de pipeline discretas y secuenciales de un
nanosegundo de longitud cada una. Ahora observemos otro diagrama para ver cmo un
CPU con pipeline ejecutara las cuatro instrucciones descritas en la figura PIPELINING.4.
Al comienzo del primer nanosegundo, la instruccin azul entra en la etapa de fetch (traer).
Comienza el segundo nanosegundo y la instruccin azul se mueve a la etapa de
decodificacin mientras la siguiente instruccin, la roja, se abre camino desde el almacn
de cdigo al procesador (esto es, entra a la etapa de fetch). Al comienzo del tercer
nanosegundo, la instruccin azul avanza a la etapa de ejecucin, la instruccin roja a la
etapa de decodificacin, y la instruccin verde entra a la etapa de fetch. En el cuarto, la
instruccin azul avanza a la etapa de escritura, la roja a la de ejecucin, la verde a la
decodificacin, y la violeta a la de fetch. Cuando se ha completado el cuarto nanosegundo y
comienza el quinto, la instruccin azul ha pasado a travs del pipeline y ha terminado su
ejecucin. As podemos decir que al final de cuatro nanosegundos (= a cuatro ciclos de
reloj) el procesador con pipeline ha completado una instruccin.
Al comienzo del quinto nanosegundo, el pipeline est completo y el procesador puede
empezar a completar instrucciones al ritmo de una instruccin por nanosegundo. Esta tasa
de ejecucin de 1 instruccin/ns es un incremento de 4x sobre la tasa del procesador de
ciclo simple, que era 0.25 instrucciones/ns (o 4 instrucciones cada 16 nanosegundos)
Encogiendo el reloj.
Puedes ver en el diagrama anterior que el rol del reloj del CPU cambia levemente en un
procesador con pipeline, versus el procesador de ciclo simple en la figura PIPELINING.4.
Como ahora todas las etapas del pipeline deben trabajar simultneamente y estar listas al
comienzo de cada nanosegundo para para pasar los resultados de su trabajo a la siguiente
etapa, el reloj es necesario para coordinar la actividad del pipeline completo. La forma en
que eso se hace es simple: reducir el tiempo del ciclo de reloj para ajustarse al tiempo que
le toma a cada etapa el completar su trabajo, de manera que al comienzo de cada ciclo de
reloj las distintas etapas entregan la instruccin en la que estaban trabajando a la siguiente