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 la complejidad 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:

CISC Y RISC

Embed Size (px)

Citation preview

Page 1: CISC Y RISC

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:

Page 2: CISC Y RISC

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

Page 3: CISC Y RISC

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

Page 4: CISC Y RISC

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

Page 5: CISC Y RISC

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.

Page 6: CISC Y RISC

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?

Page 7: CISC Y RISC

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

Page 8: CISC Y RISC

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".

Page 9: CISC Y RISC

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.)

Page 10: CISC Y RISC

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

Page 11: CISC Y RISC

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.

Page 12: CISC Y RISC

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

Page 13: CISC Y RISC

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

Page 14: CISC Y RISC

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.

Page 15: CISC Y RISC

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.

Page 16: CISC Y RISC

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

Page 17: CISC Y RISC

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.

Page 18: CISC Y RISC

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

Page 19: CISC Y RISC

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)

Page 20: CISC Y RISC

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”.

Page 21: CISC Y RISC

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

Page 22: CISC Y RISC

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

Page 23: CISC Y RISC

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

Page 24: CISC Y RISC

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í:

Page 25: CISC Y RISC

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.

Page 26: CISC Y RISC

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:

Page 27: CISC Y RISC

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.

Page 28: CISC Y RISC

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.

Page 29: CISC Y RISC

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.