Upload
disk-chinamo
View
392
Download
0
Embed Size (px)
Citation preview
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 1/29
CISC Y RISC
Por otra parte, en la búsqueda de un mejor aprovechamiento de los micros, se implementaron algunas
estrategias. Las mismas estaban concentradas en las instrucciones, que a través de los programas,
ejecutaba la CPU.
Básicamente 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 información.
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 características esenciales
para definir los RISC y los CISC típicos. Aun más, existen diversos procesadores que no se pueden asignar
con facilidad a ninguna categoría determinada.
Así, los términos complejo y reducido, expresan muy bien una importante característica definitiva,
siempre que no se tomen solo como referencia las instrucciones, sino que se considere también lacomplejidad del hardware del procesador.
Con tecnologías de semiconductores comparables e igual frecuencia de reloj, un procesador RISC típico
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 fracción 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 cuestión no es tan simple ya
que:
Para aplicar una determinada arquitectura de microprocesador son decisivas las condiciones de
realización técnica y sobre todo la rentabilidad, incluyendo los costos de software.
Existían 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 diseño del procesador y estas son:
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 2/29
La tecnología de proceso, se refiere a los materiales y técnicas utilizadas en la fabricación del circuito
integrado, el encapsulado se refiere a cómo 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 tecnología de proceso y de encapsulado son vitales en la elaboración de procesadores másrápidos, 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 evaluación de las arquitecturas RISC y CISC donde centraremos
nuestra atención.
Dependiendo de cómo 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 microprogramación es una característica importante y esencial de casi todas las arquitecturas CISC. La
microprogramación significa que cada instrucción de máquina es interpretada por un microprograma
localizado en una memoria en el circuito integrado del procesador.
En la década de los sesentas la microprogramación, por sus características, era la técnica más apropiada
para las tecnologías de memorias existentes en esa época y permitía desarrollar también 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 electrónicas fabricantes de hardware
pensaron que una buena solución era crear una CPU con un amplio y detallado manejo de instrucciones,
a fin de que los programas fueran más sencillos. Los programadores en consecuencia crearon multitud
Diseñodel
Micro
Elencapsulado
Latecnologíade proceso
Laarquitectura
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 3/29
de programas para esa arquitectura. La posterior masificación 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 microinstrucción).
Fue la primera tecnología 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 Microprogramación. Dicha técnica consiste en
hacer que cada instrucción sea interpretado por un microprograma localizado en una sección 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 construcción 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).
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 información contenida en memoria. Se alimenta de instrucciones en lenguaje ensamblador
para, a partir de cada una de estas, generar una pléyade de ordenes (micro ordenes) que, semi- ocultas
al programador, recorrerán 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 misión 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".
Ventajasde CISC
Permitereducir el
costo totaldel sistema
Reduce la
dificultad decrearcompiladores
Reduce los costos decreación del software
Mejora lacompactación del código
Facilita ladepuración de
errores
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 4/29
Las CPU's cuentan con una pequeña memoria de control de naturaleza ROM en la que se graba el
conjunto de micro ordenes que corresponden a cada instrucción. 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 microcódigo. La CPU es
considerablemente más rápida 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 añade 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 utilización 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 más usadas
Esto significa que se poseían soberbias memorias de control cuyo contenido era muy poco utilizado. Se
estaba penalizando la velocidad de respuesta en aras de tener información poco útil.
La alternativa RISC se basa en esto y propone procesadores cableados con un repertorio simple de
instrucciones sencillas y frecuentes; todo
código complejo puede descomponerse en
varios congéneres más elementales en los que,
para evitar los terribles efectos sobre los
retardos de la memoria principal (MP), se
recurre a numerosos registros y a memorias
cache. Un registro es una unidad dealmacenamiento enclavada en la CPU y, por
tanto, tan rápida como esta. Las memorias
cache son pequeñas memorias de alta
velocidad, se alimentan de la MP, de la que
toman la información que esta siendo mas
frecuentemente utilizada. Otro de los objetivos
del RISC fue lograr que a cada instrucción
correspondiera un solo ciclo de reloj, a
excepción, de aquellos casos que hay que
mover datos.
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 también 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 código objeto generado, ocupa más memoria y, al ser más
VentajasRISC
Máquinasmás
compactasy de menor
consumo
Facilita eldiseño
Reduce eltamaño de
la CPU
Disminuyela
probabilidadde fallo
A menor
complejidad... menor
coste
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 5/29
extenso, emplea más tiempo en ser procesado. Los partidarios argumentan que el factor volumen de
memoria incide poco en el precio, además estiman que el aumento de código no toma dimensiones
importantes por el uso de coprocesadores y compiladores optimizados.
Al existir menor variedad en el código generado, el proceso de compilación es más rápido. El motivo es
que hay menor numero de reglas y posibilidades entre las que elegir (no existirá la disyuntiva de
construir la misma acción por diferentes caminos, solo habrá una forma única) evitando la exploración
de grandes tablas de instrucciones en busca del sujeto correcto.
En un ordenador convencional, la misma instrucción 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 adaptación a los diferentes casos particulares.
PROCESAMIENTO PARALELO
El procesamiento paralelo es un término que se usa para denotar un grupo de
técnicas significativas que se usan para proporcionar tareas simultáneas de
procesamiento de datos con el fin de aumentar la velocidad computacional de un
sistema de computadoras. En lugar de procesar cada instrucción 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 ejecución.
Por ejemplo, cuando se ejecuta una instrucción en la ALU, puede leerse la siguiente instrucción de la
memoria. El sistema puede tener 2 o mas ALUS y ser capaz de ejecutar dos o mas instrucciones al mismo
tiempo. Además, el sistema puede tener dos o más procesadores operando en forma concurrente. EL
propósito 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 circuitería aumenta con el procesamiento paralelo y, con el,
también el costo del sistema. Sin embargo, los descubrimientos tecnológicos han reducido el costo de la
circuitería a un punto en donde las técnicas de procesamiento paralelo son económicamente 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 simultánea.
Puede obtenerse procesamiento paralelos a un nivel más alto de complejidad al tener múltiples
unidades funcionales que ejecuten operaciones idénticas o diferentes, de manera simultánea. El
procesamiento paralelo se establece al distribuir los datos entre las unidades funcionales múltiples. Por
ejemplo, las operaciones aritméticas, lógicas y de corrimiento pueden separarse en tres unidades y
dividirse los operandos a cada una, bajo la supervisión de una unidad de control.
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 6/29
Separando la unidad de ejecución en 8 unidades funcionales que operan en paralelo. Los operando en
los registros se aplican a una de las unidades, dependiendo de la operación especificada, mediante la
instrucción asociada con los operandos.
La operación ejecutada en cada unidad funcional se indica en cada bloque del diagrama. El sumador y el
multiplicador de enteros ejecutan las operaciones aritméticas con números enteros. Las operaciones de
punto flotante se separan en tres circuitos que operan en paralelo. Las operaciones lógicas 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 número mientras otro se
incrementa. Por lo general, una organización multifuncional esta asociada con una unidad de control
compleja para coordinar todas las agilidades entre los diferentes componentes.
Una de las técnicas más conocidas para implementar el procesamiento paralelo, es lo que se denominan
líneas paralelas ó pipe line.
PIPELINE
En computación, 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 cómo funciona un pipeline es un paso importante para entender qué diablos ocurre dentro de
un procesador.
Utilizaremos una analogía del sistema productivo de una fábrica para explicar el termino "pipelining".
Otras personas utilizan analogías más simples, como lavar la ropa, por ejemplo, para explicar esta
técnica, pero hay ciertas razones por las que elegí una analogía más elaborada y más larga para ilustrar
cuál es la raíz de este concepto relativamente simple.
Primero, las fábricas basadas en líneas de ensamblaje hacen fácil la visualización, 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 quizás más importante, la gran complejidad de programación
que deben enfrentar los diseñadores de la fábrica para ordenar y administrar los recursos tiene análogos
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 fabricación
automotriz, y que nuestro primer producto debe ser un vehículo deportivo para usogeneral (SUV). Después de cierta investigación, determinamos que hay cinco etapas
en el proceso de ensamblaje del SUV:
¿Qué será eso de pipe line?
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 7/29
Cada una de las etapas de arriba requiere el uso de trabajadores
altamente entrenados con habilidades específicas, y sucede que los
trabajadores que son buenos para armar los chasis no saben sobre los
motores, carrocería, las ruedas, o pintar, y lo mismo pasa con los
constructores de motores, los pintores, y los demás equipos de trabajo.
Así que cuando hacemos nuestra primera tentativa de poner una fábricade SUV, empleamos y entrenamos a cinco equipos de especialistas, uno para cada etapa del proceso de
construcción 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 construcción del SUV le toma exactamente una hora a cada equipo.
Ahora, puesto que mis amigos y yo somos simplemente aficionados y no ingenieros industriales,
teníamos mucho que aprender sobre la fabricación y del uso eficiente de los recursos de la fábrica.
Basamos el funcionamiento de nuestra primera fábrica en el siguiente plan: colocamos a los cinco
equipos en una línea en el piso de la fábrica, y al comienzo de la línea tenemos al equipo 1 trabajando.
Después 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 después 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 línea a través 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 1comienza el otro SUV. A este ritmo, toma exactamente cinco horas para acabar un solo SUV, y nuestra
fábrica termina un SUV cada cinco horas.
Nos pegamos un salto al futuro de un año. 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 atención de las FF.AA. y nos
ofrecen un contrato millonario para proveer ChwDelorians al Ejército, de manera sostenida
Construir
el chasis
Poner el
motor enel chasis
Ponerpuertas, elcapó y las
cubiertasen elchasis
Poner las
ruedas
Pintar el
SUV
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 8/29
y creciente. Las FF.AA. son exigentes, quieren ordenar múltiples ChwDelorians a la vez; puede llegar una
orden por 10 ChwDelorians tan fácilmente como una de 500. Mientras más de estas órdenes podamos
cumplir por año fiscal, más dinero podremos lavar... ejem!, ganar en ese período, con el resultado de
que nuestras hojas de balance ya no parezcan calendario -¡puros números azules desde ahora! Esto,
obviamente, significa que tendremos que encontrar una manera de incrementar la cantidad de
vehículos que nuestra fábrica puede producir por hora (esto es, nuestra tasa de producción de
ChwDelorians). Construir más por hora significa que podemos cumplir los pedidos del Ejército más
rápidamente, y eso significa "we can make more money, baby!
La forma más intuitiva para incrementar nuestra tasa de producción sería reducir el tiempo de
producción de cada vehículo. Si, ya sea mediante presiones laborales o económicas, lográsemos que
nuestros equipos trabajen al doble de velocidad, nuestra fábrica podría producir el doble de vehículos
en un mismo tiempo de trabajo. Pero nuestros equipos ya están trabajando tan duro como pueden, así
que a menos que haya una irrupción tecnológica que incremente su productividad, ser negreros no es
una solución viable.
Sin poder acelerar nuestros equipos, siempre existe la alternativa de usar la fuerza bruta y simplemente
inyectar dinero al problema con la construcción de una segunda línea de ensamblaje. Si fuésemos acontratar y entrenar cinco nuevos equipos para formar esta línea, con la misma capacidad de producir
un vehículo cada cinco horas, podríamos completar el asombroso total de... ¡Dos! ChwDelorians cada
cinco horas – el doble de nuestra tasa de producción actual. Pero esto no es muy eficiente en términos
del uso de los recursos de la producción, pues no solamente tenemos el doble de equipos trabajando a
la vez: también tenemos el doble de equipos usando el taca-taca a la vez y eso sí que es un problema
tremendo. Debe haber una manera "más mejor!" de hacer las cosas.
Enfrentados a la falta de opciones, contratamos a una consultora para encontrar una
manera inteligente de incrementar la producción total de la fábrica sin doblar el
número de equipos ni sobreexplotar los actuales. Un año después, los consultores
aparecen con una solución: "¿Por qué deberían nuestros empleados pasarse 4/5 deldía jugando taca-taca, tomando cafecito y leyendo Chilehardware, si podrían estar
haciendo trabajo útil durante ese tiempo? Con una apropiada programación de los cinco equipos
existentes, nuestra fábrica podría completar un ChwDelorian por hora, y así mejorar dramáticamente la
eficiencia y el volumen de producción de nuestra línea de ensamblaje. El sistema revisado, se vería más
o menos así: el equipo 1 construye un chasis. Una vez que el chasis está completo,
lo envían al equipo 2 para que ensamblen el motor, mientras empiezan la
construcción de un nuevo chasis. Cuando los equipos 1 y 2 están 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 línea de ensamblaje comienza a llenarse con vehículos en
diferentes etapas de producción, los equipos se ponen a trabajar
simultáneamente hasta que todos están trabajando en un vehículo diferente, en
diferentes etapas de producción. (Por supuesto, así es como debería ser, para la mayoría de nosotros,
una línea de ensamblaje eficiente en la era post-Ford). Si podemos mantener la línea 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 producción anterior. Eso, mis estimados contertulios, vendría siendo
el "pipelining".
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 9/29
Mientras que el tiempo total consumido en cada etapa de producción no ha cambiado de las 5 horas
originales, la tasa a la cual la fábrica como un todo completa los autitos, y por ende la tasa a la cual la
fábrica puede cumplir los pedidos del Ejército, ha aumentado drásticamente. El pipelining hace su truco
con la optimización 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 más trabajo de los recursos que ya existen.
Volviendo a los microprocesadores, debiera ser fácil el ver cómo este concepto se aplica a las cuatro
fases del ciclo de vida de una instrucción. Tal como los propietarios de la fábrica en nuestra analogía
querían incrementar el número de ChwDelorians que podían producir en un tiempo determinado, los
diseñadores de microprocesadores siempre están buscando formas de incrementar el número de
instrucciones que un CPU puede completar en un período de tiempo dado. Cuando recordamos que un
programa es una secuencia ordenada de instrucciones, se hace claro que incrementar el número de
instrucciones ejecutadas por unidad de tiempo es una forma de disminuir el tiempo total de ejecución
de un programa. En términos de nuestra analogía, un programa es como una orden de ChwDelorians del
Ejército; tal como el incremento de nuestra tasa de producción nos permite completar pedidos más
rápidamente, incrementar la tasa de proceso de instrucciones de nuestro procesador (esto es, el
número de instrucciones completadas por unidad de tiempo) nos permite correr programas más rápido.
Un ejemplo sin pipelining.
Tiempo atrás, los procesadores sin pipelining trabajaban sobre una instrucción a la vez, moviendo cada
instrucción a través de las cuatro fases de su ciclo de vida en el tiempo de un ciclo de reloj. Así, los
procesadores sin pipeline se llaman también procesadores de ciclo simple, porque todas las
instrucciones toman exactamente un ciclo de reloj para ejecutarse completamente (o, para pasar a
través de las cuatro fases de sus ciclos de vida).
Simplemente pasa que en nuestro caso hipotético de CPU, las cuatro fases del ciclo de vida de la
instrucción toman un total de cuatro nanosegundos para completarse, por lo tanto deberíamos setear laduración del ciclo de reloj del CPU a cuatro nanosegundos, así el CPU puede completar todo el ciclo de
vida de la instrucción, desde fetch hasta write-back, en un solo ciclo. (Un ciclo de reloj de CPU es
simplemente denominado ciclo.)
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 10/29
Figure PIPELINING.4: Procesador de un solo ciclo.
En el diagrama superior, la instrucción azul deja el área de almacenamiento de código entra al
procesador, y avanza a través 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 también el fin del primer ciclo de reloj, por lo tanto ahora
que el primer ciclo terminó y la instrucción azul ha completado su ejecución, la instrucción 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, después 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 diseñar, pero
desperdician un montón 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 instrucción
actual. Haciendo "pipelining" al procesador, podemos poner a trabajar más de ese hardware en cada
nanosegundo, incrementando de esa manera la eficiencia del procesador y su performance en la
ejecución de programas.
Antes de seguir, debo clarificar unos cuantos aspectos del diagrama anterior que alguien puede
encontrar confusos. Al final del diagrama hay una región nombrada "instrucciones completadas". Ahora,
las instrucciones completadas se van al limbo una vez que se terminan de ejecutar; después 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 aún permanecen en el área de almacenamiento
de código y están 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, razón por la cual he puesto
una línea punteada a su alrededor. Esta área es sólo un lugar para que mantengamos registro de
cuántas instrucciones ha completado el procesador en cierto intervalo de tiempo, o la tasa de ejecución
de instrucciones del procesador (o tasa de ejecución, para abreviar), de manera que cuando
comparemos diferentes tipos de procesadores tendremos un lugar al cual podremos mirar rápidamente
y obtener una impresión instantánea de cuál procesador se desempeña mejor. Mientras más
FetchDecodeExecuteWrite
Instrucciones
almacenadas
Instrucciones
completadas
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 11/29
instrucciones complete un procesador en una cantidad de tiempo dada, mejor es su desempeño 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 ejecución de cada
procesador, y chequea la cajita en cada uno de los siguientes diagramas para ver cuánto le toma al
procesador poblar esta cajita con instrucciones ejecutadas.
Siguiendo con el punto anterior, te puede intrigar por qué la instrucción azul completada en el cuarto
nanosegundo no aparece en la cajita "instrucciones completadas" antes del quinto nanosegundo. La
razón es simple, y emana de la naturaleza del diagrama: en tanto una instrucción gasta un nanosegundo
completo en cada etapa de ejecución, la instrucción azul entra en la fase de escritura al principio del
cuarto nanosegundo y termina dicha etapa al final del cuarto nanosegundo. Esto significa que recién en
el quinto nanosegundo tenemos completa la instrucción azul. Así, al comienzo del quinto nanosegundo
(que coincide con el fin del cuarto) el procesador ha completado una instrucción.
Un ejemplo con pipelining.
Hacer "pipelining" a un procesador significa descomponer su proceso de ejecución de instrucciones – lo
que hemos estado llamando el "ciclo de vida" de la instrucción- en una serie de etapas discretas desegmentación, que pueden ser completadas en secuencia por hardware especializado. Recuerda la
manera en que dividimos el proceso de ensamblaje del vehículo en cinco etapas discretas, con un
equipo dedicado asignado al cumplimiento de cada etapa, y tendrás el panorama claro.
En tanto el ciclo de vida de una instrucción consiste en cuatro fases completamente distintas, podemos
empezar por descomponer el proceso de ejecución de instrucciones de nuestro procesador de ciclo
simple en una secuencia de cuatro etapas discretas de segmentación –un pipeline de cuatro etapas-,
donde cada etapa corresponde a una fase en el ciclo de vida estándar de la instrucción:
Etapa 1: Traer la instrucción desde el almacén de código.
Etapa 2: Decodificar la instrucción. Etapa 3: Ejecutar la instrucción.
Etapa 4: Escribir los resultados de la instrucción en el archivo de registro.
Observa que nos referimos al número 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 instrucción, tal como cada equipo en nuestra línea de
ensamblaje demoraba una hora en terminar su porción de trabajo en el vehículo. 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 cómo un CPU con pipeline ejecutaría las cuatro instrucciones descritas en la figura
PIPELINING.4.
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 12/29
Figura PIPELINING.5: Pipeline de 4 etapas
Al comienzo del primer nanosegundo, la instrucción azul entra en la etapa de fetch (traer). Comienza el
segundo nanosegundo y la instrucción azul se mueve a la etapa de decodificación mientras la siguiente
instrucción, la roja, se abre camino desde el almacén de código al procesador (esto es, entra a la etapa
de fetch). Al comienzo del tercer nanosegundo, la instrucción azul avanza a la etapa de ejecución, la
instrucción roja a la etapa de decodificación, y la instrucción verde entra a la etapa de fetch. En el
cuarto, la instrucción azul avanza a la etapa de escritura, la roja a la de ejecución, la verde a la
decodificación, y la violeta a la de fetch. Cuando se ha completado el cuarto nanosegundo y comienza el
quinto, la instrucción azul ha pasado a través del pipeline y ha terminado su ejecución. Así podemos
decir que al final de cuatro nanosegundos (= a cuatro ciclos de reloj) el procesador con pipeline ha
completado una instrucción.
Al comienzo del quinto nanosegundo, el pipeline está completo y el procesador puede empezar a
completar instrucciones al ritmo de una instrucción por nanosegundo. Esta tasa de ejecución de 1
instrucción/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 simultáneamente 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
Fetch
Decode
Execute
Write
Instruccionesalmacenadas
Instruccionescompletadas
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 13/29
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 instrucción 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 método para ajustar el clock del procesador significa que una instrucción 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 añadirán nuevas
instrucciones a la cajita de "instrucciones completadas", y todo ciclo con una etapa de escritura activa
añadirá una nueva instrucción 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 registrarán
instrucciones completadas. Pero una vez que comience el cuarto ciclo, la primera instrucción entrará en
la etapa de escritura y el pipeline podrá comenzar a ejecutar nuevas instrucciones en cada ciclo, las
cuales tendrán un ritmo de ejecución de 1 instrucción/ns, pues cada ciclo tiene un nanosegundo de
longitud.
Encogiendo el tiempo de ejecución de programa.
Observa que el pipelining no cambia el tiempo total de ejecución para cada instrucción individual. Cada
instrucción se toma aún 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 ejecución de instrucciones, pero acelera el tiempo de ejecución de programas (esto es, el
número de nanosegundos que toma un programa completo en ejecutarse) incrementando el número de
instrucciones terminadas por unidad de tiempo. Tal como el pipelining en nuestra cadena de ensamblaje
de ChwDelorians nos permite completar los pedidos del Ejército en un menor intervalo de tiempo (aún
cuando seguimos demorando las mismas 5 horas en ensamblar un vehículo), el pipelining le permite a
un procesador ejecutar programas en un tiempo menor aún cuando cada instrucción individual sigueconsumiendo el mismo tiempo viajando a través del CPU. El pipelining hace un uso más eficiente de los
recursos disponibles del CPU poniendo todas sus unidades a trabajar simultáneamente, permitiéndole
de esta forma realizar más trabajo total por cada nanosegundo.
Específicamente el pipelining aumenta la tasa de obtención de resultados, y esto hace que la ejecución
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 más operaciones en un período de tiempo
determinado, con el resultado que un lote determinado de instrucciones (un programa, por ejemplo)
sea procesado más rápidamente.
En general, la aceleración en la tasa de obtención de resultados en comparación con la
implementación de un ciclo único que se gana a partir del pipeline, idealmente, es igual
número de etapas en el pipeline. Un pipeline de cuatro etapas entrega una aceleración
de cuatro veces en la tasa de obtención de resultados, en comparación con un ciclo único, un pipeline
de cinco etapas se acelera cinco veces más , un pipeline de 12 etapas da una aceleración 12 veces
¿Qué tanto acelera el pipelining? Construiré
un micro con un pipelining muuuuuyyyyyy
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 14/29
mayor, y así. Esta aceleración es posible porque mientras más etapas de pipeline hay en un procesador,
el procesador puede trabajar en más instrucciones simultáneamente y obtener más resultados en un
período de tiempo dado. De manera tal que mientras más finamente se segmenten esas cuatro fases del
ciclo de vida de una instrucción, más hardware del usado para implementar esas fases se puede poner a
trabajar en cualquier momento dado.
Para volver a la analogía de la línea de ensamblaje, digamos que cada equipo está compuesto de seis
trabajadores, y que cada tarea que cada equipo realiza en una hora podría subdividirse en dos tareas
más cortas, de 30 minutos cada una. Así que podemos doblar la producción de nuestra fábrica al dividir
cada equipo en dos más pequeños y más especializados, de tres trabajadores cada uno, y después hacer
que cada uno de estos equipos lleve a cabo una de las tareas más cortas que en un SUV por 30 minutos.
1. Etapa 1: Ensamblar el chassis
2. Equipo 1a: Acoplar las partes del chasis y soldar por puntos las junturas
3. Equipo1b: Soldar por completo todas las partes del chasis
4. Etapa 2: Dejar el motor en el chasis
5. Equipo 2a: Ubicar y dejar en su lugar al motor en el chasis
6. Equipo 2b: Conectar el motor a las partes móviles del auto7. Etapa 3: Colocar puertas, capote y revestimientos en el chasis
8. Equipo 3a: Colocar las puertas y el capote en el chasis
9. Equipo 3b: Colocar los otros revestimientos en el chasis
10. Etapa 4: Ensamblar las ruedas
11. Equipo 4a: Ensamblar las dos ruedas delanteras
12. Equipo 4b: Ensamblar las dos ruedas traseras
13. Etapa 5: Pintar el SUV
14. Equipo 5a: Pintar los lados del SUV
15. Equipo 5b: Pintar la parte de arriba del SUV
Luego de las modificaciones ya descritas, los diez grupos más pequeños en nuestra fábrica, en conjunto,ahora podrían tener un total de 10 SUV en construcción durante un período dado de 30 minutos. Más
aun, nuestra fábrica ahora podría terminar un nuevo SUV cada 30 minutos, una mejora diez veces mayor
sobre la tasa de cumplimiento de nuestra primera fábrica, que era de un SUV cada cinco horas. Así que
al usar pipelines en nuestra línea de ensamblaje, hemos puesto a más gente a trabajar
simultáneamente, y así se incrementa el número de SUVs en los que se puede trabajar
simultáneamente, a la par que se incremente el número de SUVs que se pueden terminar en un período
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 obtención de resultados. Al igual que las cinco etapas en la línea
de ensamblaje de los SUVs podría segmentarse cada vez más en una secuencia más larga compuesta de
etapas especializadas, podemos tener que este proceso de ejecución descompone la instrucción que lo
recorre en una serie de etapas que son mu más que las cuatro fases discretas. Al segmentar el pipeline
de cuatro etapas del procesador en una serie más larga compuesta de etapas más cortas y
especializadas, el procesador puede tener más hardware especialzado trabajando simultáneamente en
más instrucciones y así incrementar el número de instrucciones que el pipeline completa cada
nanosegundo.
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 15/29
Primero pasamos de un procesador con un ciclo único a un procesador con pipeline al tomar el período
de tiempo de cuatro nanosegundos en los que la instrucción pasaba por el procesador y se segmentaba
en cuatro etapas discretas de pipeline, de un nanosegundo de duración cada una. Estas cuatro etapas
discretas del pipeline corresponden a las cuatro fases del ciclo de vida de una instrucción. 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 más allá de diez o veinte etapas. En tales casos, el CPU (CPU
designer) debe segmentar el ciclo de vida de la instrucción en el número correspondiente de etapas de
manera tal que todas las etapas tengan igual duración.
Ahora tomemos el proceso de ejecución y separarémoslo en ocho etapas discretas. Dado que para que
funcione el pipelining las ocho etapas deben tener exactamente la misma duración, 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 duración (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 concesión a esa realidad, he decidido usar las ocho etapas de un pipeline
real, el pipeline MIPS, en los diagramas de más abajo, en vez de simplemente dividir en dos cada una delas 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 duración de las ocho etapas del pipeline. Echa un vistazo a las figuras PIPELINING 6.1 y PIPELINING
6.2, que se encuentran más abajo, para observar el impacto que este incremento de número en las
etapas del pipeline tiene en el número de instrucciones procesadas por unidad de tiempo.
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 16/29
Figura PIPELINING.6.1: Pipeline de 8 etapas
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 17/29
Figura PIPELINING.6.2: Pipeline de 8 etapas
El procesador de ciclo único podía terminar de procesar una instrucción cada cuatro nanosegundos, ydaba una tasa de obtención de resultados de 0,25 instrucciones/ns, y el procesador con un pipeline
cuatro fases puede terminar de procesar una instrucción cada nanosegundo, y esto da una tasa de
resultado de 1 instrucción/ns. El procesador de ocho etapas descrito antes mejora estas dos tasas, al
terminar de procesar una instrucción cada 0,5 ns, lo que es una tasa de de obtención de resultados de 2
instrucciones/ns. Nótese que dado que cada instrucción todavía toma 4ns en ejecutarse, los primeros
cuatro nanosegundos del procesador de cuatro etapas todavía están 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 más rápido que el procesador de cuatro etapas, y ocho veces más
rápido que el procesador de una sola etapa.
Este aumento en ocho veces en la tasa de obtención de resultados con respecto a un diseño de un solociclo significa que nuestro procesador de ocho fases puede ejecutar programas mucho más rápido que
un procesador de un ciclo único o uno de cuatro etapas. Pero, ¿en realidad este aumento de ocho veces
en la tasa de obtención de resultados se traduce en un ejecución de programas ocho veces más rápida?
Bueno, no exactamente.
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 18/29
Tasa de obtención de resultados y tiempo de ejecución 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 tendría un tiempo de ejecución de 16
nanosegundos, o 4 nanosegundos por instrucción. Si el programa consistiese en, digamos, siete
instrucciones, tendría un tiempo de ejecución total de 4 nanosegundos por instrucción multiplicado por
7 instrucciones, lo que daría un total de 28 nanosegundos.
En el caso de procesador que tiene un ciclo único, sin pipeline, la tasa de instrucciones manejadas (X ns
por instrucción) es simplemente la inversa del tiempo de ejecución de una instrucción (1 instrucción 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)”, verás 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 período 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 instrucción hasta el
final del cuarto nanosegundo. Por ello terminó de procesar menos instrucciones de ese programa en los
primeros 8 ns que las que habría 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 sólo una
instrucción se terminó de procesar, cuando el procesador está ejecutando programas que consisten en
miles de instrucciones; cuando el número de nanosegundos se acerca a los miles, la ventaja del
procesador con pipeline empieza a ser cuatro veces mayor, acercándose al punto de referencia. Por
ejemplo, después 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
Instruccionesmanejadas yfinalizadas
Númeroinstruccionesdel programa
Tiempo de ejecuciónde un programa
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 19/29
pipeline habrá completado 996 instrucciones ((1000ns – 4ns) / 1instrucción/ns), lo que da una mejora en
3,984 veces.
Al usar el ejemplo concreto de más arriba, se ha descrito la diferencia que hay entre la tasa máxima de
obtención de resultados de un pipeline, en teoría, y su tasa de obtención de resultados de la realidad. En
el ejemplo previo, la tasa máxima, en teoría, de obtención de resultados del procesador de cuatro fases,
esto es, su tasa de obtención de obtención de resultados cuando el pipeline está completamente lleno,
es de 1 instrucción/ ns. Sin embargo, la tasa promedio de obtención de resultados durante los primeros
8 nanosegundos es de 5 instrucciones/8ns = 0,65 instrucciones/ns. Esta tasa promedio de obtención de
resultados del procesador mejora conforme transcurren más ciclos de reloj con el pipeline lleno, hasta
llegar, a los 1.000 nanosegundos a su tasa promedio de obtención de resultados de 996
instrucciones/1000ns = 0,996 instrucciones/ns
Ejecución de instrucciones y retrasos en el pipeline
A pesar de lo que les he podido hacer creer en las páginas anteriores, el pipeline tiene sus
contratiempos. El pipelining le añade complejidad al control lógico del microprocesador, puesto que
todas estas fases tienen que mantenerse sincronizadas. Aun más importante para esta discusión es elhecho de que el pipelining hace más complejo tanto el diseño del microprocesador como las formas
para evaluar el desempeño del mismo.
Hasta ahora hemos hablado acerca del desempeño de microprocesador sólo en términos de tasa de
manejo de instrucciones, o número de instrucciones que el pipeline del procesador podía completar
cada nanosegundo. En la realidad, es más frecuente medir el desempeño según las instrucciones por
ciclo, o el número de instrucciones que el procesador puede completar en cada ciclo de reloj.
Se podría suponer que las instrucciones por ciclo de un pipeline siempre deberían ser de 1
instrucción/ciclo de reloj, puesto que se ha dicho que un procesador con pipeline completa una nueva
instrucción 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 definición de alguna
manera confirma esta primera suposición; 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
número 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 desempeño de instrucciones
por ciclo de 1 instrucción/ciclo de reloj.
Así que, de la misma forma en que había una diferencia entre la teórica tasa máxima de obtención de
resultados de un procesador y su tasa de obtención de resultados promedio o reales, también hay una
diferencia entre el máximo teórico de instrucciones por ciclo y las instrucciones por ciclo promedio.
1) Instrucciones por ciclo: se refiere al número de instrucciones que el procesador termina de ejecutar
en cada ciclo de reloj. También se le llama IPC (Instructions per clock).
2) Máximo teórico de instrucciones por ciclo: se refiere al número máximo de instrucciones que, en
teoría, el procesador puede terminar de ejecutar en cada ciclo de reloj. Para las clases más sencillas de
procesadores, con pipeline y sin él, descritos hasta el momento, este número siempre es de una
instrucción por ciclo (1 instrucción/ciclo o 1 IPC)
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 20/29
3) Promedio de instrucciones ejecutadas por ciclo: el número promedio de instrucciones por ciclo (IPC)
que el procesador ha terminado por completo en un cierto número de ciclos.
Las instrucciones por ciclo de un procesador están íntimamente relacionadas con su tasa de obtención
de resultados, puesto que mientras el procesador complete más instrucciones durante cada ciclo de
reloj, más instrucciones terminará de ejecutar cada nanosegundo. Más adelante hablaremos más de la
relación que existe entre estas dos medidas, pero por ahora sólo es necesario recordar que un índice de
instrucción por ciclo más alto conlleva una tasa de obtención de resultados más alta, y, por tanto, un
mejor desempeño.
Cuando el pipeline se retrasa
En la cruda realidad, un pipeline puede encontrarse en muchas más situaciones que las descritas hasta
el momento, como por ejemplo, un pipeline lleno o vacío. A veces las instrucciones quedan atascadas
por varios ciclos en una fase del pipeline. Hay una serie de razones por las cuales esto podría 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 siguenavanzando normalmente, mientras que la instrucción que quedó detenida simplemente se queda en su
fase y retrasa a todas las instrucciones que vienen después de ella. En la figura de más abajo, la
instrucción 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 vacía adelante
de él. Una vez que la instrucción empieza a circular otra vez por el pipeline, los vacíos que había en el
pipeline por el retraso empiezan a avanzar también más allá del punto en que ocurrió el error hasta que,
eventualmente, dejan el pipeline. A estos vacíos se les suele llamar “burbujas en el pipeline”.
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 21/29
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 máximo de instrucciones completadas por ciclo. En
la figura de más arriba, PIPELINING.7, la instrucción anaranjada ha quedado retrasada en la etapa de
fetch (traer) por dos ciclos más, lo que ha creado dos burbujas que se propagarán por el pipeline.
Repetimos: la burbuja simplemente es una forma de representar que esa fase -en donde se encuentra laburbuja- no está realizando ninguna operación 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
añaden nuevas instrucciones a la sección de “Instrucciones completadas –Completed Instructions-";
normalmente, se añadirían dos nuevas instrucciones a esta región al final de estos dos ciclos ya
mencionados. A pesar de esto último, el procesador está retrasado dos instrucciones cuando llega al
ciclo número 11 y otra vez empieza a acumular instrucciones completadas.
Mientras más de estas burbujas se acumulen en pipeline, el índice real de instrucciones por ciclo del
procesador se va alejando cada vez más de su índice máximo de instrucciones por ciclo. En el ejemplo
anterior, idealmente el procesador debería haber completado 7 instrucciones para el momento en quetermina el 10 ciclo, para tener un promedio de instrucciones ejecutadas por ciclo de 0,7 instrucciones
por ciclo. Hay que recordar que el máximo posible de instrucciones por ciclo, en condiciones ideales, es
de 1 instrucción por ciclo de reloj, pero se necesitarán muchos ciclos sin burbujas para poder llegar a
este máximo. Por la burbuja en el pipeline, el procesador sólo 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 máximo teórico de instrucciones por ciclo, pero, por supuesto, el procesador pasó varios ciclos
llenando el pipeline, así que no habría podido llegar al máximo teórico incluso en condiciones ideales.
Incluso, es más importante considerar el hecho de que 0,5 intrucciones por ciclo de reloj es solamente
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 22/29
un 71% del rendimiento que podría 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 habría hecho que el programa tomara un 29% más en el tiempo de
ejecución del programa.
Ahora veamos un gráfico que muestra el impacto de un retraso de dos ciclos en promedio de
instrucciones ejecutadas por ciclo:
Gráfico 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 más clara del impacto que las burbujas o los retrasos pueden tener en el promediode 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) tendría durante el transcurso de 100 ciclos en el
pipeline de cuatro fases que se ha descrito hasta ahora.
Gráfico 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
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 23/29
instrucciones/ciclo de reloj, así que el promedio de instrucciones ejecutadas por ciclo sigue cayendo por
todo este tiempo. Después 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 instrucción/ciclo y su
promedio de instrucciones ejecutadas por ciclo empieza a ascender, como también empieza a ascender
su tasa de obtención de resultados y su desempeño con respecto a ejecución de programas.
Un porcentaje bastante alto de las características en la arquitectura de los procesadores en los que he
trabajado a lo largo de los años 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 número de ciclos, en la fase
de fetch (traer).
Latencia de instrucciones y retrasos en el pipeline
Antes de cerrar nuestra discusión sobre el retraso o paradas en los pipelines, debemos introducir otro
término que encontraremos en todo el contenido: latencia de instrucciones. La latencia de una
instrucción es el número de ciclos de reloj que demora la instrucción en pasar por el pipeline. Para un
procesador de un ciclo único, todas las instrucciones tienen una latencia de un ciclo de reloj. Por elcontrario, 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 instrucción azul en la figura de más arriba PIPELINING.4; esta
instrucción 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 instrucción no es necesariamente un número
predeterminado que es igual al número de fases del pipeline. Esto sucede porque las instrucciones
pueden quedar atascadas en una o más fases del pipeline por varios ciclos, y así, cada ciclo extra que
pasan esperando, se va añadiendo un ciclo más a su latencia. Así que las latencias de instrucciones quese dieron antes, como cuatro ciclos para un pipeline de cuatro fases, ocho ciclos para un pipeline de
ocho fases, y así, tan sólo representan el mínimo de latencias de instrucción. Las latencias de instrucción
reales de un pipeline de cualquier tamaño pueden ser más grandes que la profundidad del pipeline, esto
depende se si la instrucción se para o no en una o más fases.
Los límites del pipelining
Como probablemente te lo habrás imaginado, en una línea de ensamblaje o de un procesador, en la
práctica, hay límites para cuán profundo puede ser un pipeline antes de que la aceleración en la tasa de
obtención de resultados que se gana por el pipelining empiece a ser notoriamente menos que la
aceleración ideal que se podría esperar. En la realidad, las diferentes fases del ciclo de vida de una
instrucción no se descomponen fácilmente en un número arbitrario y alto de fases más cortas y que
tienen exactamente la misma duración. Esencialmente, algunas fases son más complejas y toman más
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 más rápido que la fase más lenta del pipeline. En otras palabras, el tiempo que toma en
completarse la fase más lenta del pipeline determinará la duración del ciclo de reloj del CPU, y así,
también determinará la duración de cada fase del pipeline. Esto significa que la fase más lenta del
pipeline estará activa durante todo el ciclo de reloj, mientras que las fases más rápidas estarán de
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 24/29
ociosas durante alguna parte del ciclo de reloj. Esto no sólo desperdicia recursos, sino que también
incrementa el tiempo total de ejecución de cada instrucción al hacer que algunas fases del ciclo de vida
de la instrucción tomen más tiempo del que se tardarían si el procesador no tuviese pipeline. En esta
situación, todas las otras fases deben esperar durante un tiempo extra mientras que la fase más lenta se
pone al día.
Así que mientras más detalladamente se segmenta el pipeline para añadir fases e incrementar la
productividad, las fases individuales empiezan a ser cada vez menos uniformes en cuanto a complejidad
y duración, y esto hace que se alargue el tiempo total que toma el procesador en completar la ejecución
de una instrucción. Dado que el pipeline tiene esta característica, uno de los desafíos más complicados e
importantes para los diseñadores de CPU es equilibrar el pipeline para ninguna fase tenga más trabajo
que otra. El diseñador debe distribuir de forma pareja la carga para procesar una instrucción, para que
así ninguna fase tome demasiado tiempo y ralentice a todo el pipeline.
Se puede ver claramente lo difícil 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 señales a través del chip. Si Intel no le hubiese dado
sus dos fases separadas a estos dos períodos de propagación de señales, entonces todas las fases del
pipeline del Pentium 4 se habrían alargado dado que la propagación de la señal se demora en sólo dospartes del pipeline.
Ciclo de reloj y tasa de obtención de resultados
Si el tiempo del ciclo de reloj del pipeline, o período de reloj, es más largo que su duración ideal (lo que
es, tiempo de ejecución de instrucción sin pipeline/profundidad del pipeline), cosa que siempre ocurre,
entonces esto se observará en la tasa de obtención de resultados. Si la tasa de instrucciones
completadas queda fija, digamos, en 1 instrucción/ciclo de reloj, entonces mientras el período de reloj
aumenta, la tasa de obtención resultados disminuye. Dado que las nuevas instrucciones sólo pueden ser
completadas al final de cada ciclo de reloj, un ciclo de reloj más largo pasa a ser menos instrucciones
completadas por nanosegundo, y esto al final resulta en un tiempo más largo de ejecución deprogramas.
Para tener una mejor idea de la relación que existe entre la tasa de obtención 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 ejecución esto se vería así:
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 25/29
Figura PIPELINING.8: Un pipeline de 8 etapas con un periodo de clock de 1ns
Como se puede ver, el tiempo de ejecución 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 instrucción hasta el final de nanosegundo
número ocho. Una vez que el pipeline está lleno, el procesador ya descrito empieza a completar
instrucciones a una tasa de una instrucción por nanosegundo. Esta tasa de obtención de resultados es la
mitad de la tasa de obtención de resultados ideal del pipeline de ocho etapas con el ciclo de reloj de 0,5
nanosegundos. También es exactamente la misma tasa de obtención de resultados de 1 instrucción/ns
que tenía, idealmente, el pipeline de cuatro etapas. En resumen: el tiempo más 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 obtención de resultados. Más aun, el pipeline de ocho etapas ahroa se demora el doble en
llenarse. Veamos la influencia de este tiempo de ejecución duplicado sobre a la curva promedio de la
tasa de obtención de resultados, en comparación a la misma curva en un pipeline de cuatro etapas.
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 26/29
Gráfico PIPELINING.4: Tasa promedio de completar una instrucción para un pipeline con 4 y 8 etapas con
un periodo de clock de 1ns
El pipeline de ocho fases demora más en llenarse, lo que significa que la tasa promedio de obtención de
resultados, y, por ende, su desempeño, subirá más 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 más lenta en la curva de la tasa de obtención de datos influye
mucho en el desempeño.
Computación superescalar y pipelining
La computación superescalar permite a los microprocesadores aumentar el número de instrucciones porciclo de reloj que completa más allá de 1 instrucción/ciclo de reloj. Recordando que 1 instrucción/ciclo
de reloj es el máximo teórico de traspaso de instrucciones que realiza un procesador con pipelines como
está definido más arriba. Debido a que una máquina superescalar puede tener múltiples instrucciones
en múltiples etapas de escritura por cada ciclo de reloj, la máquina superescalar puede completar
múltiples instrucciones por ciclo. Si adaptamos nuestros anteriores diagramas sobre pipelines para
representar la ejecución superescalar de 2 vías, lucen como sigue:
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 27/29
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 más pipelines ALU tenga operando en paralelo un
procesador, más instrucciones se agregan al espacio en cada ciclo. Es por esto que la computación
superescalar nos permite incrementar el IPC del procesador si agregamos más hardware. Hay algunos
límites prácticos 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 simultáneas y pipelining
Manteniendo alta la tasa promedio de llenado del procesador en un superescalar, una máquina 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 código está diseñado para ser secuencial, hay algunaslimitantes 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 simultáneas (llamado hyperthreading o SMT) en los procesadores y
después diciéndole al programador y/o compilador que haga el flujo de código tan explícitamente
paralelo como sea posible. Solo las aplicaciones que soportan multitareas pueden sacar el máximo
provecho del SMT, y la multitarea solo puede ser ejecutada por los diseñadores de la aplicación.
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 28/29
El diseño de aplicaciones con soporte multitarea involucra identificar porciones de una aplicación que
pueden ser divididos en tareas discretas e independientes, y asignarlas a diferentes ejecuciones. Este
proceso de separar en tareas una aplicación convierte un flujo de código secuencial en un conjunto de
dos o más flujos de códigos relacionados que pueden ser ejecutados en paralelo.
Y cuando dos tareas que se están ejecutando al mismo tiempo son parte del mismo programa, la tasa de
llenado promedio de ese programa se incrementará debido a que más de sus instrucciones serán
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: Diseño de aplicación multitarea
Al diseñar el flujo de código desde cero hasta un conjunto de pequeños flujos, y que se ejecutan
simultáneamente, algo de la carga de extraer el paralelismo de nivel de instrucción es movido desde elprocesador hacia el programador/compilador. Nótese que los compiladores son notoriamente pobres
ante tal paralelismo, por lo que usualmente recaen en los programadores diseñar que la aplicación se
puede separar en múltiples tareas.
No todas las aplicaciones funcionan con implementación multitarea. En esos casos el SMT ofrece muy
pocas ventajas. A pesar de que habría 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 aplicación.
El SMT no solo mejora el rendimiento de una aplicación 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 también 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
simultáneamente, 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 saldrían debajo de la instrucción detenida y se propagarían en el
núcleo de la ejecución, matando la tasa de llenado promedio de la aplicación. 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.
5/10/2018 CISC Y RISC - slidepdf.com
http://slidepdf.com/reader/full/cisc-y-risc-559dfe1ad4af8 29/29
Si las dos tareas nombradas arriba pertenecen a la misma aplicación, el SMT previene que la tasa de
llenado caiga a cero durante la duración de la detención de la tarea, mediante la continuación de la
ejecución de código desde la tarea no detenida. Esto ayuda a mantener la tasa de llenado alta, y
también ayuda a reducir el tiempo que toma en ejecutar la aplicación. Por otro lado, si las dos tareas
pertenecen a 2 aplicaciones sin soporte multitarea separadas, la tasa de llenado en la aplicación con la
tarea detenida caerá a cera, mientras que la tasa de la otra aplicación 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 más lentas en un
procesador con SMT, dependiendo del tipo de aplicaciones y otras condiciones, debido a que estaría
compitiendo entre ellas por los recursos compartidos (por ejemplo, caché, unidades de ejecución,
entradas en cola, etc.). La mayoría de los diseños de SMT usan una variedad de técnicas para minimizar
tal competencia y sus efectos, pero siempre es un factor.