Está en la página 1de 29

CISC Y RISC Por otra parte, en la bsqueda de un mejor aprovechamiento de los micros, se implementaron algunas estrategias.

Las mismas estaban concentradas en las instrucciones, que a travs de los programas, ejecutaba la CPU. Bsicamente hay dos estrategias. La primera, denominada CISC ( Complex Instruction Set Computer ), la otra, RISC (Reduced Instruction Set Computer). Cada una de ellas pretende aumentar la velocidad del procesamiento de la informacin. Los atributos complejo y reducido describen las diferencias entre los dos modelos de arquitectura para microprocesadores solo de forma superficial. Se requiere de muchas otras caractersticas esenciales para definir los RISC y los CISC tpicos. Aun ms, existen diversos procesadores que no se pueden asignar con facilidad a ninguna categora determinada. As, los trminos complejo y reducido, expresan muy bien una importante caracterstica definitiva, siempre que no se tomen solo como referencia las instrucciones, sino que se considere tambin la complejidad del hardware del procesador. Con tecnologas de semiconductores comparables e igual frecuencia de reloj, un procesador RISC tpico tiene una capacidad de procesamiento de dos a cuatro veces mayor que la de un CISC, pero su estructura de hardware es tan simple, que se puede realizar en una fraccin de la superficie ocupada por el circuito integrado de un procesador CISC. Esto hace suponer que RISC reemplazar al CISC, pero la respuesta a esta cuestin no es tan simple ya que: Para aplicar una determinada arquitectura de microprocesador son decisivas las condiciones de realizacin tcnica y sobre todo la rentabilidad, incluyendo los costos de software. Existan y existen razones de compatibilidad para desarrollar y utilizar procesadores de estructura compleja as como un extenso conjunto de instrucciones. La meta principal es incrementar el rendimiento del procesador, ya sea optimizando alguno existente o se desee crear uno nuevo. Para esto se deben considerar tres reas principales a cubrir en el diseo del procesador y estas son:

El encapsulado

La tecnologa de proceso

Diseo del Micro

La arquitectura

La tecnologa de proceso, se refiere a los materiales y tcnicas utilizadas en la fabricacin del circuito integrado, el encapsulado se refiere a cmo se integra un procesador con lo que lo rodea en un sistema funcional, que de alguna manera determina la velocidad total del sistema. Aunque la tecnologa de proceso y de encapsulado son vitales en la elaboracin de procesadores ms rpidos, es la arquitectura del procesador lo que hace la diferencia entre el rendimiento de una CPU (Control Process Unit) y otra. Y es en la evaluacin de las arquitecturas RISC y CISC donde centraremos nuestra atencin. Dependiendo de cmo el procesador almacena los operandos de las instrucciones de la CPU, existen tres tipos de juegos de instrucciones: Juego de instrucciones para arquitecturas basadas en pilas. Juego de instrucciones para arquitecturas basadas en acumulador. Juego de instrucciones para arquitecturas basadas en registros.

Las arquitecturas RISC y CISC son ejemplos de CPU con un conjunto de instrucciones para arquitecturas basadas en registros. La arquitectura CISC (Complex Instruction Set Computer). La microprogramacin es una caracterstica importante y esencial de casi todas las arquitecturas CISC. La microprogramacin significa que cada instruccin de mquina es interpretada por un microprograma localizado en una memoria en el circuito integrado del procesador. En la dcada de los sesentas la microprogramacin, por sus caractersticas, era la tcnica ms apropiada para las tecnologas de memorias existentes en esa poca y permita desarrollar tambin procesadores con compatibilidad ascendente. En consecuencia, los procesadores se dotaron de poderosos conjuntos de instrucciones. Para contrarrestar la crisis del software de ese entonces, empresas electrnicas fabricantes de hardware pensaron que una buena solucin era crear una CPU con un amplio y detallado manejo de instrucciones, a fin de que los programas fueran ms sencillos. Los programadores en consecuencia crearon multitud

de programas para esa arquitectura. La posterior masificacin de los PCs, permiti que el mercado fuera luego copado de software creado para procesadores CISC. Las instrucciones compuestas son decodificadas internamente y ejecutadas con una serie de microinstrucciones almacenadas en una ROM interna. Para esto se requieren de varios ciclos de reloj (al menos uno por microinstruccin). Fue la primera tecnologa de CPUs con la que la maquina PC se dio a conocer mundialmente. Adoptada por Intel, se coloco en las primitivas PCs (procesador 8088) que fueron lanzadas bajo la marca IBM el 12 de Agosto de 1981. Su sistema de trabajo se basa en la Microprogramacin. Dicha tcnica consiste en hacer que cada instruccin sea interpretado por un microprograma localizado en una seccin de memoria en el circuito integrado del Microprocesador. A su vez, las instrucciones compuestas se decodifican para ser ejecutadas por microinstrucciones almacenadas en una Rom interna. Las operaciones se realizan al ritmo de los ciclos de un reloj. Considerando la extraordinaria cantidad de instrucciones que la CPU puede manejar, la construccin de una CPU con arquitectura CISC es realmente compleja. A este grupo pertenecen los microprocesadores de INTEL (celeron, Pentium II, Pentium III, Pentium IV) y AMD (Duron, Athlon). Ventajas de CISC Facilita la depuracin de errores Permite reducir el costo total del sistema Reduce la dificultad de crear compiladores Reduce los costos de creacin del software

Mejora la compactaci n del cdigo

La arquitectura RISC (Reduced Instruction Set Computer).

La CPU o procesador es el centro, el cerebro del ordenador. Sera ella quien dicte las acciones a tomar tras leer la informacin contenida en memoria. Se alimenta de instrucciones en lenguaje ensamblador para, a partir de cada una de estas, generar una plyade de ordenes (micro ordenes) que, semi- ocultas al programador, recorrern las interioridades del propio procesador, activando registros, etc,... de su complejo hardware, a la vez que escapan hacia el exterior de la CPU con la misin de gobernar el comportamiento de la memoria buses de E/S, etc. En resumen son estas micro rdenes las que constituyes el sistema nervioso del ordenador. El problema se plantea al implementar en la CPU un dispositivo que "dispare" una serie de respuestas ante el estimulo de los "LOAD", "STORE", "JUMP", "MOVE".

Las CPU's cuentan con una pequea memoria de control de naturaleza ROM en la que se graba el conjunto de micro ordenes que corresponden a cada instruccin. Cuando una de estas es introducida en el procesador, lo que se hace realmente es utilizarla para direccionar adecuadamente la memoria de control y obtener as las micro rdenes correspondientes. Ventajas? Un cambio en las instrucciones solo exige regrabar esta ROM. Los ordenadores etiquetados como CISC gozan de los privilegios y defectos del microcdigo. La CPU es considerablemente ms rpida que la memoria principal. Esto significa que conviene manejar un amplio abanico de instrucciones complejas cuyo significado equivalga al de varias instrucciones simples, disminuyendo asi los accesos a memoria. A esto se le aade la tendencia de aumentar el grado de complejidad de las instrucciones para acercarlas a los lenguajes de alto nivel. Sin embargo, como resultado de ciertos estudios en los que se examino la frecuencia de utilizacin de las diferentes instrucciones, se observo que el 80 % del tiempo era consumido por solo el 20 % de las instrucciones, con prioridad de los almacenamientos (STORE), cargas (LOAD) y bifurcaciones (BRANCH). Instrucciones ms usadas Esto significa que se posean soberbias memorias de control cuyo contenido era muy poco utilizado. Se estaba penalizando la velocidad de respuesta en aras de tener informacin poco til. La alternativa RISC se basa en esto y propone procesadores cableados con un repertorio simple de instrucciones sencillas y frecuentes; todo Mquinas cdigo complejo puede descomponerse en ms varios congneres ms elementales en los que, compactas para evitar los terribles efectos sobre los y de menor retardos de la memoria principal (MP), se consumo recurre a numerosos registros y a memorias A menor cache. Un registro es una unidad de Facilita el complejida diseo d... menor almacenamiento enclavada en la CPU y, por coste tanto, tan rpida como esta. Las memorias cache son pequeas memorias de alta velocidad, se alimentan de la MP, de la que toman la informacin que esta siendo mas Disminuye Reduce el frecuentemente utilizada. Otro de los objetivos la tamao de del RISC fue lograr que a cada instruccin probabilidad la CPU de fallo correspondiera un solo ciclo de reloj, a excepcin, de aquellos casos que hay que mover datos.

Ventajas RISC

Aun as con todos los datos obtenidos a favor y en contra del CISC y del RISC, hay que tener en cuenta otro factor importante: la eficacia del software. Compiladores optimizados del RISC Es cierto que un procesador RISC es mas veloz que uno CISC, pero tambin lo es que, al ser mas simples las instrucciones, necesita mas de estas para emular funciones complejas, por lo que los programas son mas largos y voluminosos. Es decir, el cdigo objeto generado, ocupa ms memoria y, al ser ms

extenso, emplea ms tiempo en ser procesado. Los partidarios argumentan que el factor volumen de memoria incide poco en el precio, adems estiman que el aumento de cdigo no toma dimensiones importantes por el uso de coprocesadores y compiladores optimizados. Al existir menor variedad en el cdigo generado, el proceso de compilacin es ms rpido. El motivo es que hay menor numero de reglas y posibilidades entre las que elegir (no existir la disyuntiva de construir la misma accin por diferentes caminos, solo habr una forma nica) evitando la exploracin de grandes tablas de instrucciones en busca del sujeto correcto. En un ordenador convencional, la misma instruccin de lenguaje de alto nivel puede ejecutarse de diversa formas, cada una con sus inconvenientes y ventajas, pero en el RISC solo hay una forma de hacer las cosas. Al traducir los lenguajes de alto nivel mediante unidades de extrema simplicidad, se incremente la eficiencia. Si se emplean instrucciones potentes se corre el riesgo de no aprovecharlas en su totalidad y potencia, menor es la adaptacin a los diferentes casos particulares. PROCESAMIENTO PARALELO El procesamiento paralelo es un trmino que se usa para denotar un grupo de tcnicas significativas que se usan para proporcionar tareas simultneas de procesamiento de datos con el fin de aumentar la velocidad computacional de un sistema de computadoras. En lugar de procesar cada instruccin en forma secuencial como es una computadora convencional, un sistema de procesamiento paralelo puede ejecutar procesamiento concurrente de datos para conseguir un menor tiempo de ejecucin. Por ejemplo, cuando se ejecuta una instruccin en la ALU, puede leerse la siguiente instruccin de la memoria. El sistema puede tener 2 o mas ALUS y ser capaz de ejecutar dos o mas instrucciones al mismo tiempo. Adems, el sistema puede tener dos o ms procesadores operando en forma concurrente. EL propsito del procesamiento paralelo es acelerar las posibilidades de procesamiento de la computadora y aumentar su eficiencia, esto es, la capacidad de procesamiento que puede lograrse durante un cierto intervalo de tiempo. La cantidades de circuitera aumenta con el procesamiento paralelo y, con el, tambin el costo del sistema. Sin embargo, los descubrimientos tecnolgicos han reducido el costo de la circuitera a un punto en donde las tcnicas de procesamiento paralelo son econmicamente factibles. El procesamiento paralelo puede considerarse de diversos niveles de complejidad. En el nivel mas bajo, distinguimos entre operaciones seriales y paralelas mediante el tipo de registros que utilizan. Los registros de corrimiento operan en forma serial un bit a la vez, mientras que los registros con carga paralela operan con todos los bits de la palabra en forma simultnea. Puede obtenerse procesamiento paralelos a un nivel ms alto de complejidad al tener mltiples unidades funcionales que ejecuten operaciones idnticas o diferentes, de manera simultnea. El procesamiento paralelo se establece al distribuir los datos entre las unidades funcionales mltiples. Por ejemplo, las operaciones aritmticas, lgicas y de corrimiento pueden separarse en tres unidades y dividirse los operandos a cada una, bajo la supervisin de una unidad de control.

Separando la unidad de ejecucin en 8 unidades funcionales que operan en paralelo. Los operando en los registros se aplican a una de las unidades, dependiendo de la operacin especificada, mediante la instruccin asociada con los operandos. La operacin ejecutada en cada unidad funcional se indica en cada bloque del diagrama. El sumador y el multiplicador de enteros ejecutan las operaciones aritmticas con nmeros enteros. Las operaciones de punto flotante se separan en tres circuitos que operan en paralelo. Las operaciones lgicas de corrimiento y de incremento pueden ejecutarse en forma concurrente sobre diferentes datos. Todas las unidades son independientes unas de otra, por lo que puede correrse un nmero mientras otro se incrementa. Por lo general, una organizacin multifuncional esta asociada con una unidad de control compleja para coordinar todas las agilidades entre los diferentes componentes. Una de las tcnicas ms conocidas para implementar el procesamiento paralelo, es lo que se denominan lneas paralelas pipe line.

Qu ser eso de pipe line?


PIPELINE En computacin, se le llama pipeline a una serie de elementos de procesamiento de datos ordenados de tal modo que la salida de cada uno es la entrada del siguiente, como quien dice una cadena de montaje pero en vez de orientada a la manufactura, orientada al procesamiento de datos e instrucciones. Entender cmo funciona un pipeline es un paso importante para entender qu diablos ocurre dentro de un procesador. Utilizaremos 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 analoga ms elaborada y ms larga para ilustrar cul es la raz de este concepto relativamente simple. Primero, las fbricas basadas en lneas de ensamblaje hacen fcil la visualizacin, y la imagen mental del proceso se puede elaborar de muchas maneras interesantes, con el fin de exponer una variedad de puntos relacionados. En segundo lugar, y quizs ms importante, la gran complejidad de programacin que deben enfrentar los diseadores de la fbrica para ordenar y administrar los recursos tiene anlogos directos en la arquitectura de computadores. En muchos casos, los problemas y las soluciones son exactamente iguales, llevadas simplemente a un dominio diferente. Digamos que mis amigos y yo hemos decidido entrar el negocio de fabricacin automotriz, y que nuestro primer producto debe ser un vehculo deportivo para uso general (SUV). Despus de cierta investigacin, determinamos que hay cinco etapas en el proceso de ensamblaje del SUV:

Construir el chasis

Poner el motor en el chasis

Poner puertas, el cap y las cubiertas en el chasis

Poner las ruedas

Pintar el SUV

Cada una de las etapas de arriba requiere el uso de trabajadores altamente entrenados con habilidades especficas, y sucede que los trabajadores que son buenos para armar los chasis no saben sobre los motores, carrocera, las ruedas, o pintar, y lo mismo pasa con los constructores de motores, los pintores, y los dems equipos de trabajo. As que cuando hacemos nuestra primera tentativa de poner una fbrica de SUV, empleamos y entrenamos a cinco equipos de especialistas, uno para cada etapa del proceso de construccin de los SUV. Hay un equipo para construir el chasis, uno para poner el motor, otro para las ruedas, y un equipo para la pintura. Finalmente, siendo los equipos tan especializados y eficientes, cada etapa del proceso de construccin del SUV le toma exactamente una hora a cada equipo. Ahora, puesto que mis amigos y yo somos simplemente aficionados y no ingenieros industriales, tenamos mucho que aprender sobre la fabricacin y del uso eficiente de los recursos de la fbrica. Basamos el funcionamiento de nuestra primera fbrica en el siguiente plan: colocamos a los cinco equipos en una lnea en el piso de la fbrica, y al comienzo de la lnea tenemos al equipo 1 trabajando. Despus de que la etapa 1 se completa, el equipo de la etapa 1 pasa la SUV parcialmente terminada al equipo de la etapa 2 y despus se van a descansar (para jugar un poco de taca-taca), mientras que el equipo de la etapa 2 construye el motor y lo coloca en el chasis. Una vez que el equipo termina la etapa 2, el SUV pasa a la etapa 3 y el equipo de la etapa 3 asume el control mientras que el equipo de la etapa 2 se une al equipo de la etapa 1 para jugar taca-taca. El SUV pasa por la lnea a travs de las cinco etapas de esta manera, con solamente un equipo trabajando en cada etapa en cualquier hora dada mientras que el resto de los equipos descansa. Una vez que el SUV 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 mejor!" 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, 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 determinado, 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). 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.)

Instrucciones almacenadas

Fetch Decode Execute Write

Instrucciones completadas

Figure PIPELINING.4: Procesador de un solo ciclo. En el diagrama superior, la instruccin azul deja el rea de almacenamiento de cdigo entra al procesador, y avanza a travs de las fases de su ciclo de vida en el curso del ciclo de cuatro nanosegundos, hasta que el final del cuarto nanosegundo completa la ltima fase y su ciclo de vida se acaba Sad El fin del cuarto nanosegundo es tambin el fin del primer ciclo de reloj, por lo tanto ahora que el primer ciclo termin y la instruccin azul ha completado su ejecucin, la instruccin roja puede entrar al procesador al comienzo de un nuevo ciclo de reloj y cruzar el mismo proceso. Esta secuencia de pasos en cuatro nanosegundos se repite hasta que, despus de un total de 16ns (o cuatro ciclos de reloj) el procesador ha completado las cuatro instrucciones a un ritmo de 0.25 instrucciones /ns (=4 instrucciones/16ns). Procesadores de ciclo simple como el de la figura PIPELINING 4 son simples de disear, pero desperdician un montn de recursos de hardware. Todo el espacio blanco en el diagrama representa hardware de proceso que permanece inactivo mientras espera que termine de ejecutarse la instruccin actual. Haciendo "pipelining" al procesador, podemos poner a trabajar ms de ese hardware en cada nanosegundo, incrementando de esa manera la eficiencia del procesador y su performance en la ejecucin de programas. Antes de seguir, debo clarificar unos cuantos aspectos del diagrama anterior que alguien puede encontrar confusos. Al final del diagrama hay una regin nombrada "instrucciones completadas". Ahora, las instrucciones completadas se van al limbo una vez que se terminan de ejecutar; despus de decirle al procesador como modificar la corriente de datos, son simplemente borradas del procesador. (Nota que las instrucciones que han sido borradas del procesador an permanecen en el rea de almacenamiento de cdigo y estn disponibles para su uso repetido.) Entonces la cajita o "instrucciones completadas" al final de la figura PIPELINING.4 no representa una parte real del computador, razn por la cual he puesto una lnea punteada a su alrededor. Esta rea es slo un lugar para que mantengamos registro de cuntas instrucciones ha completado el procesador en cierto intervalo de tiempo, o la tasa de ejecucin de instrucciones del procesador (o tasa de ejecucin, para abreviar), de manera que cuando comparemos diferentes tipos de procesadores tendremos un lugar al cual podremos mirar rpidamente y obtener una impresin instantnea de cul procesador se desempea mejor. Mientras ms

instrucciones complete un procesador en una cantidad de tiempo dada, mejor es su desempeo en los programas, lo cuales son secuencias ordenadas de instrucciones. As que piensa en la cajita de "instrucciones completadas" 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:

Etapa 1: Traer la instruccin desde el almacn de cdigo. Etapa 2: Decodificar la instruccin. Etapa 3: Ejecutar la instruccin. Etapa 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.

Instrucciones almacenadas

Fetch Decode Execute Write

Instrucciones completadas

Figura PIPELINING.5: Pipeline de 4 etapas 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 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 etapa. Como cada pipeline en nuestro procesador de ejemplo se toma un nanosegundo en completar su trabajo, podemos setear el ciclo de reloj en un nanosegundo. Este nuevo mtodo para ajustar el clock del procesador significa que una instruccin nueva no necesariamente se completar al final de cada ciclo, como en el caso del procesador de ciclo simple. En vez de eso, solo al final de aquellos ciclos donde se trabaja en la etapa de escritura, se puede hablar de instrucciones completadas. Los ciclos que tengan la etapa de escritura en blanco no aadirn nuevas instrucciones a la cajita de "instrucciones completadas", y todo ciclo con una etapa de escritura activa aadir una nueva instruccin a la caja. Por supuesto, esto significa que al comenzar a trabajar en un programa habr algunos ciclos de reloj tres para ser exactos- en los cuales no se registrarn instrucciones completadas. Pero una vez que comience el cuarto ciclo, la primera instruccin entrar en la etapa de escritura y el pipeline podr comenzar a ejecutar nuevas instrucciones en cada ciclo, las cuales tendrn un ritmo de ejecucin de 1 instruccin/ns, pues cada ciclo tiene un nanosegundo de longitud. Encogiendo el tiempo de ejecucin de programa. Observa que el pipelining no cambia el tiempo total de ejecucin para cada instruccin individual. Cada instruccin se toma an 4ns para abrirse camino en el procesador; esos 4ns pueden ser divididos en 4 ciclos e 1ns cada uno o en 1 solo gran ciclo, pero son los mismos 4ns. As, el pipelining no acelera la velocidad de ejecucin de instrucciones, pero acelera el tiempo de ejecucin de programas (esto es, el nmero de nanosegundos que toma un programa completo en ejecutarse) incrementando el nmero de instrucciones terminadas por unidad de tiempo. Tal como el pipelining en nuestra cadena de ensamblaje de ChwDelorians nos permite completar los pedidos del Ejrcito en un menor intervalo de tiempo (an cuando seguimos demorando las mismas 5 horas en ensamblar un vehculo), el pipelining le permite a un procesador ejecutar programas en un tiempo menor an cuando cada instruccin individual sigue consumiendo el mismo tiempo viajando a travs del CPU. El pipelining hace un uso ms eficiente de los recursos disponibles del CPU poniendo todas sus unidades a trabajar simultneamente, permitindole de esta forma realizar ms trabajo total por cada nanosegundo. Especficamente el pipelining aumenta la tasa de obtencin de resultados, y esto hace que la ejecucin general de un programa se lleve a cabo en una menor cantidad de tiempo. Otra forma de expresarlo es decir que el pipelining permite que el procesador complete ms operaciones en un perodo de tiempo determinado, con el resultado que un lote determinado de instrucciones (un programa, por ejemplo) sea procesado ms rpidamente.

Qu tanto acelera el pipelining? profundo!

Construir

un micro con un pipelining muuuuuyyyyyy

En general, la aceleracin en la tasa de obtencin de resultados en comparacin con la implementacin de un ciclo nico que se gana a partir del pipeline, idealmente, es igual nmero de etapas en el pipeline. Un pipeline de cuatro etapas entrega una aceleracin de cuatro veces en la tasa de obtencin de resultados, en comparacin con un ciclo nico, un pipeline de cinco etapas se acelera cinco veces ms , un pipeline de 12 etapas da una aceleracin 12 veces

mayor, y as. Esta aceleracin es posible porque mientras ms etapas de pipeline hay en un procesador, el procesador puede trabajar en ms instrucciones simultneamente y obtener ms resultados en un perodo de tiempo dado. De manera tal que mientras ms finamente se segmenten esas cuatro fases del ciclo de vida de una instruccin, ms hardware del usado para implementar esas fases se puede poner a trabajar en cualquier momento dado. Para volver a la analoga de la lnea de ensamblaje, digamos que cada equipo est compuesto de seis trabajadores, y que cada tarea que cada equipo realiza en una hora podra subdividirse en dos tareas ms cortas, de 30 minutos cada una. As que podemos doblar la produccin de nuestra fbrica al dividir cada equipo en dos ms pequeos y ms especializados, de tres trabajadores cada uno, y despus hacer que cada uno de estos equipos lleve a cabo una de las tareas ms cortas que en un SUV por 30 minutos. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Etapa 1: Ensamblar el chassis Equipo 1a: Acoplar las partes del chasis y soldar por puntos las junturas Equipo1b: Soldar por completo todas las partes del chasis Etapa 2: Dejar el motor en el chasis Equipo 2a: Ubicar y dejar en su lugar al motor en el chasis Equipo 2b: Conectar el motor a las partes mviles del auto Etapa 3: Colocar puertas, capote y revestimientos en el chasis Equipo 3a: Colocar las puertas y el capote en el chasis Equipo 3b: Colocar los otros revestimientos en el chasis Etapa 4: Ensamblar las ruedas Equipo 4a: Ensamblar las dos ruedas delanteras Equipo 4b: Ensamblar las dos ruedas traseras Etapa 5: Pintar el SUV Equipo 5a: Pintar los lados del SUV Equipo 5b: Pintar la parte de arriba del SUV

Luego de las modificaciones ya descritas, los diez grupos ms pequeos en nuestra fbrica, en conjunto, ahora podran tener un total de 10 SUV en construccin durante un perodo dado de 30 minutos. Ms aun, nuestra fbrica ahora podra terminar un nuevo SUV cada 30 minutos, una mejora diez veces mayor sobre la tasa de cumplimiento de nuestra primera fbrica, que era de un SUV cada cinco horas. As que al usar pipelines en nuestra lnea de ensamblaje, hemos puesto a ms gente a trabajar simultneamente, y as se incrementa el nmero de SUVs en los que se puede trabajar simultneamente, a la par que se incremente el nmero de SUVs que se pueden terminar en un perodo de tiempo determinado. Profundizar el pipeline de nuestro procesador de cuatro fases funciona con principios similares y tiene efectos parecidos en cuanto a tasas de obtencin de resultados. Al igual que las cinco etapas en la lnea de ensamblaje de los SUVs podra segmentarse cada vez ms en una secuencia ms larga compuesta de etapas especializadas, podemos tener que este proceso de ejecucin descompone la instruccin que lo recorre en una serie de etapas que son mu ms que las cuatro fases discretas. Al segmentar el pipeline de cuatro etapas del procesador en una serie ms larga compuesta de etapas ms cortas y especializadas, el procesador puede tener ms hardware especialzado trabajando simultneamente en ms instrucciones y as incrementar el nmero de instrucciones que el pipeline completa cada nanosegundo.

Primero pasamos de un procesador con un ciclo nico a un procesador con pipeline al tomar el perodo de tiempo de cuatro nanosegundos en los que la instruccin pasaba por el procesador y se segmentaba en cuatro etapas discretas de pipeline, de un nanosegundo de duracin cada una. Estas cuatro etapas discretas del pipeline corresponden a las cuatro fases del ciclo de vida de una instruccin. Las etapas de pipeline de un procesador no siempre van a corresponder exactamente con las cuatro fases del ciclo de vida de un procesador. Algunos procesadores tienen un pipeline de cinco etapas, otros lo tienen de seis etapas, y muchos tienen pipelines que van ms all de diez o veinte etapas. En tales casos, el CPU (CPU designer) debe segmentar el ciclo de vida de la instruccin en el nmero correspondiente de etapas de manera tal que todas las etapas tengan igual duracin. Ahora tomemos el proceso de ejecucin y separarmoslo en ocho etapas discretas. Dado que para que funcione el pipelining las ocho etapas deben tener exactamente la misma duracin, cada una de estas etapas debe durar 0,5 nanosegundos (4ns/8=0,5ns). Ya que estamos trabajando con un ejemplo idealizado, pensemos que dividir el ciclo de vida del procesador de cuatro fases de pipelines en ocho de igual duracin (0,5 ns) es un asunto trivial, y que los resultados se parecen a los que se muestran en las figuras PIPELINING 6.1 y PIPELINING 6.2. (En realidad, esta tarea no es trivial, e involucra una serie de compensaciones. Como una concesin a esa realidad, he decidido usar las ocho etapas de un pipeline real, el pipeline MIPS, en los diagramas de ms abajo, en vez de simplemente dividir en dos cada una de las cuatro fases tradicionales) Dado que el pipeline pide que cada etapa del mismo tome exactamente un ciclo de reloj (clock cycle) para completarse, entonces nuestro ciclo (clock cycle) ahora puede acortarse a 0,5 ns para as ajustarse a la duracin de las ocho etapas del pipeline. Echa un vistazo a las figuras PIPELINING 6.1 y PIPELINING 6.2, que se encuentran ms abajo, para observar el impacto que este incremento de nmero en las etapas del pipeline tiene en el nmero de instrucciones procesadas por unidad de tiempo.

Figura PIPELINING.6.1: Pipeline de 8 etapas

Figura PIPELINING.6.2: Pipeline de 8 etapas El procesador de ciclo nico poda terminar de procesar una instruccin cada cuatro nanosegundos, y daba una tasa de obtencin de resultados de 0,25 instrucciones/ns, y el procesador con un pipeline cuatro fases puede terminar de procesar una instruccin cada nanosegundo, y esto da una tasa de resultado de 1 instruccin/ns. El procesador de ocho etapas descrito antes mejora estas dos tasas, al terminar de procesar una instruccin cada 0,5 ns, lo que es una tasa de de obtencin de resultados de 2 instrucciones/ns. Ntese que dado que cada instruccin todava toma 4ns en ejecutarse, los primeros cuatro nanosegundos del procesador de cuatro etapas todava estn dedicados a rellenar (filling up) el pipeline. Pero una vez que el pipeline est lleno (full), el procesador puede empezar a terminar de procesar las instrucciones dos veces ms rpido que el procesador de cuatro etapas, y ocho veces ms rpido que el procesador de una sola etapa. Este aumento en ocho veces en la tasa de obtencin de resultados con respecto a un diseo de un solo ciclo significa que nuestro procesador de ocho fases puede ejecutar programas mucho ms rpido que un procesador de un ciclo nico o uno de cuatro etapas. Pero, en realidad este aumento de ocho veces en la tasa de obtencin de resultados se traduce en un ejecucin de programas ocho veces ms rpida? Bueno, no exactamente.

Tasa de obtencin de resultados y tiempo de ejecucin de programas Si el programa que est ejecutando el procesador de un solo ciclo de la figura 4 consistiese, solamente, en las cuatro instrucciones ya descritas, entonces ese programa tendra un tiempo de ejecucin de 16 nanosegundos, o 4 nanosegundos por instruccin. Si el programa consistiese en, digamos, siete instrucciones, tendra un tiempo de ejecucin total de 4 nanosegundos por instruccin multiplicado por 7 instrucciones, lo que dara un total de 28 nanosegundos.

Instrucciones manejadas y finalizadas

Tiempo de ejecucin de un programa


Nmero instrucciones del programa

En el caso de procesador que tiene un ciclo nico, sin pipeline, la tasa de instrucciones manejadas (X ns por instruccin) es simplemente la inversa del tiempo de ejecucin de una instruccin (1 instruccin por X ns). En el caso de los procesadores que usan el pipeline, este no ocurre. Si ves en la figura PIPELINING. 5, que corresponde al procesador de cuatro fases, la parte de Instrucciones manejadas y terminadas (Completed instructions), vers que al comienzo del noveno nanosegundo ya se han manejado y finalizado un total de cinco instrucciones. En cambio, el procesador sin pipeline tiene dos instrucciones terminadas y completadas al comienzo del noveno nanosegundo. Obviamente, cinco instrucciones terminadas en el espacio de ocho nanosegundos no es un cuatro veces mejor que dos instrucciones terminadas en el mismo perodo de tiempo, entonces, qu sucede? Hay que tener en mente que el procesador necesit los primeros cuatro nanosegundos para llenarse (fill up) de instrucciones; entonces, el procesador no termin de manejar su primera instruccin hasta el final del cuarto nanosegundo. Por ello termin de procesar menos instrucciones de ese programa en los primeros 8 ns que las que habra procesado si el pipeline hubiese estado lleno por esos 8 ns. Se empieza a desvanecer el impacto de esos cuatro nanosegundos iniciales, durante los cuales slo una instruccin se termin de procesar, cuando el procesador est ejecutando programas que consisten en miles de instrucciones; cuando el nmero de nanosegundos se acerca a los miles, la ventaja del procesador con pipeline empieza a ser cuatro veces mayor, acercndose al punto de referencia. Por ejemplo, despus de 1000 nanosegundos, el procesador sin pipeline habr terminado de procesar 250 instrucciones (1000ns x 0,25 instrucciones/ns = 250 instrucciones) mientras que el procesador con

pipeline habr completado 996 instrucciones ((1000ns 4ns) / 1instruccin/ns), lo que da una mejora en 3,984 veces. Al usar el ejemplo concreto de ms arriba, se ha descrito la diferencia que hay entre la tasa mxima de obtencin de resultados de un pipeline, en teora, y su tasa de obtencin de resultados de la realidad. En el ejemplo previo, la tasa mxima, en teora, de obtencin de resultados del procesador de cuatro fases, esto es, su tasa de obtencin de obtencin de resultados cuando el pipeline est completamente lleno, es de 1 instruccin/ ns. Sin embargo, la tasa promedio de obtencin de resultados durante los primeros 8 nanosegundos es de 5 instrucciones/8ns = 0,65 instrucciones/ns. Esta tasa promedio de obtencin de resultados del procesador mejora conforme transcurren ms ciclos de reloj con el pipeline lleno, hasta llegar, a los 1.000 nanosegundos a su tasa promedio de obtencin de resultados de 996 instrucciones/1000ns = 0,996 instrucciones/ns Ejecucin de instrucciones y retrasos en el pipeline A pesar de lo que les he podido hacer creer en las pginas anteriores, el pipeline tiene sus contratiempos. El pipelining le aade complejidad al control lgico del microprocesador, puesto que todas estas fases tienen que mantenerse sincronizadas. Aun ms importante para esta discusin es el hecho de que el pipelining hace ms complejo tanto el diseo del microprocesador como las formas para evaluar el desempeo del mismo. Hasta ahora hemos hablado acerca del desempeo de microprocesador slo en trminos de tasa de manejo de instrucciones, o nmero de instrucciones que el pipeline del procesador poda completar cada nanosegundo. En la realidad, es ms frecuente medir el desempeo segn las instrucciones por ciclo, o el nmero de instrucciones que el procesador puede completar en cada ciclo de reloj. Se podra suponer que las instrucciones por ciclo de un pipeline siempre deberan ser de 1 instruccin/ciclo de reloj, puesto que se ha dicho que un procesador con pipeline completa una nueva instruccin al final de cada ciclo de reloj en donde ha estado activa la etapa de escritura. Hay que resaltar que la importancia que se le da a la fase de la escritura en la ltima definicin de alguna manera confirma esta primera suposicin; ya hemos visto que la fase de la escritura est inactiva durante los ciclos de reloj en los que el pipeline se est llenando, as que en esos ciclos de reloj el nmero de instrucciones por ciclo es de 0 instrucciones/ciclo de reloj. En cambio, cuando el pipeline est lleno y la etapa de escritura est activa, el pipeline del procesador tiene un desempeo de instrucciones por ciclo de 1 instruccin/ciclo de reloj. As que, de la misma forma en que haba una diferencia entre la terica tasa mxima de obtencin de resultados de un procesador y su tasa de obtencin de resultados promedio o reales, tambin hay una diferencia entre el mximo terico de instrucciones por ciclo y las instrucciones por ciclo promedio. 1) Instrucciones por ciclo: se refiere al nmero de instrucciones que el procesador termina de ejecutar en cada ciclo de reloj. Tambin se le llama IPC (Instructions per clock). 2) Mximo terico de instrucciones por ciclo: se refiere al nmero mximo de instrucciones que, en teora, el procesador puede terminar de ejecutar en cada ciclo de reloj. Para las clases ms sencillas de procesadores, con pipeline y sin l, descritos hasta el momento, este nmero siempre es de una instruccin por ciclo (1 instruccin/ciclo o 1 IPC)

3) Promedio de instrucciones ejecutadas por ciclo: el nmero promedio de instrucciones por ciclo (IPC) que el procesador ha terminado por completo en un cierto nmero de ciclos. Las instrucciones por ciclo de un procesador estn ntimamente relacionadas con su tasa de obtencin de resultados, puesto que mientras el procesador complete ms instrucciones durante cada ciclo de reloj, ms instrucciones terminar de ejecutar cada nanosegundo. Ms adelante hablaremos ms de la relacin que existe entre estas dos medidas, pero por ahora slo es necesario recordar que un ndice de instruccin por ciclo ms alto conlleva una tasa de obtencin de resultados ms alta, y, por tanto, un mejor desempeo. Cuando el pipeline se retrasa En la cruda realidad, un pipeline puede encontrarse en muchas ms situaciones que las descritas hasta el momento, como por ejemplo, un pipeline lleno o vaco. A veces las instrucciones quedan atascadas por varios ciclos en una fase del pipeline. Hay una serie de razones por las cuales esto podra ocurrir, pero cuando ocurre, se dice que el pipeline se ha parado. Cuando el pipeline se detiene, o queda parado en una cierta fase, todas las instrucciones que se encuentran en las etapas posteriores a este fallo siguen avanzando normalmente, mientras que la instruccin que qued detenida simplemente se queda en su fase y retrasa a todas las instrucciones que vienen despus de ella. En la figura de ms abajo, la instruccin anaranjada se ha retasado por dos ciclos adicionales en la etapa de fetch (traer). Como consecuencia de esto, por cada ciclo que este pipeline se retrase, va a haber una casilla vaca adelante de l. Una vez que la instruccin empieza a circular otra vez por el pipeline, los vacos que haba en el pipeline por el retraso empiezan a avanzar tambin ms all del punto en que ocurri el error hasta que, eventualmente, dejan el pipeline. A estos vacos se les suele llamar burbujas en el pipeline.

Figura PIPELINING.7: Pipeline stalls en un pipeline de 4 etapas Los retrasos en el pipeline, o burbujas, bajan el promedio de instrucciones ejecutadas por ciclo de un pipeline, dado que no dejan que el pipeline llegue al mximo de instrucciones completadas por ciclo. En la figura de ms arriba, PIPELINING.7, la instruccin anaranjada ha quedado retrasada en la etapa de fetch (traer) por dos ciclos ms, lo que ha creado dos burbujas que se propagarn por el pipeline. Repetimos: la burbuja simplemente es una forma de representar que esa fase -en donde se encuentra la burbuja- no est realizando ninguna operacin durante ese ciclo. Una vez que las instrucciones que siguen a la burbuja han terminado de procesarse, el procesador no seguir manejando nuevas instrucciones hasta que las burbujas salgan del pipeline. As que, al final de los ciclos 9 y 10, no se aaden nuevas instrucciones a la seccin de Instrucciones completadas Completed Instructions-"; normalmente, se aadiran dos nuevas instrucciones a esta regin al final de estos dos ciclos ya mencionados. A pesar de esto ltimo, el procesador est retrasado dos instrucciones cuando llega al ciclo nmero 11 y otra vez empieza a acumular instrucciones completadas. Mientras ms de estas burbujas se acumulen en pipeline, el ndice real de instrucciones por ciclo del procesador se va alejando cada vez ms de su ndice mximo de instrucciones por ciclo. En el ejemplo anterior, idealmente el procesador debera haber completado 7 instrucciones para el momento en que termina el 10 ciclo, para tener un promedio de instrucciones ejecutadas por ciclo de 0,7 instrucciones por ciclo. Hay que recordar que el mximo posible de instrucciones por ciclo, en condiciones ideales, es de 1 instruccin por ciclo de reloj, pero se necesitarn muchos ciclos sin burbujas para poder llegar a este mximo. Por la burbuja en el pipeline, el procesador slo est completando 5 instrucciones en 10 ciclos, y esto da un ndice de instrucciones por segundo de 0,5 instrucciones por segundo. Esto es la mitad del mximo terico de instrucciones por ciclo, pero, por supuesto, el procesador pas varios ciclos llenando el pipeline, as que no habra podido llegar al mximo terico incluso en condiciones ideales. Incluso, es ms importante considerar el hecho de que 0,5 intrucciones por ciclo de reloj es solamente

un 71% del rendimiento que podra haber tenido si no hubiese existidos la burbuja (en este caso, 0,7 instrucciones por ciclo de reloj). Dado que las burbujas reducen el promedio de instrucciones ejecutadas por ciclo del procesador, incrementan el tiempo que se necesita para ejecutar un determinado programa que est corriendo en nuestro computador. Si el programa del ejempo anterior consistiese solamente en las siete instrucciones planteadas, entonces la burbuja habra hecho que el programa tomara un 29% ms en el tiempo de ejecucin del programa. Ahora veamos un grfico que muestra el impacto de un retraso de dos ciclos en promedio de instrucciones ejecutadas por ciclo:

Grfico PIPELINING.2: Resultado promedio de instrucciones en un pipeline de 4 etapas con un stall de 2 ciclos El promedio de instrucciones ejecutadas por ciclo de un procesador deja de elevarse y empieza a desplomarse cuando la primera burbuja llega a la fase de escritura, y esto no se recupera hasta que las burbujas han salido del pipeline. Para tener una idea ms clara del impacto que las burbujas o los retrasos pueden tener en el promedio de instrucciones ejecutadas por ciclo de reloj, veamos el impacto que tiene un retraso de 10 ciclos (empezando en la fase de fetch o traer del ciclo 18) tendra durante el transcurso de 100 ciclos en el pipeline de cuatro fases que se ha descrito hasta ahora.

Grfico PIPELINING.3: Resultado promedio de un pipeline de 4 etapas con un stall de 2 ciclos Luego que de que la primera burbuja del retraso llegue a la fase de escritura en el ciclo 20, el promedio de instrucciones ejecutadas por ciclo deja de incrementarse y empieza a decaer. Para cada ciclo en donde hay una burbuja en la etapa de escritura, el ndice de instrucciones por ciclo es de 0

instrucciones/ciclo de reloj, as que el promedio de instrucciones ejecutadas por ciclo sigue cayendo por todo este tiempo. Despus de que la ltima burbuja ha salidos de la etapa de escritura, entnonces el pipeline empieza a completar nuevas instrucciones, otra vez a una tasa de 1 instruccin/ciclo y su promedio de instrucciones ejecutadas por ciclo empieza a ascender, como tambin empieza a ascender su tasa de obtencin de resultados y su desempeo con respecto a ejecucin de programas. Un porcentaje bastante alto de las caractersticas en la arquitectura de los procesadores en los que he trabajado a lo largo de los aos han estado dedicadas a prevenir las burbujas, las paradas y los retrasos. Particularmente, estoy pensando el predictor de ramificaciones (branch prediction), dado que es una herramienta esencial que evita que los procesadores se paren, por un gran nmero de ciclos, en la fase de fetch (traer). Latencia de instrucciones y retrasos en el pipeline Antes de cerrar nuestra discusin sobre el retraso o paradas en los pipelines, debemos introducir otro trmino que encontraremos en todo el contenido: latencia de instrucciones. La latencia de una instruccin es el nmero de ciclos de reloj que demora la instruccin en pasar por el pipeline. Para un procesador de un ciclo nico, todas las instrucciones tienen una latencia de un ciclo de reloj. Por el contrario, para un pipeline sencillo, como el de cuatro fases que hemos descrito hasta el momento, todas las instrucciones tienen una latencia de cuatro ciclos. Para tener una imagen visual de esto hay que revisar lo que sucede con la instruccin azul en la figura de ms arriba PIPELINING.4; esta instruccin toma cuatro ciclos de reloj en avanzar, a una tasa de un ciclo de reloj por fase, por cada una de las cuatro etapas del pipeline. Igualmente, las instrucciones tienen una latencia de ocho ciclos en un pipeline de ocho fases, de veinte ciclos en un pipeline de veinte fases, y as. En los procesadores del mundo real, la latencia de una instruccin no es necesariamente un nmero predeterminado que es igual al nmero de fases del pipeline. Esto sucede porque las instrucciones pueden quedar atascadas en una o ms fases del pipeline por varios ciclos, y as, cada ciclo extra que pasan esperando, se va aadiendo un ciclo ms a su latencia. As que las latencias de instrucciones que se dieron antes, como cuatro ciclos para un pipeline de cuatro fases, ocho ciclos para un pipeline de ocho fases, y as, tan slo representan el mnimo de latencias de instruccin. Las latencias de instruccin reales de un pipeline de cualquier tamao pueden ser ms grandes que la profundidad del pipeline, esto depende se si la instruccin se para o no en una o ms fases. Los lmites del pipelining Como probablemente te lo habrs imaginado, en una lnea de ensamblaje o de un procesador, en la prctica, hay lmites para cun profundo puede ser un pipeline antes de que la aceleracin en la tasa de obtencin de resultados que se gana por el pipelining empiece a ser notoriamente menos que la aceleracin ideal que se podra esperar. En la realidad, las diferentes fases del ciclo de vida de una instruccin no se descomponen fcilmente en un nmero arbitrario y alto de fases ms cortas y que tienen exactamente la misma duracin. Esencialmente, algunas fases son ms complejas y toman ms tiempo en procesarse que otras. Pero dado que cada fase del pipeline debe tomar exactamente un ciclo de reloj para completarse, entonces el pulso del reloj (clock pulse) que coordina todas las fases no puede ser ms rpido que la fase ms lenta del pipeline. En otras palabras, el tiempo que toma en completarse la fase ms lenta del pipeline determinar la duracin del ciclo de reloj del CPU, y as, tambin determinar la duracin de cada fase del pipeline. Esto significa que la fase ms lenta del pipeline estar activa durante todo el ciclo de reloj, mientras que las fases ms rpidas estarn de

ociosas durante alguna parte del ciclo de reloj. Esto no slo desperdicia recursos, sino que tambin incrementa el tiempo total de ejecucin de cada instruccin al hacer que algunas fases del ciclo de vida de la instruccin tomen ms tiempo del que se tardaran si el procesador no tuviese pipeline. En esta situacin, todas las otras fases deben esperar durante un tiempo extra mientras que la fase ms lenta se pone al da. As que mientras ms detalladamente se segmenta el pipeline para aadir fases e incrementar la productividad, las fases individuales empiezan a ser cada vez menos uniformes en cuanto a complejidad y duracin, y esto hace que se alargue el tiempo total que toma el procesador en completar la ejecucin de una instruccin. Dado que el pipeline tiene esta caracterstica, uno de los desafos ms complicados e importantes para los diseadores de CPU es equilibrar el pipeline para ninguna fase tenga ms trabajo que otra. El diseador debe distribuir de forma pareja la carga para procesar una instruccin, para que as ninguna fase tome demasiado tiempo y ralentice a todo el pipeline. Se puede ver claramente lo difcil que es lograr este equilibrio en las fases de drive del Pentium 4. El nico fin de estas fases es el de llevar o amplificar seales a travs del chip. Si Intel no le hubiese dado sus dos fases separadas a estos dos perodos de propagacin de seales, entonces todas las fases del pipeline del Pentium 4 se habran alargado dado que la propagacin de la seal se demora en slo dos partes del pipeline. Ciclo de reloj y tasa de obtencin de resultados Si el tiempo del ciclo de reloj del pipeline, o perodo de reloj, es ms largo que su duracin ideal (lo que es, tiempo de ejecucin de instruccin sin pipeline/profundidad del pipeline), cosa que siempre ocurre, entonces esto se observar en la tasa de obtencin de resultados. Si la tasa de instrucciones completadas queda fija, digamos, en 1 instruccin/ciclo de reloj, entonces mientras el perodo de reloj aumenta, la tasa de obtencin resultados disminuye. Dado que las nuevas instrucciones slo pueden ser completadas al final de cada ciclo de reloj, un ciclo de reloj ms largo pasa a ser menos instrucciones completadas por nanosegundo, y esto al final resulta en un tiempo ms largo de ejecucin de programas. Para tener una mejor idea de la relacin que existe entre la tasa de obtencin de resultados, las instrucciones completadas y el tiempo del ciclo de reloj, tomaremos nuestro pipeline de ocho fases de la figure PIPELINING.6 e incrementaremos su tiempo de ciclo de reloj a 1 nanosegundos, en lugar de los 0,5 nanosegundos iniciales. El los primeros nueve nanosegundos de ejecucin esto se vera as:

Figura PIPELINING.8: Un pipeline de 8 etapas con un periodo de clock de 1ns Como se puede ver, el tiempo de ejecucin de instrucciones ahora se ha incrementado de un tiempo original de cuatro nanosegundos a un tiempo nuevo de ocho nanosegundos, lo que significa que el pipeline de ocho etapas no termina de ocmpletar su primera instruccin hasta el final de nanosegundo nmero ocho. Una vez que el pipeline est lleno, el procesador ya descrito empieza a completar instrucciones a una tasa de una instruccin por nanosegundo. Esta tasa de obtencin de resultados es la mitad de la tasa de obtencin de resultados ideal del pipeline de ocho etapas con el ciclo de reloj de 0,5 nanosegundos. Tambin es exactamente la misma tasa de obtencin de resultados de 1 instruccin/ns que tena, idealmente, el pipeline de cuatro etapas. En resumen: el tiempo ms largo del ciclo de reloj le ha robado a nuestro pipeline de ocho etapas la ventaja del pipeline profundo, y esto se observa en su tasa de obtencin de resultados. Ms aun, el pipeline de ocho etapas ahroa se demora el doble en llenarse. Veamos la influencia de este tiempo de ejecucin duplicado sobre a la curva promedio de la tasa de obtencin de resultados, en comparacin a la misma curva en un pipeline de cuatro etapas.

Grfico PIPELINING.4: Tasa promedio de completar una instruccin para un pipeline con 4 y 8 etapas con un periodo de clock de 1ns El pipeline de ocho fases demora ms en llenarse, lo que significa que la tasa promedio de obtencin de resultados, y, por ende, su desempeo, subir ms lentamente cuando el pipeline ya est lleno de instrucciones. Hay muchas situaciones en las que el procesador que est ejecutando un programa debe vaciar por completo su pipeline y empezar a rellenarlo a partir de un punto diferente en flujo de datos (code stream). En tales casos, esa subida ms lenta en la curva de la tasa de obtencin de datos influye mucho en el desempeo. Computacin superescalar y pipelining La computacin superescalar permite a los microprocesadores aumentar el nmero de instrucciones por ciclo de reloj que completa ms all de 1 instruccin/ciclo de reloj. Recordando que 1 instruccin/ciclo de reloj es el mximo terico de traspaso de instrucciones que realiza un procesador con pipelines como est definido ms arriba. Debido a que una mquina superescalar puede tener mltiples instrucciones en mltiples etapas de escritura por cada ciclo de reloj, la mquina superescalar puede completar mltiples instrucciones por ciclo. Si adaptamos nuestros anteriores diagramas sobre pipelines para representar la ejecucin superescalar de 2 vas, lucen como sigue:

Figura PIPELINING.11: Ejecucion superescalar y pipeline combinados En la figura anterior, se agregan dos instrucciones al espacio de "Instrucciones Completadas" en cada ciclo de reloj una vez que el pipeline esta lleno. Entre ms pipelines ALU tenga operando en paralelo un procesador, ms instrucciones se agregan al espacio en cada ciclo. Es por esto que la computacin superescalar nos permite incrementar el IPC del procesador si agregamos ms hardware. Hay algunos lmites prcticos por los que muchas instrucciones pueden ser ejecutadas en paralelo, por lo que el procesador no siempre alcanza la tasa ideal de llenado de dos instrucciones por ciclo de reloj. A veces el procesador no puede encontrar dos instrucciones para ejecutar en paralelo en un ciclo particular, lo que significa que debe insertar una burbuja de pipeline en uno de los pipelines del ciclo, llevando hacia abajo la tasa de llenado. Multitareas simultneas y pipelining Manteniendo alta la tasa promedio de llenado del procesador en un superescalar, una mquina con pipelines involucra encontrar formas de programar las instrucciones para que se ejecuten en paralelo en cada ciclo. Pero debido a que el flujo del cdigo est diseado para ser secuencial, hay algunas limitantes inherentes para cuanto paralelismo puede extraer el procesador de el. Una de la maneras en que los ltimos procesadores de Intel, IBM y AMD resuelven este problema es incluyendo soporte para multitareas simultneas (llamado hyperthreading o SMT) en los procesadores y despus dicindole al programador y/o compilador que haga el flujo de cdigo tan explcitamente paralelo como sea posible. Solo las aplicaciones que soportan multitareas pueden sacar el mximo provecho del SMT, y la multitarea solo puede ser ejecutada por los diseadores de la aplicacin.

El diseo de aplicaciones con soporte multitarea involucra identificar porciones de una aplicacin que pueden ser divididos en tareas discretas e independientes, y asignarlas a diferentes ejecuciones. Este proceso de separar en tareas una aplicacin convierte un flujo de cdigo secuencial en un conjunto de dos o ms flujos de cdigos relacionados que pueden ser ejecutados en paralelo. Y cuando dos tareas que se estn ejecutando al mismo tiempo son parte del mismo programa, la tasa de llenado promedio de ese programa se incrementar debido a que ms de sus instrucciones sern completadas en casa ciclo. En este sentido, el SMT puede aumentar la tasa promedio de llenado del programa al permitirle tomar una mejor ventaja de del hardware superescalar.

Figura PIPELINING.12: Diseo de aplicacin multitarea Al disear el flujo de cdigo desde cero hasta un conjunto de pequeos flujos, y que se ejecutan simultneamente, algo de la carga de extraer el paralelismo de nivel de instruccin es movido desde el procesador hacia el programador/compilador. Ntese que los compiladores son notoriamente pobres ante tal paralelismo, por lo que usualmente recaen en los programadores disear que la aplicacin se puede separar en mltiples tareas. No todas las aplicaciones funcionan con implementacin multitarea. En esos casos el SMT ofrece muy pocas ventajas. A pesar de que habra que hablar de por qu se produce este caso en un momento. Por ahora, veamos otra forma en que el SMT puede mejorar el rendimiento de una aplicacin. El SMT no solo mejora el rendimiento de una aplicacin al incrementar la tasa promedio de llenado de un programa con soporte multitarea (es decir, todas las instrucciones se encuentran en el cach L1), sino que tambin puede prevenir que la tasa de llenado caiga a cero como resultado de la perdida de cach y de las latencias de las memorias. Cuando el procesador est ejecutando dos tareas simultneamente, y una de ellas se queda detenida en la etapa de toma (es decir, se produce una perdida de cach por lo que la tarea debe tomar instrucciones o datos desde la memoria principal), el procesador `puede continuar ejecutando normalmente las tarea que no est detenida. En un procesador sin STM, las burbujas de pipelines saldran debajo de la instruccin detenida y se propagaran en el ncleo de la ejecucin, matando la tasa de llenado promedio de la aplicacin. Por otro lado, El procesador SMT puede programar instrucciones de la tarea no detenida para que se ejecuten en aquellos espacios disponibles en los pipelines.

Si las dos tareas nombradas arriba pertenecen a la misma aplicacin, el SMT previene que la tasa de llenado caiga a cero durante la duracin de la detencin de la tarea, mediante la continuacin de la ejecucin de cdigo desde la tarea no detenida. Esto ayuda a mantener la tasa de llenado alta, y tambin ayuda a reducir el tiempo que toma en ejecutar la aplicacin. Por otro lado, si las dos tareas pertenecen a 2 aplicaciones sin soporte multitarea separadas, la tasa de llenado en la aplicacin con la tarea detenida caer a cera, mientras que la tasa de la otra aplicacin no detenida puede mantenerse como mejorar, debido a que la tarea detenida no continua usando recursos del procesador que la tarea no detenida necesita. Al final, es posible que dos aplicaciones sin soporte multiproceso se ejecuten un poco ms lentas en un procesador con SMT, dependiendo del tipo de aplicaciones y otras condiciones, debido a que estara compitiendo entre ellas por los recursos compartidos (por ejemplo, cach, unidades de ejecucin, entradas en cola, etc.). La mayora de los diseos de SMT usan una variedad de tcnicas para minimizar tal competencia y sus efectos, pero siempre es un factor.