La evolución de la computadora. Ing. Obadiah...

68
La evolución de la computadora. Ing. Obadiah Oghoerore Alegbe. ANIAC

Transcript of La evolución de la computadora. Ing. Obadiah...

La evolución de la computadora.

Ing. Obadiah Oghoerore Alegbe.

ANIAC

Figura 1.3 – 1951 UNIVAC (Universal Automatic Computer) de John Mauchly y J. Presper Eckert

Además del UNIVAC I se considera modelo representativo de esta época el IBM 701, al que siguieron el 704 y 709.

- La segunda generación (1953 – 1962)

La tecnología de esta generación esta caracterizada por el descubrimiento del transistor, que se utilizan en la construcción de las Unidades Centrales de Proceso. El transistor, al ser más pequeño, más barato y de menor consumo que la válvula, hizo a los computadores mas asequibles en tamaño y precio. Las memorias empezaron a construirse con núcleos de ferrita.

- La tercera generación (1963 – 1971)

Con los progresos de la electrónica y los avances de comunicación con las computadoras en la

década de los 1960, surge la tercera generación de las computadoras. Se inaugura con la IBM 360 en abril de 1964.

Las características de esta generación fueron las siguientes:

Su fabricación electrónica esta basada en circuitos integrados.

Su manejo se realiza mediante los lenguajes de control de los sistemas operati

La cuarta generación (1972 – 1987)

Los constantes progresos en el incremento de la densidad de integración nos llevan a al tecnología LSI (Alta Escala de Integración) y posteriormente a la VLSI (Muy Alta Escala de Integración). Lo que permitió la comercialización de circuitos integrados de memoria conteniendo 1 Gbits, con tiempo de acceso de 35 ns.

Aparecen los microprocesadores que son circuitos integrados de alta densidad y con una

velocidad impresionante. Las microcomputadoras basadas en estos circuitos son extremadamente pequeñas y baratas, por lo que su uso se extiende al mercado industrial. Surgen las computadoras personales que han adquirido proporciones enormes y que han influido en la sociedad en general sobre la llamada "revolución informática".

En 1976 Steve Wozniak y Steve Jobs diseñan la primera microcomputadora de uso masivo y más tarde forman la compañía conocida como Apple que fué la segunda compañía más grande del mundo, detrás de IBM.

- La quinta generación (1987 – …..) En vista de la acelerada marcha de la Microelectrónica, la sociedad industrial ha procurado poner a

esa altura el desarrollo del software y los sistemas con que se manejan las computadoras. Surge la

competencia internacional por el dominio del mercado de la computación, en la que se perfilan dos

líderes que, sin embargo, no han podido alcanzar el nivel que se desea: la capacidad de comunicarse

con la computadora en un lenguaje más cotidiano y no a través de códigos o lenguajes de control

especializados

Por otro lado la idea de computador vectorial no se ha abandonado, sólo que se tiende a utilizar

tecnología CMOS en lugar de la ECL. También se utilizan los microprocesadores como elemento

básico para el diseño de computadores paralelos de memoria compartida. Los microprocesadores se

conectan a la memoria por medio de un bus como en el caso de las arquitecturas SG Power

Challenge, Sun sparcserver, HP DEC8000. El número de procesadores de estos computadores

suele ser inferior a 20.

Figura 1.5. Foto de un Pentium IV a 2GHz.

CLASIFICACIÓN DE LOS COMPUTADORES.

Existen diversos métodos de clasificación de los computadores según la tecnología de su fabricación, de las aplicaciones y de otras diversas circunstancias, etc.

1.1.2.1- Clasificación según su funcionamiento.

Computador digital: recibe este nombre porque procesa datos cuya representación responde a valores discretos como 0, 1, 2, etc., operando con ellos en etapas diversas y sucesivas.

Computador analógico: tienen semejanza con instrumentos de medida tales como amperímetro, voltímetro, termómetro, etc.; los cuales controlan la medida de una magnitud de forma continua.

Computador híbrido: posee características de los dos anteriores, habitualmente, los cálculos los realizan de forma analógica mientras que la entrada y salida de datos se hace de modo digital. La utilización del computador híbrido es frecuente en el control de procesos industriales, en ellos las funciones principales son controladas por un computador digital, mientras que la entrada de datos y salida de resultados se hace empleando computadores analógicos conectados con el digital.

1.1.2.2- Clasificación según la finalidad.

De propósito general: cuando están dedicados a resolver cualquier tipo de aplicación dependiendo del programa que se utilice, como por ejemplo los computadores de las grandes empresas.

De propósito especial: cuando únicamente pueden resolver un tipo concreto y particular de problemas como el computador de un coche o de una lavadora.

Clasificación comercial.

Habitualmente se han dividido en cuatro tipos en los cuales, a mayor tamaño, mayor coste,

complejidad, potencia y necesidad de mantenimiento.

Los Supercomputadores o maxicomputadores son las máquinas más potentes, complejas, grandes y costosas. Son utilizados por científicos y técnicos para resolver problemas complejos, como por ejemplo, serían los utilizados para la previsión del tiempo, desarrollos económicos a escala mundial, para estudios de medio ambiente, etc.. Un ejemplo de supercomputador es el “CRAY 2”.

Figura 1.6. Supercomputador CRAY 2. Este computador tenia la memoria central más grande del mundo en 1985 con una capacidad de 2048 megabytes.

Los Mainframes o Computadores Grandes tienen una alta velocidad de proceso y capacidad de memoria.. Se destinan a operaciones diarias en las grandes empresas u organizaciones como son la gestión de cuentas en bancos, facturaciones de fábricas. Podemos citar como ejemplo IBM 9370 Y 9000. Estos computadores suelen ser muy caros.

Los Minicomputadores son máquinas de tamaño medio. Su costo es más reducido. Son máquinas con una capacidad de proceso y de memoria bastante elevados. Un ejemplo de minicomputador es el Vax 11/780.

Microcomputadores : que son los de menor tamaño, capacidad de proceso, memoria y los más baratos. Se utilizan tanto en empresas como a nivel doméstico.

1.2-FUNDAMENTOS DE LA ARQUITECTURA DE COMPUTADORES.

1.2.1- LA ARQUITECTURA Y EL ARQUITECTO DE COMPUTADORES

Actualmente el uso de computadoras esta muy extendido en nuestras actividades cotidianas, nos

proporcionan mayor rapidez en nuestras tareas así como la posibilidad de manejar gran cantidad de

datos. Así podemos percibir como de un tiempo a esta parte las computadoras ganan terreno en las

actividades humanas, su capacidad de cálculo, de procesar datos, generar información e incluso

simular procesos las convierten en herramientas indispensables únicamente limitadas por su propia

capacidad.

Debemos tener en cuenta que el uso de computadores esta muy extendido en actividades que

requieren el manejo de gran cantidad de datos a una gran velocidad como, por ejemplo, en

diagnósticos médicos, investigaciones nucleares y de energía, inteligencia artificial, etc... Es en estos

casos, que demandan mayor capacidad y rapidez, cuando se sobrepasan las características de los

computadores actuales. La solución pasa entonces por la construcción de mejores computadores

que logren avances substanciales en su rendimiento.

Para lograr un aumento en el rendimiento se necesita mejorar la “arquitectura” de los

computadores y desarrollar nuevas técnicas de procesamiento. El concepto de “arquitectura de un

computador” se refiere a la integración de su estructura física con su estructura lógica. Se utiliza el

término "arquitectura" para enfatizar la síntesis de elementos de ingeniería y ciencias exactas con

elementos estéticos y de funcionalidad práctica, de la misma manera en que un arquitecto

combinará las técnicas y conocimientos de la Ingeniería con la apreciación artística e integración de

su obra con su entorno.

Esta “arquitectura de computadores” abarca las siguientes fases:

Definición de las necesidades que pretende cubrir el computador.

Planificación general del computador.

Diseño del computador y sus componentes.

Análisis del sistema obtenido.

Especificación del sistema: características del sistema, de sus componentes y de las instrucciones ejecutables. Así el arquitecto de computadores deberá tener un gran conocimiento del equipo físico y del

equipo lógico, para poder obtener un buen rendimiento de la máquina, el cual depende principalmente del:

Lenguaje de programación.

Compilador.

Sistema operativo.

Arquitectura de la máquina.

Cada una de estas áreas dependerá de sí misma y de las siguientes, por lo que hay una gran incidencia en el buen desarrollo de unas sobre las otras. Así, el arquitecto tendrá que realizar las siguientes funciones:

1. Seleccionar y organizar el hardware: Implementación, estructura e interconexión

de la CPU, subsistema de memoria, subsistema de entradas o salidas y redes de conexión.

2. Seleccionar y estructurar el software: Diseño del repertorio de instrucciones a nivel del lenguaje máquina, sistema operativo y compiladores.

3. Elegir el lenguaje de programación de alto nivel que mayor rendimiento pueda obtener del sistema diseñado.

Con todo lo expuesto hasta ahora podemos decir que para obtener el máximo provecho del

computador, tan importante es conocer su estructura lógica como la física sólo de esta manera

podremos obtener las máximas prestaciones de la estructura física aprovechando los recursos de la

lógica.

1.2.2- PROBLEMÁTICA EN LA ARQUITECTURA DE COMPUTADORES El desarrollo de los computadores y en concreto de la Informática, está ligada al desarrollo de la

electrónica. El avance de las tecnologías y el uso de los computadores ha conseguido que su diseño pase de un arte, en los primeros computadores, a una disciplina de Ingeniería que plantea gran dificultad, pero se basa en una metodología.

Al principio, las dos causas principales de la problemática en la arquitectura de computadores fueron:

1. La independencia entre el hardware y el software, y la falta de definición de las

funciones de cada uno de ellos. Hasta hace pocos años, los arquitectos de computadores procedían del campo de la Ingeniería Electrónica, y potenciaban el equipo físico aplicando los constantes avances de la Microelectrónica, sin tener en consideración las prestaciones del sistema lógico.

2. El seguimiento a ultranza de la arquitectura de Von Neumann, no diseñada para soportar los nuevos sistemas operativos, lenguajes y aplicaciones.

Pero hoy en día, los inconvenientes ante los que nos enfrentamos son entre otros:

El factor tiempo. En el diseño del equipo físico, el tiempo es un factor de gran relevancia. Se cita como ejemplo que cada tres años por el mismo precio y calidad obtenemos el doble del número de transistores contenidos en un chip, frecuencia de trabajo y densidad de discos magnéticos y la cuatriplicidad de la densidad de la memoria RAM. La miniaturización es la constante en la evolución de los dispositivos electrónicos.

Figura 1.9 Microcomputador de IBM.

Este fenómeno de desarrollo acelerado conduce a la ley de Moore (1964), que asegura que el número de transistores que incorpora un circuito integrado se multiplica por cuatro cada aproximadamente año y medio. Se piensa que esta ley, vigente durante 40 años, todavía tiene por lo menos otros 10 ó 20 años de vida. Los últimos chips fabricados tienen más de 1.000 millones de transistores en poco más de un centímetro cuadrado.

El alcance de límites difícilmente superables de la tecnología hardware. La búsqueda de mayor rendimiento, se basará en nuevas arquitecturas que exploten en mayor grado las posibilidades del hardware. Un ejemplo es la utilización de computadores paralelos.

Límite de coste y ventas. El aprovechamiento de la compatibilidad con equipos anteriores disminuye la potencia en los nuevos equipos físicos. Un caso es la arquitectura de la familia de los procesadores 80x86 de Intel, en la que los nuevos modelos son compatibles con los anteriores. El rendimiento conseguido es mucho menor que aprovechando todos los recursos del nuevo sistema (Ejemplo: Pentium trabajando con un sistema operativo MS-DOS de 16 bits), pero el decremento de rendimiento se ve subsanado por los bajos costes de los equipos lógicos.

En conclusión, el alto nivel de conocimiento requerido del equipo físico y lógico, el factor

tiempo, la tecnología hardware insuperable y las limitaciones de coste-ventas, hacen que la labor del arquitecto de computadores adquiera un alto grado de complejidad.

1.3- ARQUITECTURA CLÁSICA Y MODERNA.

1.3.1- ARQUITECTURA CLÁSICA (1950 - 1990). La arquitectura de un computador es la que fué definida por uno de los mejores matemáticos de la historia John Von Neumann, que propuso es una arquitectura en la cual la CPU (Unidad Central de proceso) está conectada a una única memoria donde se guardan conjuntamente instrucciones (programas) y datos (con los cuales operan estos programas). Además existe un módulo de entradas y salidas para permitir la comunicación de la máquina con los periféricos extremos que maneja el usuario.

Figura 1.10. Arquitectura de J. Von Neumann.

Si se dispone de un microprocesador que maneja palabras de 8 bits, conectado a un bus de 8 bits de ancho, que lo conecta con la memoria, deberá manejar instrucciones de una o más unidades de 8 bits (1 byte), con lo que se obliga a la memoria a estar internamente dividida en unidades de 8 bits. En esta arquitectura si debemos acceder a una instrucción y/o dato de mas de 8 bits deberemos hacer de dos a mas accesos a memoria seguidos.

Esta arquitectura se denomina de tipo CISC “ Computador de Juego de Instrucciones

Complejas”. Las instrucciones complejas exigen mucho tiempo de CPU para ejecutarlas y sólo un acceso a la memoria que era lenta.

También destaca el hecho de que compartir el bus ralentiza los tiempos de operación ya que no

se puede hacer la búsqueda de un nueva instrucción antes terminar de realizar la transferencia de datos resultante de los resultados obtenidos por la operación anterior.

Por tanto, esta arquitectura tiene dos principales desventajas:

La longitud de las instrucciones está limitada por la longitud de los datos, por lo tanto el procesador se ve obligado a hacer varios accesos a memoria para buscar instrucciones complejas.

La velocidad de operación está limitada por el efecto cuello de botella, que significa que un bus único para datos e instrucciones impide superponer ambos tipos de acceso.

INSTRUCCIONES

+

DATOS

UNIDAD DE MEMORIA

UNIDAD ARITMÉTICO-

LÓGICA

UNIDAD CENTRAL DE PROCESO

UNIDAD DE

CONTROL

CAMINO

DE

DATOS

ENTRADAS Y

SALIDAS

BUSES DE

COMUNICACIÓN

1.3.2- ARQUITECTURA MODERNA (1990 - HOY).

Propone modificaciones en la arquitectura del equipo físico y mejoras y nuevas prestaciones en el tiempo lógico. Un ejemplo en el primer aspecto es la arquitectura Harvard, que está especialmente diseñada para atacar las debilidades de la arquitectura Von Neumann, la solución, conceptualmente, es harto sencilla, se construye un procesador que está unido a dos tipos de memoria diferentes por medio de dos buses independientes.

Figura 1.11. Arquitectura Harvard.

La memoria de datos y la memoria de instrucciones son independientes, almacenándose en ellas

los datos y el programa, respectivamente. Para un procesador de tipo RISC “Computador de Juego de Instrucciones

Reducido”, el conjunto de instrucciones y el bus de la memoria de programa pueden diseñarse de manera tal que todas las instrucciones tengan la misma longitud que la posición de la memoria y lo mismo con los datos. Además, como los buses de ambas memorias son independientes, la CPU puede estar accediendo a los datos para completar la ejecución de una instrucción, y al mismo tiempo estar leyendo la próxima instrucción a ejecutar.

Una forma de potenciar el aislamiento entre las instrucciones y los datos es la incorporación de

memorias caché ultrarápidas, que como sucede en los últimos modelos Pentium, una se encarga de guardar los datos que va a precisar la CPU y otra las instrucciones.

BUS DE DIRECCIONES

BUS DE

INSTRUCCIONES

BUS DE

DATOS

BUS DE DIRECCIONES

8 bits

UNIDAD ARITM

UNIDAD CENTRAL DE PROCESO

UNIDAD DE

CONTROL

CAMINO DE

DATOS

ENTRADAS Y

SALIDAS

INSTRUCCIONES

32 bits

MEMORIA DE PROGRAMA

DATOS

Figura 1.11. Arquitectura actuales Pentium.

1.4- INFLUENCIA DE LA TECNOLOGÍA EN LA EVOLUCIÓN DE LA

ARQUITECTURA DE COMPUTADORES.

Desde los tiempos en que se estableció la arquitectura de von Neumann, el desarrollo de los computadores se ha realizado a un ritmo inimaginable, la causa del crecimiento de los computadores se debe fundamentalmente a la mejora en la tecnología. Esta evolución de la arquitectura de los computadores puede contemplarse en cuatro etapas sucesivas en las que se aprecia su relación con la tecnología.

1.4.1- PRIMERA ETAPA

Esta primera etapa contempla la época situada en la mitad del siglo XX. La tecnología en

aquellos momentos se basaba en las válvulas de vacío. Los computadores seguían plenamente el modelo de von Neumann, con un módulo de proceso (CPU), un módulo de E / S y una memoria

Figura 1.12. Diagrama general por bloques de los computadores de la primera etapa.

UNIDAD DE

CONTROL

CAMINO DE DATOS INSTRUCCIONES

DATOS

DATOS

+

INSTRUCCIONES

CACHÉ

CACHÉ

CPU MEMORIA PRINCIPAL

INSTRUCCIONES

UNIDAD CENTRAL DE PROCESO

UNIDAD DE

CONTROL

CAMINO DE DATOS

INSTRUCCIONES

+

DATOS

MÓDULO DE E / S

DATOS

UNIDAD DE MEMORIA

Tanto la CPU (Unidad Central de Procesos) como la memoria estaban construidas con válvulas de vacío con lo que la velocidad de funcionamiento en ambos bloques era igual, aprovechando por tanto el rendimiento de ambos por igual.

La sencillez de la CPU y el pequeño tamaño de la memoria obligaban a utilizar un conjunto reducido y elemental de instrucciones. La CPU tenía que acceder frecuentemente a memoria, pero al poseer ambos módulos la misma tecnología el rendimiento conjunto era aceptable. A este tipo de computadores se les denominó RISC (Computadores de Set de Instrucciones Reducidos).

1.4.2- SEGUNDA ETAPA

En esta etapa aparecen los primeros circuitos integrados de pequeña y media escala de

integración (SSI y MSI), que se aplican a la construcción de la CPU, mientras que la memoria principal es construida con núcleos de ferrita, cuyos tiempos de accesos son elevados.

La velocidad de la memoria principal es 10 veces menor que la CPU, lo que provoca largos

períodos de inactividad de la CPU. A este fenómeno se le conoce como el “Cuello de Botella de Von Neumann”.

Para solucionar esta pérdida de rendimiento de la CPU, se utilizan juegos de instrucciones complejos, en los que cada instrucción equivale a varias operaciones elementales, evitándose así accesos a memoria principal. A este tipo de computadores se les denomina CISC (Computadores de Set de Instrucciones Complejo). La CPU contendrá una Memoria de Control, que se trata de una memoria rápida en la que se almacenan las operaciones elementales (microinstrucciones) correspondientes a cada instrucción compleja (macroinstrucción).

Figura 1.13. Diagrama general por bloques de la segunda etapa.

INSTRUCCIONES

UNIDAD CENTRAL DE PROCESO

UNIDAD DE

CONTROL

UNIDAD DE MEMORIA

INSTRUCCIONES

+

DATOS

MÓDULO DE E / S

DATOS CAMINO

DE DATOS

SECUENCIADOR

Como conclusión, se incrementa el proceso de decodificación de la macroinstrucción pero se reduce el número de accesos a memoria principal, solucionándose el problema de las diferentes velocidades de la memoria y la CPU, y acercándonos al modo de programar de los lenguajes de alto nivel, que comienzan a desarrollarse por esta época.

1.4.3- TERCERA ETAPA

La tecnología de circuitos integrados siguió evolucionando, alcanzando la alta escala de integración (LSI), que permitía la fabricación de memorias rápidas, pero que seguían siendo lentas con respecto a la CPU.

La decodificación de instrucciones complejas requería más tiempo que el acceso a estas

memorias, por lo que los computadores CISC disminuyen la complejidad de las instrucciones, reduciéndose así el número de microinstrucciones correspondientes a cada instrucción. Este nuevo tipo de computadores entre RISC y CISC obtiene el mayor rendimiento posible de la CPU y estas memorias.

Aparece la memoria caché que se encarga de guardar la información de uso más frecuente de la

memoria principal, para disminuir el número de accesos a esta última. Estas memorias son más rápidas, más caras y se usan con pequeñas capacidades. Como se ve en la figura 1.14 la Unidad de Control accede a la memoria caché, y sólo cuando no está la información que necesita en ella, a la memoria principal. El contenido de la caché está optimizado para que sea el de más uso, obteniendo de 5 a 10 veces velocidades mayores que la memoria principal.

MEMORIA CACHÉ

INSTRUCCIONES

INSTRUCCIONES

UNIDAD CENTRAL DE PROCESO

UNIDAD DE

CONTROL

CAMINO DE DATOS

UNIDAD DE MEMORIA

INSTRUCCIONES

+

DATOS

MODULO DE E / S

DATOS

UNIDAD DE MEMORIA

Figura 1.14. Diagrama general por bloques de la tercera etapa.

1.4.4- CUARTA ETAPA

Se desarrolla la tecnología VLSI (Muy alta escala de integración) que se aplica tanto a la CPU como a la memoria caché, por lo que se vuelve a los computadores RISC.

Las instrucciones vuelven a ser pocas y básicas, desapareciendo así la Memoria de Control.

Figura 1.15. Diagrama general por bloques de la cuarta etapa.

En esta etapa el acceso a memoria se hará siempre a la caché, que contendrá la parte de la memoria principal a utilizar en la mayoría de los accesos.

1.5-TAXONOMÍAS O CLASIFICACIONES DE COMPUTADORES SEGÚN

SU ARQUITECTURA

Según las diferentes arquitecturas desarrolladas pueden clasificarse los computadores de

diferentes puntos de vista. Una de las clasificaciones más extendida es la denominada taxonomía de Flynn (1966), que se detalla a continuación.

1.5.1- TAXONOMÍA DE FLYNN

Esta taxonomía se basa en el número de flujos de instrucciones y flujos de datos que posee cada

sistema computador.

MEMORIA CACHÉ

DATOS

DATOS

INSTRUCCIONES

UNIDAD CENTRAL DE PROCESO

UNIDAD ARITMÉTICO-LOGICA

UNIDAD DE MEMORIA

INSTRUCCIONES

+

DATOS

MODULO DE E / S

UNIDAD DE

CONTROL

INSTRUCCIONES

INSTRUCCIONES

+

DATOS

El proceso computacional consiste en la ejecución de una secuencia de instrucciones sobre

un conjunto de datos. Flujo de instrucciones es la secuencia sobre la que opera un procesador, y el flujo de datos comprende la secuencia de datos de entrada y los resultados parciales y totales.

Las arquitecturas de computadores se caracterizan por el hardware que destinan a atender a

los flujos de instrucciones y datos.

Flynn propuso 4 categorias:

SISD: Simple flujo de instrucciones, simple flujo de datos.

MISD: Múltiple flujo de instrucciones, simple flujo de datos.

SIMD: Simple flujo de instrucciones, múltiple flujo de datos.

MIMD: Múltiple flujo de instrucciones, múltiple flujo de datos. Después introdujo una quinta clasificación separada un poco de las cuatro anteriores:

MTMD: Múltiple tareas, múltiple flujo de datos.

1.5.1.1- Computadores SISD

Responden a los monoprocesadores convencionales (tipo Von Neumann) que más se usan. Al disponer de una única Unidad de Proceso (Camino de Datos) sólo existe un Flujo de Instrucciones y un Flujo de Datos.

Figura 1.16. Estructura básica de los ordenadores SISD.

1.5.1.2- Computadores MISD

Existen n Unidades de Proceso, cada una con su propia Unidad de Control y sus propias instrucciones, pero operando sobre el mismo flujo de datos, de forma que la salida de un procesador pasa a ser la entrada (operandos) del siguiente en el macrocauce de los datos. Se hacen diferentes operaciones con los mismos datos.

FLUJO DE

INSTRUCCIONES

FLUJO DE

INSTRUCCIONES

FLUJO DE

DATOS

MEMORIA UNIDAD DE

PROCESO

UNIDAD DE

CONTROL

FLUJO DE DATOS

FLUJO DE DATOS

FLUJO DE DATOS

FLUJO INSTRUCCIONES

n

FLUJO INSTRUCCIONES

2

FLUJO INSTRUCCIONES

n

FLUJO INSTRUCCIONES

2

FLUJO INSTRUCCIONES

1

FLUJO INSTRUCCIONES

1 UNIDAD

DE

CONTROL

1

UNIDAD

DE

PROCESO

1

MEMORIA 1

MEMORIA 2

MEMORIA n

UNIDAD

DE

CONTROL

2

UNIDAD DE

CONTROL

n UP1

UNIDAD DE

PROCESO

n

UNIDAD

DE

PROCESO

2

Figura 1.17. Arquitectura de los computadores MISD.

Los arquitectos de computadores han menospreciado esta organización y de hecho no existe ninguna materialización real de este tipo.

1.5.1.3- Computadores SIMD

Flujo único de instrucciones y Flujo múltiple de Datos. Sólo hay una Unidad de Control que

controla las diferentes Unidades de Proceso. Todas la Unidades de Proceso reciben la misma instrucción, pero operan sobre los diferentes datos procedentes de la memoria compartida.

Figura 1.18. Arquitectura de los computadores SIMD.

La misma instrucción la reciben todas las Unidades de Proceso, pero a veces no todas la realizan

porque la instrucción lleva codificado los procesadores que intervienen y los que están inactivos. La mayoría de los computadores SIMD necesitan que exista intercomunicación entre las Unidades de Proceso, para compartir datos y resultados intermedios. Hay dos formas de lograrlo:

1. Memoria Compartida: Todas las Unidades de Proceso utilizan una memoria común y cuando una quiere enviar un dato a otra, primero lo escribe en una posición que la otra conoce y luego ésta lee dicha posición. Es como un tablón de anuncios que puede usar todo el mundo.

2. Red de Interconexión: Las M posiciones de la memoria se reparten entre los N

procesadores a razón de M/N posiciones de memoria local para cada uno, además cada procesador se une con los demás mediante una línea Full-Duplex de forma que

FLUJO DE DATOS

1

FLUJO DE INSTRUCCIONES

FLUJO DE DATOS

n

FLUJO DE DATOS

2

FLUJO INSTRUCCIONES

.

.

.

UNIDAD

DE

CONTROL

UNIDAD

DE

PROCESO

1

MEMORIA 1

MEMORIA 2

MEMORIA n

UNIDAD

DE

PROCESO

2

UNIDAD DE

PROCESO

n

en un momento determinado un procesador puede recibir datos de otro y al mismo tiempo mandar otros datos a un tercer procesador. Ver Figura 1.19.

Figura 1.19. Arquitectura con red de interconexión.

En este caso particular los 5 procesadores se reparten las M posiciones de memoria. Permite la

comunicación instantánea entre cualquier pareja de procesadores y de varias parejas entre sí (sólo un procesador se comunica con otro). Además existen varios tipos de interconexión de redes como la conexión serie o lineal, bidimensional o malla, en árbol, etc...

Los SIMD son mucho más útiles y comerciales en el mercado que los MISD y también más flexibles. Además, es más fácil hacer algoritmos para los SIMD que para los MISD. El caso ideal de los SIMD es cuando un problema se puede dividir en subproblemas idénticos y además éstos tienen las mismas instrucciones.

Algunos ejemplos de esta arquitectura fueron: Thinking Machines CM-2, MassPar computers , Procesador MMX

1.5.1.4- Computadores MIMD

Este tipo de computadora se basa en el paralelismo como las SIMD, la diferencia es que la

arquitectura MIMD es asíncrona. No tiene un reloj central. Cada procesador en un sistema MIMD puede ejecutar su propia secuencia de instrucciones y tener sus propios datos. Esta característica es

la más general y poderosa de esta clasificación. Es una agrupación de monoprocesadores convencionales, cada uno con su Unidad de Control,

su Unidad de Proceso y su memoria local. Cada uno dispone de su Flujo de Instrucciones y de su Flujo de Datos, trabajan en paralelo y de forma asíncrona y están comunicados entre ellos igual que los SIMD. Usan la memoria compartida o bien la red de interconexión.

UP 1

5

M

UP 2

5

M UP 3

5

M

UP 4

5

M UP 5

5

M

Figura 1.21. Arquitectura de los computadores MIMD.

Se supone que son los sistemas más perfectamente paralelos, ya que el paralelismo es total, pero también son los más caros. Los algoritmos para los MIMD deben tener un factor claro de paralelismo, aunque pueden ser totalmente asíncronos, y además se necesita intercomunicación. Normalmente comienzan cargando una tarea básica a uno cualquiera de los procesadores, y éste va descomponiendo tareas y lanzándolas a los demás, así como creando dos colas, una de proceso y otra de procesadores. En la primera se van introduciendo los procesos pendientes de ejecutar, y en la segunda se van metiendo los procesadores que van quedando libres después de terminar su tarea.

Ejemplos de computadores con arquitectura MIMD son BURR D-85, Cmmp, CRAY/2, CRAY-MP y IBM 370/168MP..

1.5.1.5- Computadores MTMD

Estos computadores surgen como una extensión a la clasificación de Flynn, algo restringida al

contemplar la ejecución sólo a nivel de instrucciones. Múltiples Tareas con Múltiples Flujos de Datos.

Son como los computadores MIMD, la única diferencia es la tarea que se aplica a cada Unidad

de Proceso. Estos computadores son capaces de ejecutar concurrentemente un número determinado de tareas, cada una con su propio conjunto de datos.

FLUJO INSTRUCCIONES

1

FLUJO INSTRUCCIONES

1

FLUJO INSTRUCCIONES

2

FLUJO DE DATOS 1

FLUJO DE DATOS n

FLUJO DE DATOS 2

FLUJO INSTRUCCIONES

n

FLUJO INSTRUCCIONES

2

FLUJO INSTRUCCIONES

n

.

.

.

UNIDAD

DE

CONTROL

1

UP1

UNIDAD

DE

PROCESO

1 MEMORIA 1

MEMORIA 2

MEMORIA n

UNIDAD

DE

CONTROL

2

UNIDAD DE

CONTROL

n

UNIDAD

DE

PROCESO

2

UNIDAD

DE

PROCESO

n

1.5.2- OTRAS TAXONOMÍAS

Existen otras taxonomías que no son tan populares como la de Flynn entre las que destaca la

taxonomía de Shore que al igual que la de Flynn, clasifica los computadores en función del número de elementos; pero mientras que la taxonomía de Flynn pretende clasificarlos por la organización del software (Instrucciones y Datos), la clasificación de Shore lo hace por la estructura del hardware (Unidad de Control, Unidad de Proceso y Memoria de Datos e Instrucciones).Por lo tanto la aparición de paralelismo dentro de cada uno de estos componentes no se valora.

La arquitectura Shore se representa seis tipos: 1. Tipo 1: Formada por una UC (Unidad de Control) conectada a una UP (Unidad de

Proceso) y a una Memoria de Instrucciones. 2. Tipo 2: Similar a la anterior, con la salvedad de que las lecturas de memoria se

realizan de forma paralela, es decir, un bit de cada palabra por cada acceso. Así la unidad de proceso está preparada para realizar operaciones con los datos leídos de esta forma.

3. Tipo 3: Es una combinación de las arquitecturas anteriores; está formada por una memoria bidimensional a la que acceden dos UP que operan en consecuencia a la lectura que realizan, horizontal o vertical. La UC supervisa las dos UP.

4. Tipo 4: Existen múltiples UP conectadas a una sola UC, que recibe órdenes de una Memoria de Instrucciones. Cada UP trabaja con una Memoria local de Datos. No existe ninguna comunicación entre ellas.

5. Tipo 5: Es similar a la anterior, pero las UP se encuentran interconectadas entre ellas, pudiendo así la misma UP acceder a varios módulos de memoria.

6. Tipo 6: En esta arquitectura se integran la UP y la Memoria local en un solo componente, que lógicamente estará conectado a una UC.

Esta clasificación es bastante incompleta, y queda poco determinado el tipo de paralelismo que

se puede encontrar en un sistema. Además, tampoco diferencia, por ejemplo, sistemas que implementen la segmentación dentro de la Unidad de Proceso y/o Unidad de Control, de los que no las utilicen.

Otra taxonomía es la “Estructural” que no se basan sólo en el paralelismo para clasificar

los computadores, sino que estudian también el modo de tratar los datos, la existencia de

segmentación y su tipo. Es una aproximación a la clasificación global y en la que intervienen varios

criterios, incluyendo la aplicación o no de técnicas de paralelismo en distintos niveles.

Arquitectura de la Computadora.

INTRODUCCIÓN

1) BREVE RESEÑA HISTORICA DE

PENTIUM.........................................................1

PENTIUM

PENTIUM PRO

PENTIUM II

MERCED

2) INTRODUCCION A LA MICROARQUITECTURA DE LOS

PROCESADORES PENTIUM

PRO.................................................................................4

MICROOPERACIONES

ORGANIZACION DEL ENCAUSADOR DE SEGMENTOS

3) DESCRIPCIÓN DE LA MICROARQUITECTURA DEL PROCESADOR

PENTIUM

PRO.....................................................................................................................................

6

1. Subsistema de Memoria.

2. La Unidad Búsqueda/Decodificador.

3. Conjunto de Instrucciones.

4. La Unidad Despacho/Ejecución.

5. La Unidad Retiro.

4) EJECUCIÓN

DINÁMICA............................................................................................11

o PREDICCION DE SALTOS MULTIPLES

o ANALISIS DEL FLUJO DE DATOS

o EJECUCION ESPECULATIVA

5) TECNOLOGIA

MMX...................................................................................................14

BIBLIOGRAFIA

Introducción

Este trabajo pretende analizar la arquitectura interna del procesador Pentium Pro. La

arquitectura de un procesador describe sus estructuras internas y cómo ellas trabajan.

Estas son estructuras lógicas; todos los procesadores están hechos de material

semiconductor, y es el cómo éste esté arreglado lo que determina cómo trabajará el

procesador.

Las ideas básicas del trabajo bibliográfico a desarrollarse, están indicadas en el

ÍNDICE y para un mejor entendimiento se detalla brevemente el contenido de cada

ítem a continuación.

En primer lugar se realiza una Breve reseña histórica del Pentium y sus

características. Aquí se rememoran las características más importantes de la

Arquitectura Intel desde el procesador Pentium hasta el procesador MERCED,

indicando los logros de cada procesador que los llevaron a estar en auge en su momento,

y, en el caso de MERCED las características que tendrá en el momento de su

lanzamiento en 1999.

Debido a que el trabajo enfocará la Microarquitectura del Procesador Pentium Pro, se

hará una Introducción a la Microarquitectura de los Procesador Pentium Pro, en la

cual se explicará gráficamente las Unidades que componen a dicha arquitectura, en

especial las Unidades Búsqueda/Decodificación, Despacho/Ejecución y Retiro, así

como también Conjunto de Instrucciones, que serán detalladas en la sección siguiente.

Además se expone en qué consisten las Microoperaciones y la Organización del

Encausador de Segmentos.

El siguiente paso es la Descripción de la Microarquitectura del Procesador Pentium

Pro. Aquí se ahonda en los detalles que constituyen a la Microarquitectura Pentium Pro,

como se había prometido en la sección anterior. Se habla del Subsistema de Memoria,

el cual consiste en la Memoria del Sistema Principal, la Caché Primaria y la Caché

Secundaria; el Bus del sistema, la Unidad de Interfaces del Bus, y la Memoria

Intermedia de Reordenamiento de Memoria (Memory Reorder Buffer).

En cuanto a la Unidad Búsqueda/Decodificación, se habla de la Unidad de Búsqueda

de Instrucción (Instruction Fetch Unit), de la Memoria Intermedia de Salto (Branch

Target Buffer (BTB)), del Decodificador de Instrucciones (Instruction Decoder), del

Secuenciador de Microcódigos (Microcode Sequencer) y de la Tabla Alias de Registros

(Register Alias Table ).

El Conjunto de Instrucciones (Instruction Pool) se relaciona con la Memoria

Intermedia de Reordenamiento (Reorder Buffer). La Unidad Despacho/Ejecución

(Dispatch/Execute), constituida por la Estación de Reserva (Reservation Station,RS),

dos unidades enteras, dos unidades de punto flotante y dos unidades de generación de

direcciones (addres generation units).

Por último se detalla la Unidad de Retiro, que involucra la Unidad de Retiro en sí

misma y los Archivos de Registros de Retiro (RRF).

En resumen, en esta sección se explica la funcionalidad de cada una de las unidades

que componen la arquitectura del Pentium Pro, es decir, qué hace cada una de ellas y

cómo se relaciona con las demás.

El ítem Características Claves de la Arquitectura Pentium Pro es sin duda uno de

los más importantes. La idea principal de esta sección es explicar los cambios que

hubieron en la arquitectura Pentium Pro en comparación con las arquitecturas

anteriores, los cuales hicieron que ella alcanzara el mayor desempeño en su tiempo.

Como un adelanto, podemos decir que este logro fue debido a una innovación llamada

Ejecución Dinámica, que fue el paso a seguir luego de la arquitectura superescalar

implementada en el procesador Pentium. Las ideas que están relacionadas con la

Ejecución Dinámica son Predicción de Saltos Múltiples, Análisis del Flujo de Datos,

Ejecución Especulativa, se establecerá en qué consiste cada una de estas tres ideas.

Aparte de lo ya expuesto, también se tocan temas de importancia como la Tecnología

MMX. Qué es MMX, por qué Intel desarrolla MMX, y cómo se implementa.

1. Breve reseña histórica del Pentium, sus características.

Pentium:

Aparecido en 1993 tiene las siguientes características más resaltantes:

La más importante es su segundo encausador de segmento (pipeline) de

ejecución para conseguir desempeño SUPERESCALAR (2 encausadores de

segmento en lugar de 1 solo, juntos pueden ejecutar 2 instrucciones al mismo

tiempo por reloj).

Pentium tiene una Unidad Encausadora de Segmento (Pipelined) de Punto

Flotante. Puede ejecutar instrucciones que no son de Punto Flotante e

instrucciones que sí lo son al mismo tiempo. Debido a que las instrucciones de

Punto Flotante son ejecuciones en la Unidad de Punto Flotante, las instrucciones

aritméticas-lógicas de la ALU pueden usar todo el encausador de segmento.

Cache integrada de 16K. La cache de nivel 1 (L1) en el chip, fue duplicada, con

8KB dedicados a código y otros 8KB para datos.

Predicción de saltos con una tabla de saltos en el chip, ha sido adherida para

aumentar el desempeño en construcciones con ciclos.

Extensiones han sido adheridas para hacer al modo 8086 virtual más eficiente, y

para permitir páginas de 4 Mbytes, así como también páginas de 4Kbytes

Los registros principales son todavía de 32 bits, pero los caminos de datos

internos, y el bus de datos externo se agrandó a 64 bits.

El Controlador de Interrupciones Programable Avanzado, APIC (Advanced

Programmable Interrupt Controller) fue adherido para soportar sistemas con

múltiples procesadores Pentium, nuevos pines y un modo especial

(procesamiento dual) fue designado para soportar 2 sistemas de procesadores

separados.

La versión Pentium P55C es la primera CPU Intel en incluir instrucciones

MMX. MMX (primero por Extensión MultiMedia, luego Intel dijo que sería

Extensión de Matriz Matemática)

Pentium Pro

El Pentium Pro, aparecido en 1995, tiene las siguientes características principales:

Disponible a 150 MHz, 166 MHz, 180 MHz, y 200 MHz de velocidad de

núcleo.

Compatibilidad binaria con aplicaciones corriendo en miembros previos de la

familia de microprocesadores Intel.

Optimizado para aplicaciones de 32 bits corriendo en sistemas Operativos

avanzados de 32 bits.

El paquete simple incluye: CPU Pentium Pro, cache y sistema de interface de

bus.

Escalable hasta a 4 procesadores y 4GB de memoria.

Separados un sistema de bus externo dedicado y un bus interno dedicado a la

cache de alta velocidad.

Características de integridad de datos y confiabilidad, recuperación de análisis

fallido y chequeo redundante funcional.

El procesador Intel Pentium Pro tiene una arquitectura superescalar de tres

caminos, que significa que puede ejecutar 3 instrucciones por reloj

(incorporando aún más paralelismo que el procesador Pentium).

Microarquitectura de Ejecución Dinámica.

El Pentium Pro provee Ejecución Dinámica (análisis de flujo de micro-

datos, ejecución fuera de orden, predicción de saltos y ejecución

especulativa) en una implementación superescalar. Tres unidades

decodificadoras de instrucciones trabajan en paralelo para decodificar el

código objeto en operaciones más pequeñas llamadas microoperaciones.

Estas van al Conjunto de Instrucciones (Instruction Pool), y, cuando las

interdependencias lo permitan, pueden ser ejecutadas fuera de orden por

las 5 unidades de ejecución paralela ( 2 enteras, 2 de punto flotante y una

unidad de interface con memoria). La Unidad de Retiro retira

microoperaciones completadas en su orden original del programa,

tomando cuenta de cualquier salto.

El procesador Pentium Pro tiene las mismas 2 caches de 8 Kbytes L1 en el chip

que el procesador Pentium, y además tiene una cache L2 de 256 Kbyte que está

en el mismo paquete, y está fuertemente conectada a la CPU, usando un bus

dedicado de 64 bit a velocidad de reloj máxima.

La cache L1 es de dos puertos, la cache L2 soporta hasta 4 accesos concurrentes,

y el bus de datos externos de 64 bits es orientado a transacción, lo que significa

que cada acceso es manejado como un pedido y respuesta por separado, con

numerosos pedidos permitidos mientras se espera una respuesta. Estas

características paralelas para el acceso de datos trabajan con las capacidades de

ejecución paralelo para proveer una arquitectura ‘no-bloqueable’ en la cual el

procesador es aprovechado completamente y el desempeño es mejorado.

La Pentium Pro también tiene un bus de direcciones expandido de 36 bit, dando

un espacio de dirección física de 64 Gbytes.

Pentium Pro no trabaja como otros procesadores. Hay 3 puntos importantes en

su arquitectura:

Tiene un encausador de segmentos de 12 etapas y no de 5 etapas

El núcleo fuera de orden le permite reconocer la secuencia de instrucciones que

recibe

Pentium ejecuta instrucciones complejas, las subdivide en pequeñas

instrucciones, llamadas microoperaciones.

- El talón de Aquiles de Pentium Pro son Sistemas Operativos de 16 bit, su extrema

lentitud cuando escribe a sus registros de segmento. Actualizaciones de los registros de

segmento no ocurren frecuentemente en códigos de 32 bit, pero son bastante comunes

en software de 16 bit.

Pentium II

Hizo su aparición en 1997.

El Pentium II corre a velocidades de 450, 400, 350, 333, 300, 266, y 233 MHz.

Conocida inicialmente como el chip Klamath , usa esencialmente la misma

arquitectura de núcleo que el procesador Pentium Pro. A este núcleo Intel le

sumó tecnología MMX y esquemas que aceleran el desempeño bajo Sistemas

Operativos de 16 bits. La capacidad de Pentium Pro para correr código de 32-bit

queda intacta. El Procesador Pentium II combina tres tecnologías: tecnología

MMX, Ejecución Dinámica y Arquitectura de Bus Independiente Dual.

Dos buses independientes conforman la Arquitectura de Bus Dual Independiente

(D.I.B): un bus del procesador a la cache L2 y el bus del procesador al sistema

de memoria principal. Cada uno tiene 8 bytes de amplitud con lo que se duplica

el número de canales disponibles para la transmisión de datos. El bus dedicado

para caché L2 elimina el tráfico del bus del sistema congestionado. El bus del

sistema canalizado hace posible el procesamiento de transacciones en paralelo,

lo que acelera el flujo de información dentro del sistema e incrementa el

rendimiento general. Ambos buses se pueden utilizar de manera simultánea,

incrementando de forma considerable la cantidad de datos que se pueden

transferir dentro y fuera del procesador.

Beneficios

Incrementa el rendimiento para mejorar el desempeño general

Elimina el tráfico del bus del sistema

Ofrece espacio de sobra para buses de sistemas de más alta velocidad

Hace posible que el bus de la Caché L2 escale con la velocidad del procesador.

La arquitectura DIB del procesador Pentium II está alojada en una nueva tecnología de

empaquetado: el cartucho Contacto-Orilla-Simple (Single Edge Contact (SEC)). El

nuevo paquete del cartucho y la infraestructura SLOT1 asociada, ofrecen espacio de

sobra para futuros procesadores. En este diseño, el bus de la caché L2 no está limitado

en velocidad por las restricciones del enrutamiento de la tarjeta madre. El bus, que opera

a la mitad de la frecuencia del núcleo de Pentium II, escala con la velocidad del

procesador y ofrece mayor rendimiento. Conforme aumente la frecuencia de los

procesadores futuros también lo hará la velocidad del bus de la caché L2.

Contacto-Orilla-Simple SEC (Single Edge Contact)

La Pentium II, está empaquetada en forma diferente a la Pentium Pro. En vez de

estar ensamblada con una cache secundaria de velocidad máxima en un paquete

cerámico, está montada en una placa del circuito o substrato (junto con una

cache L2 de 512K) y encajonada en un cartucho SEC del tamaño de una palma.

El empaquetamiento de cartucho SEC es el diseño de empaquetado que permite

que mayor desempeño sea entregado a los sistemas principales. Usando esta

tecnología, el núcleo y la cache L2 están completamente encerradas en un

cartucho de plástico y metal. Estos subcomponentes son montados directamente

a la superficie de un substrato dentro del cartucho para permitir operaciones de

alta frecuencia.

La Pentium II se conecta a la placa madre por medio de un conector de orilla

simple en lugar de múltiples pines usados en paquetes PGA.

Al igual que la Pentium MMX, la Pentium II usa proceso de manufactura

CMOS 0,36 micrones. Pentium II tiene 2 millones de transistores más que la

Pentium Pro.

La cache secundaria de Pentium II, sin embargo es actualmente más lenta que la

de Pentium Pro. Usando paquete cerámico de cavidad dual, Intel equipó la

Pentium Pro con una cache L2 en la placa que corre reloj a reloj con la CPU.

Este arreglo es eficiente pero muy caro de manufacturar. Para ahorrar los costos

Pentium II usa una cache externa fuera del chip que, como se mencionó

anteriormente, corre a la mitad de rápido que la CPU. Para compensar esto, Intel

dobló la cache L1 de Pentium II de 16K a 32 K y así reduce la frecuencia de

llamadas a la cache L2.

AGP

Otra característica es Puerto Gráfico Acelerado, AGP (Accelerated Graphics

Port), ella mejora la computación visual proveyendo mayor ancho de banda de

memoria a los subsistemas de gráficos. La interface AGP es una especificación

para la plataforma PC que permitirá nuevos niveles de desempeño 3D y

realismo.

MERCED

Los chips MERCED son esperados para 1999.

Es el nombre código para un nuevo microprocesador de 64 bit desarrollado por

Intel y Hewllet Packard.

A pesar que MERCED será capaz de correr software escrito para arquitectura

X86, utilizará una nueva arquitectura, oficialmente conocida como ‘Arquitectura

Intel-64 (IA-64)’.

IA-64 usará muchas técnicas de microprocesador de orilla dividida (cutting edge

microprocessor techniques), incluyendo palabras de instrucción largas (LIW),

predicación de instrucciones, eliminación de salto y carga especulativa.

Serán manufacturados con una nueva tecnología de proceso de 0,18 micrones y

contendrá 10 millones de transistores.

Está diseñado principalmente para uso en servidores y estaciones de trabajo.

2) Introducción a la microarquitectura de los procesadores Pentium Pro

El procesador Pentium Pro, intenta aumentar el desempeño del Pentium sin dejar de

usar el mismo proceso de manufactura metal BICMOS de 4 capas y 0,6 micrómetros.

Usar el mismo proceso de manufactura que la Pentium significó que las ganancias de

desempeño debían conseguirse sólo a través de cambios substanciales en la

microarquitectura.

La microarquitectura resultante Pentium Pro es una arquitectura superescalar con

segmentación encausada de tres caminos. El término ‘superescalar de tres caminos’

significa que, usando técnicas de procesamiento paralelo, el procesador es capaz en

promedio de decodificar, despachar y completar la ejecución (retirar) de 3 instrucciones

por ciclo de reloj. Para manejar este nivel de flujo de instrucciones, el procesador

Pentium Pro usa un super encausador de segmentos (superpipeline) de 12 etapas, que

soportan la ejecución de instrucciones fuera de orden. La figura 2.1 muestra una visión

conceptual de este encausador de segmentos (pipeline), con el encausador de segmentos

dividido en 4 unidades de procesamiento (Unidad Búsqueda/Decodificador, Unidad

Despacho/Ejecución, Unidad de Retiro y Conjunto de Instrucciones (Instruction Pool)).

Las instrucciones y datos son proveídos a estas unidades a través de la Unidad de

Interface Bus.

Para asegurar un constante suministro de instrucciones y datos al encausador de

segmentos de ejecución de instrucciones, la microarquitectura del procesador Pentium

Pro incorpora 2 niveles de Cache. La cache L1 provee una cache de instrucciones de

8Kbytes y una cache de datos de 8Kbytes, ambas fuertemente conectadas al encausador

de segmentos. La cache L2 es una RAM estática de 256 Kbytes que está conectada al

procesador núcleo a través de un bus cache, de 64 bits y a una velocidad de reloj

máxima.

La pieza principal de la microarquitectura del procesador Pentium Pro es un nuevo

mecanismo de ejecución fuera de orden llamado ‘Ejecución Dinámica’. La Ejecución

Dinámica incorpora 3 conceptos de procesamiento de datos:

1)Predicción profunda de salto.

2)Análisis de flujo de datos dinámicos.

3)Ejecución Especulativa.

Microoperaciones

Las microoperaciones son instrucciones primitivas que son ejecutadas por las 6

unidades de ejecución paralelas del procesador.

Las microoperaciones son más generales que las instrucciones Pentium Pro, tienen

longitud fija y contienen un codificador, 2 operandos fuente y 1 operando destino. Hay

3 microopeaciones por reloj, lo que hace al procesador Pentium Pro un procesador

superescalar de grado 3.

Organización del Encausador de Segmentos (Pipeline)

Una mejora en desempeño encima de la Pentium es que la Pentium Pro tiene una

microarquitectura super encausadora de segmentos, superescalar. La Pentium Pro es,

como se indicó repetidas veces, superescalar a nivel 3, lo que significa que el

procesador puede despachar y retirar 3 microoperaciones por reloj. La implementación

del encausador de segmentos del procesador Pentium usa 5 etapas. El Pentium Pro

cambia a una implementación desconexa (decoupled) super encausadora de segmentos

de 12 etapas, cambiando menos trabajo en cada etapa por más etapas. El procesador

Pentium Pro reduce el tiempo de etapa en un 33%, comparado con el procesador

Pentium, lo cual significa que el procesador Pentium Pro puede tener una velocidad de

reloj 33% mayor que el procesador Pentium y seguir siendo igualmente fácil el

producirlo desde una perspectiva de proceso de manufactura semiconductora.

Cabe señalar que el encausador de segmentos se encuentra dividido en 4

Unidades de Procesamiento:

Unidad Búsqueda/Decodificación.

Unidad Despacho/Ejecución.

Unidad de Retiro

Conjunto de Instrucciones o Memoria Intermedia de Reordenamiento.

El procesador Pentium Pro es implementado pues, como 3 motores acoplados

independientes, con una Memoria Intermedia de Reordenamiento como la

mostrada en la FIG 2.2.

Recordemos además que el Pentium Pro remueve la restricción de un secuenciamiento

de instrucciones lineal entre las fases tradicionales Búsqueda y Ejecución. Esta

aproximación permite a la fase Ejecución del procesador Pentium Pro tener mucha más

visibilidad dentro del flujo de instrucciones del programa para que una mejor

esquematización pueda realizarse. Esto requiere que la fase de instrucción

"Búsqueda/Decodificación" del procesador Pentium Pro sea mucho más inteligente en

términos de predecir el flujo del programa. Una esquematización optimizada requiere

que la fase fundamental "Ejecución" sea reemplazada por las fases desacopladas

"Despacho/Ejecución" y "Retiro". Esto permite que las instrucciones empiecen en

cualquier orden pero que siempre sean completadas en el orden original del programa.

3 ) Detallada descripción de la microarquitectura del procesador Pentium Pro La FIG 3 muestra un diagrama de bloque funcional de la microarquitectura del

procesador Pentium Pro. En este diagrama, los siguientes bloques hacen las veces de las

4 unidades de procesamiento y el subsistema de memoria mostrado en la FIG 2.1.

Subsistema de Memoria: Bus del sistema, cache L2, Unidad Interface de Bus, cache

de instrucción L1, cache de datos L1, Unidad de Interfase con la Memoria, y una

memoria intermedia de reordenamiento de memoria.

Unidad Búsqueda/Decodificación: La Unidad de Búsqueda de Instrucción, Memoria

Intermedia de Salto, Decodificador de Instrucciones, Secuenciador de Microcódigo, y

Tabla Alias de Registros (Register Alias Table ).

Conjunto de Instrucciones (Instruction pool): Memoria Intermedia de

Reordenamiento (Reorder Buffer)

Unidad Despacho/Ejecución: Estación de Reserva (Reservation Station,(RS), 2

unidades enteras, 2 unidades de punto flotante y 2 unidades de generación de

direcciones.

Unidad de Retiro: Unidad de Retiro y Archivo de Registros de Retiro (Retirement

Register File).

3.1) Subsistema de Memoria

Consiste en: Memoria del Sistema Principal, la cache primaria L1 y la cache secundaria

L2. La Unidad de Interfase Bus accesa a la Memoria del Sistema a través del bus del

sistema externo. Este bus de 64 bit es un bus orientado-a-transacción, significando que

cada acceso al bus es manejado como operaciones de pedido y respuesta separadas.

Mientras que el Unidad de Interfase Bus está esperando por una respuesta a un pedido

de bus, puede producir numerosos pedidos adicionales.

La Unidad de Interfase Bus accesa la cache L2 fuertemente conectada a través de un bus

cache de 64 bit. Este bus es también orientado-a-transacción, soportando hasta 4 accesos

cache concurrentes, y opera a máxima velocidad de reloj del procesador.

Acceso a la cache L1 son a través de buses internos, también a máxima velocidad de

reloj.

Jerarquía de Memoria

Cache

Como se mencionó anteriormente, la cache de Pentium Pro consiste en 2 diferentes

caches: L1 y L2, de tamaño de 32 byte de línea.

L1: La cache L1 es separada en un set asociativo de instrucciones de Memoria de 8KB

de 4 caminos y un set asociativo de datos de Memoria de 8KB de 2 caminos. Ambas

están localizadas dentro de la CPU. L1 es no-bloqueable: si un acceso a L1 lleva a una

falla, la cual pudo ser especulativa, el acceso detrás de ella no quedará esperando.

L2: Es una caché secundaria de tamaño 256 o 512 KB. No está dentro de la CPU.

Cuando el procesador requiere datos de la Memoria primero busca en L1, que es una

memoria pequeña pero es muy rápida para encontrar el objetivo. Si L1 no contiene el

dato, el procesador busca en L2 que es una memoria más grande pero más lenta. Si el

dato se encuentra se llama ‘acierto’ si no se llama ‘fallo’. Cuando ocurre un ‘fallo’ el

procesador envía su solicitud a la memoria principal (RAM).

Cualquier área de la memoria puede cachearse en L1 y L2. El procesador permite a

regiones individuales usar métodos de cacheo específicos, los cuales pueden

especificarse usando banderas. El procesador Pentium Pro tiene una memoria

intermedia de escritura para almacenar cada escritura temporal. Esta memoria

intermedia permite al procesador continuar ejecutando instrucciones sin tener que

esperar a que un acceso de escritura sea completado.

La coherencia entre las caches y la memoria del sistema son mantenidas usando el

protocolo cache MESI. Este protocolo patrocina coherencia cache en sistemas de

procesador simple y procesador múltiple. Es también capaz de detectar problemas de

coherencia creados por códigos que se modifican a sí mismos.

Pedidos de memoria por las unidades de ejecución del procesador van a través de la

Unidad de Interfase con la Memoria y la memoria intermedia de ordenamiento de

memoria. Estas unidades han sido diseñadas para soportar un suave flujo de pedidos de

acceso a memoria a través de la cache y la jerarquía de memoria del sistema para

prevenir bloqueos de accesos a memoria. La cache de datos L1 automáticamente

transmite un fallo de cache a la cache L2, y si es necesario, la Unidad de Interfase Bus

transmite un fallo de cache L2 a la memoria del sistema.

Pedidos de memoria a la cache L2 o memoria del sistema van a través de la memoria

intermedia de reordenamiento de memoria, la cual funciona como una estación de

planeación y despacho. Esta unidad mantiene el rastro de todos los pedidos de memoria

y es capaz de reordenar algunos pedidos. Por ejemplo, la memoria intermedia de

reordenamiento de memoria permite a las cargas pasar a los almacenamientos. También

produce cargas especulativas (Almacenamientos son siempre despachados en orden, y

los almacenamientos especulativos nunca son producidos).

Manejo de la memoria virtual, etiquetado e indexado

Segmentación

La Segmentación es un mecanismo de separación del espacio de las direcciones del

procesador en espacios de direcciones protegidos más pequeños llamados segmentos,

así se logra que múltiples tareas puedan correr en el mismo procesador sin interferir

entre ellas. Los segmentos son usados para preservar la cache, datos y pila para un

programa.

El espacio de direccionamiento lineal del procesador contiene todos los segmentos

dentro del sistema. Para acceder a un byte en un segmento particular, el procesador usa

una dirección lógica: Una dirección lógica tiene 2 campos:

Un selector de segmentos de 16 bit, que es un identificador único del segmento y..

Un desplazamiento de 32 bit que es sumado a la dirección base para localizar la

dirección lineal del bloque segmentado.

Paginación, Memoria virtual

Pentium Pro soporta paginación, llamada también Memoria Virtual. Cuando se usa

paginación, el procesador divide cada segmento en páginas (generalmente 4KB de

longitud) las cuales son almacenadas en la Memoria Física o en el disco. Cuando un

programa o tarea hace referencia a una dirección lógica de memoria, el procesador

traduce la dirección en direcciones lineales y luego usa la paginación para traducir

direcciones lineales en direcciones físicas correspondientes. Una falla de página ocurre

cuando la página conteniendo la dirección lineal no está actualmente en la memoria

física.

Para minimizar el número de ciclos de bus requeridos por una traducción de dirección,

un directorio de páginas más recientemente accesadas y tablas de páginas ingresadas

son cacheadas en el procesador en dispositivos llamados TLB (translation look aside

buffer o memoria intermedia de traducción vista aparte).

3.2) La Unidad Búsqueda/Decodificación

La Unidad Búsqueda de Instrucción, busca una línea cache de 32 byte por reloj de la

cache de instrucciones. Ella marca el comienzo y fin de las instrucciones en las líneas

cache y transmite 16 bytes alineados al Decodificador.

La Unidad de Búsqueda de Instrucción computa el puntero a la instrucción, basado en

entradas de la Memoria Intermedia de Salto ( Branch Target Buffer (BTB) que es una

memoria que verifica la cache de instrucción), el estatus de excepción/interrupción y las

indicaciones de fallo al predecir saltos de las unidades de ejecución de enteros. La parte

más importante de este proceso es la predicción de salto, hecha por el BTB. Usando una

extensión del algoritmo Yeh, el BTB de 512 entradas observa muchas instrucciones por

delante del contador de programa de retiro. Entre estas instrucciones pueden haber

numerosos saltos, llamadas a procedimientos y retornos, que deben ser correctamente

predichos si se quiere que la Unidad Despacho/Ejecución trabaje útilmente.

El Decodificador de Instrucciones contiene 3 Decodificadores paralelos: 2

Decodificadores de Instrucciones simples y 1 Decodificador de Instrucciones complejas.

Cada Decodificador convierte una instrucción en 1 o más microoperaciones ternarias (2

fuentes lógicas y 1 destino lógico por microoperación). Las microoperaciones son

instrucciones primitivas que son ejecutadas por todas las unidades de ejecución

paralelas del procesador.

Muchas instrucciones de arquitectura Intel son convertidas directamente en

microoperaciones individuales por los Decodificadores de Instrucción simples, y

algunas instrucciones son decodificadas desde 1 hasta 4 microoperaciones. Las

instrucciones más complicadas son decodificadas en secuencias de microoperaciones

preprogramadas obtenidas del Secuenciador de Instrucciones Microcódigo. Los

Decodificadores de Instrucción también manejan la decodificación de los prefijos de las

instrucciones y operaciones con ciclos. El Decodificador de Instrucciones puede generar

hasta 6 microoperaciones por ciclo de reloj (1 por cada Decodificador de Instrucciones

simple y 4 por el Decodificador de Instrucción complejo)

El set de registros de la arquitectura Intel puede causar estancamiento de recursos

debido a la dependencia de registros. Para resolver este problema, el procesador provee

40 registros internos de propósito general, los cuales son usados para las computaciones

actuales. Estos registros pueden manejar ambos, valores enteros y de punto flotante.

Para alocar los registros internos, las microoperaciones encoladas del Decodificador de

Instrucciones son enviadas a la Unidad de Tabla Alias de Registros (Register Alias

Table), donde referencias a los registros lógicos son convertidas en referencias a

registros internos físicos.

En el paso final en el proceso de Decodificación, el alocador en la Unidad de Tabla

Alias de Registros adiciona bits de estatus y banderas a los microoperaciones para

prepararlas para una ejecución fuera de orden y envía las microoperaciones resultantes

al Conjunto de Instrucciones (Instruction pool).

En conclusión: La unidad Búsqueda/Decodificación lee una fila de instrucciones de la

arquitectura Intel de la cache de instrucciones L1 y las decodifica en una serie de

microoperaciones. Esta fila de microoperaciones (todavía en el orden original de la fila

de instrucción) es luego mandada al Conjunto de Instrucciones.

3.3) Conjunto de Instrucciones (Instruction Pool) o Memoria Intermedia de

Reordenamiento (ReOrder Buffer ROB)

ROB: almacena microoperaciones para que la CPU sepa en qué orden retirarlas luego y

pueda mantener la semántica correcta.

Antes de entrar al Conjunto de Instrucciones (conocido formalmente como Memoria

Intermedia de Reordenamiento), la fila de instrucciones de microoperaciones está en el

mismo orden que la fila de instrucciones que fue enviada al Decodificador de

Instrucciones. Ningún reordenamiento de instrucciones ha tomado lugar.

La Memoria Intermedia de Reordenamiento es implementada como un vector de una

memoria de contenido direccionable (content-addresable memory), arreglada en 40

registros de microoperaciones. Contiene microoperaciones que están esperando ser

ejecutadas, así como también aquellas que ya fueron ejecutadas pero todavía no fueron

comprometidas a estado de máquina. La Unidad Despacho/Ejecución puede ejecutar

instrucciones de la Memoria Intermedia de Reordenamiento en cualquier orden.

3.4) Unidad Despacho/Ejecución

Es una Unidad fuera de orden que planifica y ejecuta microoperaciones almacenadas en

la Memoria Intermedia de Reordenamiento de acuerdo a la dependencia de datos y

disponibilidad de recursos, y temporalmente almacena el resultado de estas ejecuciones

especulativas.

La planificación y despacho de microoperaciones de la Memoria Intermedia de

Reordenamiento es manejado por la Estación de Reserva (Reservation Station (RS)).

Ella continuamente da un vistazo a la Memoria Intermedia de Reordenamiento

buscando microoperaciones que estén listas para ser ejecutadas (esto es, los operandos

fuente están disponibles), la Unidad Despacho chequea para ver si el recurso de

ejecución necesitado para esa microoperación está también disponible. Si ambos son

cierto, entonces remueve esa microoperación y la envía al recurso donde es ejecutada

(las despacha a las unidades de ejecución disponibles). Los resultados de la ejecución de

microoperaciones son pasados a ambos RS y ROB, (a la RS porque puede contener

otras microoperaciones que están esperando por el resultado para poder ejecutarse y a la

ROB porque cuando una microoperación se ejecutó realmente, el ROB la manda a la

Unidad de Retiro) y almacenados acompañados con las microoperaciones hasta que

éstos sean retirados. Este proceso de planificación y despacho soporta ejecuciones fuera

de orden clásicas, donde las microoperaciones son despachadas a las unidades de

ejecución estrictamente de acuerdo a las restricciones de flujo de datos y disponibilidad

de recursos de ejecución, sin reparar en el orden original de las instrucciones. Cuando 2

o más microoperaciones del mismo tipo (por ejemplo, operaciones de enteros) están

disponibles al mismo tiempo, son ejecutadas en un orden pseudo FIFO en la Memoria

Intermedia de Reordenamiento.

La Ejecución de Microoperaciones es manejada por 2 unidades de enteros, 2 unidades

de punto flotante, y una Unidad de Interfase con Memoria, permitiendo que hasta 5

microoperaciones puedan ser planificadas por reloj.

Las 2 unidades de enteros pueden manejar 2 microoperaciones en paralelo. Una unidad

de enteros está diseñada para manejar microoperaciones de saltos. Esta unidad tiene la

habilidad de detectar malas predicciones de saltos y señalar al BTB que reempiece el

encausador de segmentos. Esta operación es manejada como sigue: El Decodificador de

Instrucciones etiqueta cada microoperación de salto con ambas direcciones de destino

del salto ( el destino predicho y el destino en caso de falla de predicción ). Cuando la

unidad de entero ejecuta la microoperación de salto, es capaz de determinar si fue

tomado el destino predicho el destino en caso de falla. Si el destino predicho fue

tomado, las microoperaciones ejecutadas especulativamente son marcadas como útiles y

la ejecución continúa a lo largo de la trayectoria de instrucción predicha. Si el salto

predicho no fue tomado, una Unidad de Ejecución de Salto (JEU), en la unidad de

entero, cambia el estatus de todas las microoperaciones que siguen al salto para

removerlas del Conjunto de Instrucciones. Luego provee el destino de salto apropiado al

BTB, que a su vez reempieza el encausador de segmentos desde la nueva dirección

objeto.

La Unidad de Insterfase con Memoria maneja microoperaciones carga y

almacenamiento. Un acceso carga sólo necesita especificar la dirección de memoria,

para que ella pueda ser codificada en una microoperación. Un acceso almacenamiento

necesita especificar ambas, una dirección y el dato a ser escrito, por lo que es codificada

en 2 microoperaciones. La parte de la Unidad de Interfase con Memoria que maneja

almacenamientos tiene 2 puertos, permitiéndole procesar la microoperación de dirección

y la microoperación de dato en paralelo. La Unidad de Interfase con Memoria puede así

ejecutar ambos, una carga y un almacenamiento en paralelo en 1 ciclo de reloj.

Las Unidades de Ejecución de Punto Flotante son similares a aquellas encontradas en el

procesador Pentium. Muchas instrucciones de punto flotante nuevas fueron adheridas al

procesador Pentium Pro para hacer más eficientes los saltos condicionales y

movimientos.

3.5) Unidad de Retiro

Compromete los resultados de microoperaciones ejecutadas especulativamente a estado

de máquina permanente y remueve las microoperaciones de la Memoria Intermedia de

Reordenamiento. Como la Estación de Reserva, la Unidad de Retiro continuamente

chequea el estatus de microoperaciones en la Memoria Intermedia de Reordenamiento,

buscando algunas que hayan sido ejecutadas y no tienen más ninguna dependencia con

otras microoperaciones en el Conjunto de Instrucciones. Ella luego retira

microoperaciones completadas en el orden original del programa, tomando en cuenta

interrupciones, excepciones, puntos críticos y fallas en predicciones de salto.

Hay dos ciclos de reloj dedicados al proceso de retiro. La Unidad de Retiro debe

primero leer el Conjunto de Instrucciones para encontrar los candidatos potenciales al

retiro y determinar cuáles de ellos son los siguientes en el orden del programa original.

Luego escribe los resultados de estos ciclos de retiro a ambos, el Conjunto de

Instrucciones y el Archivo de Registros de Retiro (RRF).

La Unidad de Retiro puede retirar 3 microoperaciones por reloj. Como se mencionó

anteriormente, al retirar una microoperación escribe los resultados en el RRF y /o

memoria. El RRF contiene los registros de arquitectura Intel (8 registros de propósito

general y 8 registros de datos de punto flotante). Luego de que los resultados han sido

comprometidos a estado de máquina, la microoperación es removida de la Memoria

Intermedia de Reordenamiento.

4) Ejecución Dinámica

Primeramente usada en Pentium Pro, la Ejecución Dinámica es una combinación de 3

técnicas de procesamiento diseñada para ayudar al procesador a manipular datos más

eficientemente. Estas técnicas son:

Predicción de salto múltiple.

Análisis de flujo de datos.

Ejecución especulativa.

La Ejecución Dinámica permite al procesador ser más eficiente, manipulando datos en

vez de simplemente procesar una lista de instrucciones.

La manera en que los programas software son escritos puede influenciar el desempeño

del procesador. Por ejemplo, el desempeño software será adversamente afectado, si el

procesador es frecuentemente requerido para detener lo que está haciendo y hacer un

‘jump’ o un ‘branch’ a alguna parte del programa. Los retrasos también pueden ocurrir

cuando el procesador no es capaz de procesar una nueva instrucción hasta que la

instrucción actual sea completada. La Ejecución Dinámica permite al procesador

modernizarse y predecir el orden de las instrucciones.

4.1) Predicción de Salto Múltiple

Las microoperaciones que son encausadas en segmentos buscan la siguiente instrucción

antes que la anterior sea ejecutada completamente. Cuando la instrucción previa es un

salto, la instrucción siguiente buscada pudo haber sido buscada del lugar equivocado.

La Predicción de Saltos es un concepto encontrado en la mayoría de las arquitecturas de

microprocesadores de alta velocidad. Permite al procesador decodificar instrucciones

que están más allá de los saltos para mantener lleno el encausador de segmentos de

instrucción. El Pentium Pro usa BTB que es una pequeña memoria asociativa que

chequea el índice cache de instrucciones. Luego, basado en la historia de los saltos,

intenta predecir cuál índice de instrucciones cache debe ser accesado después. Esta

historia de los saltos es calculada por una variante del algoritmo Yeh, el cual tiene

precisión de 90 %. Esto es posible porque mientras que el procesador Pentium Pro está

buscando instrucciones, también está viendo hacia el frente a instrucciones más lejanas

en el programa. Esta técnica acelera el flujo de trabajo enviado al procesador.

Si un salto es predicho como ‘si salta’ y es correcto, las instrucciones ejecutadas

especulativamente son ejecutadas. Si una predicción de salto es incorrecta, la Unidad de

Ejecución de Salto remueve las instrucciones especulativas ejecutadas y el destino

apropiado del salto es proveído por el BTB. Luego el BTB reempieza todo el encausador

de segmentos desde la dirección objetivo nueva.

4.2) Análisis de flujo de datos

El análisis de flujo de datos dinámico: es un análisis en tiempo real del flujo de datos a

través del procesador para determinar la dependencia de datos y registros y para detectar

las oportunidades que se tengan para la ejecución de instrucciones fuera de orden. La

unidad Despacho/Ejecución puede monitorear simultáneamente muchas instrucciones y

ejecutar estas instrucciones en el orden que optimice el uso de las unidades de ejecución

múltiple del procesador, mientras sigue manteniendo la integridad de los datos que están

siendo operados. Esta ejecución fuera de orden mantiene las unidades de ejecución

ocupadas aún cuando la cache falla y ocurre la dependencia de datos entre instrucciones.

En otras palabras, el Análisis de flujo de datos analiza y proyecta las instrucciones a ser

ejecutadas en una secuencia óptima, independientemente del orden del programa

original. Usando el análisis de flujo de datos, el procesador Pentium Pro mira a las

instrucciones de software decodificadas y determina si están disponibles para el

procesamiento o si están dependiendo de otras instrucciones. El procesador luego

determina la secuencia óptima para el procesamiento. Posteriormente, el procesador

ejecuta las instrucciones en la manera más eficiente.

4.3) Ejecución Especulativa

Cuando el procesador Pentium Pro ejecuta instrucciones (hasta 5 a la vez), lo hace

usando la Ejecución Especulativa, un método de ver por delante del contador del

programa en busca de trabajo útil que desempeñar. Debido a que las instrucciones de

software que están siendo procesadas están basadas en saltos predichos, los resultados

son grabados como resultados especulativos. Una vez que su estado final puede ser

determinado, las instrucciones son devueltas en su orden original y pueden

comprometerse a estado de máquina permanente. De esta manera, aumenta la frecuencia

de ejecución, ya que se ejecutan instrucciones que probablemente serán necesitadas.

En forma más específica: Para hacer posible la ejecución especulativa, la

microarquitectura del procesador Pentium Pro desconecta el Despacho y la Ejecución de

instrucciones del hecho de comprometer los resultados. La Unidad Despacho/Ejecución

usa el Análisis de flujo de datos para ejecutar todas las instrucciones disponibles en la

Memoria Intermedia de Reordenamiento y almacenar los resultados en registros

temporales. Luego la Unidad de Retiro busca linealmente en la Memoria Intermedia de

Reordenamiento instrucciones completadas, que no tiene más dependencias de datos

con otras instrucciones o predicciones de saltos no resueltas. Cuando las instrucciones

completas son encontradas, la Unidad de Retiro compromete los resultados de las

instrucciones a memoria y/o los registros de la arquitectura Intel (los 8 registros del

proceso de propósito general, y 8 registros de datos de la unidad de punto flotante) en el

orden en que estuvieron originalmente y retira las instrucciones de la Memoria

Intermedia de Reordenamiento.

En resumen

A través de la combinación de la Predicción de Saltos (para ofrecer al núcleo muchas

instrucciones), el Análisis de flujo de datos dinámicos (elegir el mejor orden), y la

Ejecución Especulativa (ejecutar instrucciones en el orden preferido), la Ejecución

Dinámica remueve las restricciones de secuenciamiento de instrucciones lineal entre las

fases tradicionales de Búsqueda y Ejecución de la ejecución de instrucciones. Esto

permite a las instrucciones ser decodificadas profundamente en saltos de niveles

múltiples para mantener lleno el encausador de segmentos de instrucción. Esto

promociona la ejecución de instrucciones fuera de orden para mantener las 6 unidades

de ejecución de instrucciones del procesador corriendo a máxima capacidad. Y

finalmente compromete los resultados de la ejecución de instrucciones en el orden

original del programa para mantener la integridad de datos y la coherencia del

programa.

Para terminar con el análisis del procesador Pentium Pro, la siguiente tabla presenta

detalles técnicos de dicho procesador, con distintas velocidades de reloj.

Características Técnicas del Procesador Pentium Pro.

Velocidad

Reloj MHz

150 166 180 200

Velocidad de

Bus MHz

60 66 60 66

L2 Cache 256 K 512 K 256 K 256 K

Proceso

Manufactura

0,6 micrones 0,35 micrones 0,35 micrones 0,35 micrones

Tamaño Dado 691 mils/lado 552 mils/lado 552 mils/lado 552 mils/dado

Voltaje CPU 3,1 V 3,3 V 3,3 V 3,3 V

Performance 6,08 SPECint95

5,42 SPECfp95

7,11 SPECint95

6,21SPECfp95

7,29 SPECint95

6,10 SPECfp95

8,09 SPECint95

6,70 SPECfp95

Otros datos válidos para Todos los procesadores Pentium Pro.

Ancho de Bus Interno 300 bits

Ancho de Bus Externo 64 bits

64 bits a cache L2

Espacio Direccionamiento Virtual 64 Terabytes

Espacio de Direccionamiento Físico 64 Gigabytes

Ejecución Dinámica Sí

Superescalar Sí

Transistores CPU ^ 5,5 millones

Tamaño del Paquete 2,46 plg x 2,66 plg

Tipo del Paquete Cavidad Dual PGA 387 pines

Cache L1 8K Instruc, 8K Datos

5) Tecnología MMX

La tecnología MMX apareció por primera vez en un procesador Pentium (codificado

como el P55C) en el primer trimestre de 1997. Intel ha introducido dos familias de

procesadores con tecnología MMX: el procesador Pentium con tecnología MMX de

Intel está disponible en versiones para escritorio a 166 y 200 MHz, y en configuraciones

para equipos portátiles menos poderosos a 133, 150 y 166 MHz y el procesador Pentium

II

La multimedia y las comunicaciones están generando aplicaciones con exigencias cada

vez mayores. La tecnología MMX es una nueva extensión a la Arquitectura que :

Mejora el rendimiento de esas aplicaciones, y

Crea y activa nuevas características y posibilidades.

En otras palabras, es una extensión del set de instrucciones de un procesador Pentium

Intel. Las extensiones permiten a ciertas aplicaciones correr al menos a uno y medio o

dos veces más rápido una vez que fueron reescritas para aprovechar las ventajas de la

tecnología MMX. Las extensiones MMX a la arquitectura Pentium introduce 57 nuevas

instrucciones, doblan el tamaño de la cache que está en el chip, mejora el encausamiento

de segmentos y las técnicas de predicción de salto. No alteran ninguna instrucción

previa en la Pentium, o crea nuevos registros, los software existentes como los Sistemas

Operativos, aplicaciones y juegos son completamente compatibles con los nuevos

procesos Pentium MMX, y además notan un pequeño beneficio de desempeño (10 – 20

% ) debido a la cache interna agrandada (16KB de cache de datos en vez de 8 KB ), el

encausamiento de segmentos mejorado y la predicción de saltos. El rendimiento

aumenta aún más con una caché integrada al chip de 32 KB, comparada con la caché de

16 KB que incorpora el procesador Pentium. Esto significa que se pueden almacenar

más datos e instrucciones en el chip, lo que reduce el número de veces que el

procesador tiene que acceder a memoria de más baja velocidad no integrada al chip para

obtener información.

Implementación: A través de la introducción de nuevos tipos de datos, nuevas

instrucciones y el uso de registros de punto flotante existentes, Intel implementa la

tecnología MMX:

Uso de los registros de punto flotante: Con el objetivo de mantener la compatibilidad

con las placas madres que usan socket tipo 7, Intel no pudo introducir nuevos registros a

la arquitectura. En lugar de añadir registros físicos nuevos a la arquitectura x86, Intel

reutiliza los registros originales de punto flotante (FP) existentes a modo de registros

lógicos MMX para retener los nuevos tipos de datos. Las instrucciones MMX utilizan

sólo la porción de mantisa de 64 bits de los registros FP de 80 bits, ignorando la porción

de 16 bits del exponente. Esto da lugar a 8 registros lógicos de 64 bits sin que se altere

de forma significativa la arquitectura x86.

Los procesadores x86 que soportan MMX son capaces de direccionar los nuevos

registros, desde el MM0 hasta el MM7. En lugar de tratar los registros como si fueran

una pila, que es lo que hacen las instrucciones FP, las instrucciones MMX acceden

directamente a los registros. Al efectuarse el cambio de instrucciones MMX a FP (y

viceversa), la instrucción FSAV guarda el estado de los registros y la instrucción

FRSTR restaura los valores. Esto permite que la tecnología MMX sea compatible con

los sistemas operativos existentes que, frecuentemente deben de efectuar operaciones de

guardar y restaurar registros cuando se produce un cambio de contexto entre

aplicaciones multitarea.

El inconveniente de esta técnica reside en la imposibilidad de que los programadores

puedan entremezclar instrucciones PF y MMX, ya que necesitan los mismos registros.

Pero esto no es tan importante como parece, ya que los programas multimedia efectúan

habitualmente sus operaciones en coma flotante antes de visualizar los datos (el proceso

de modelado se basa fundamentalmente en instrucciones para enteros). En efecto, MMX

aporta un nuevo nivel de paralelismo a los procesadores x86.

Nuevos tipos de datos: Las instrucciones MMX pueden empaquetar varios tipos de

datos dentro de estos registros de 64 bits: bytes empaquetados (ocho por registro);

palabras empaquetadas (cuatro por registro); palabras dobles empaquetadas (dos por

registro) y una palabra cuádruple (un valor de 64 bits por registro). El uso de cantidades

de 64 bit es una idea práctica ya que el procesador Pentium y sus descendentes tendrán

por lo menos un bus de datos de 64 bits de ancho. Estos tipos de datos resultan útiles

debido a que, normalmente, los programas multimedia trabajan con pequeñas unidades

de datos. Por ejemplo, un pixel de color en modo color real , la resolución de color más

utilizada, usa 24 bits: 1 byte por cada color RGB. Este modo permite trabajar con hasta

16,7 millones de colores, mucho más de lo que es capaz de distinguir el ojo humano. En

modo HiColor, sólo se necesitan 16 bits por pixel. Para la mayoría de aplicaciones

gráficas, 16 bits son más que suficientes.

Nuevas instrucciones: Muchas de las nuevas instrucciones introducidas con MMX son

puramente diseñadas para usarse con los nuevos tipos de datos disponibles, pero otras

son destinadas más directamente para programas multimedia. Ejemplo de lo último

incluye nueva comparación de instrucciones para usar con bytes empaquetados,

palabras empaquetadas y dobles palabras empaquetadas, y unas nuevas instrucciones

lógicas que pueden lidiar con cantidades de 64 bits. Un ejemplo del último tipo es

‘sumar con saturación ‘que puede ilustrarse usando manipulación de valores de pixeles

de valor de 8 bit. Por ejemplo, sumando 200 a 200 con pixeles de 8 bit dará un resultado

envolvente tradicional de 145. La nueva instrucción de saturación dará por el contrario,

un resultado de 255, el máximo valor posible con 8 bits. Esto tiene sentido porque

cuando lidiamos con valores de color es imposible tener un valor de color más blanco

que el blanco. Esta nueva instrucción de suma puede potencialmente ahorrar 3

instrucciones de ejecución, las cuales serían necesarias en una máquina no-MMX para

lidiar con esta situación. Estas nuevas instrucciones son llamadas SIMD (Instrucción

Simple, Múltiples Datos (Single Instruction Multiple Data)) y es a través de ellas que se

puede lograr ganancias grandes de desempeño

Rendimiento: El procesador Pentium con tecnología MMX de Intel contiene mejoras

arquitectónicas y también mejoras derivadas de la tecnología MMX de Intel. Los

incrementos de rendimiento en el intervalo de 10 a 20 % en el software actual provienen

principalmente de mejoras arquitectónicas. Los incrementos adicionales obtenidos de la

tecnología MMX de Intel en los rangos de rendimiento, riqueza y calidad de

aplicaciones, dependerán de la cantidad de código de software que se haya diseñado

para aprovechar la tecnología MMX de Intel. Los incrementos de rendimiento

superiores al 60%, según la prueba de referencia desarrollada por Intel, llamada IMB,

son el resultado de mejoras arquitectónicas y del código de software diseñado para la

tecnología MMX de Intel.

En qué consiste IMB?: Es una prueba de referencia desarrollada por Intel que prueba

la capacidad de un sistema para ejecutar tipos de datos multimedia como vídeo MPEG,

imágenes, sonido y geometría en 3D. Esta prueba de referencia compara resultados en

sistemas basados en MMX de Intel.

Como se mencionó anteriormente, Intel ha introducido dos familias de

procesadores con tecnología MMX: el procesador Pentium con

tecnología MMX y el procesador Pentium II. El rendimiento de ambos

procesadores se comparó con IMB, que mide el rendimiento de los

procesadores ejecutando algoritmos que se encuentran en las

aplicaciones multimedia. La figura siguiente compara el procesador

Pentium con tecnología de MMX el procesador Pentium II contra el

procesador Pentium y el procesador Pentium Pro.

Redondeando, el concepto MMX no es nuevo y ha sido implementado en

diferentes arquitecturas en el pasado. Es ciertamente una movida para

construir más para aplicaciones futuras pero está más destinado a la casa;

contiene pocas aplicaciones para el ambiente de negocios (excepto por

sistema de vídeo conferencia). Los testeos de las nuevas aplicaciones

optimizadas para MMX contra sistemas basados en RISC sin

instrucciones MMX muestra que los sistemas basados en RISC superan

aún a sistemas Pentium MMX, demostrando que las predicaciones del

desempeño de Intel parecen ser exageradas y los logros reales de la

tecnología MMX son más pequeños que lo indicado por las compañías

de publicidad.

Meme: En la arquitectura computacional, RISC (del inglés reduced instruction set computer) es un tipo de microprocesador con las siguientes características

Bibliografía

Páginas halladas en Internet: Intel Architecture Developer’s Manual, Volume 1, 1997.

Processor’s Architecture. Gael Le Mignot.

Case study of the Intel Pentium Pro architecture. Mats Sahli&Jonathan Berglund

http://www.marketplace.unisys.com/aquanta/tech-library/brief-ppro.html

http://www.twice.com/domains/cahners/twice/archives/webpage_2176.html

http://www.cs.strath.ac.uk/¨duncan/_archives/cad_1996/mmxpractical/amcgill.htm

http://www.intel.com/design/pro/index.htm

http://www.sei-europe.com/dynamic/html/spain/selco/mmx.htm

http://www.sei.europe.com/dynamic/html/spain/selco/mmx_2g.htm

http://www.intel.com/pentiumII/specs/dynamic.htm

http://www.inte.com/PentiumII/home.htm

http://www8.zdnet.com/pcmag/features/pentium2/intro.htm

http://www.intel.com/español/PentiumII/specs/mmx.htm

http://www.intel.com/espa...iness/latin_am/ia_chan/micinfo/dib.htm

http://www.intel.com/pentiumII/specs/fact.htm

Componentes básicos de una Computadora.

UNIDAD CENTRAL DE PROCESO

CPU: La unidad central de proceso puede considerarse como el cerebro de la

computadora; tiene varias funciones importantes:

Provee almacenamiento, a los diferentes datos e instrucciones para procesar.

Permite rápido acceso a datos almacenados y ejercer control sobre la

información; puede además, desarrollar operaciones aritméticas, lógicas y de

control.

Toma de decisiones simples basadas en los resultados de pruebas hechas

previamente; puede también manejar la entrada de datos y salida de información

desde los dispositivos periféricos conectados a la computadora.

En esencia a unidad central de proceso tiene 3 funciones principales:

Controlar y supervisar el sistema de cómputo, con bases a un programa almacenado

en la unidad de memoria.

Desarrollar las operaciones matemáticas y lógicas que en un momento dado sean

necesarias para procesar datos.

Controlar el envío y recepción de datos desde las unidades periféricas de la unidad de

memoria.

Para realizar estas funciones el procesador central se vale de las subunidades o

subsistemas que lo componen. El procesador central esta compuesto de 4 partes

principales, o subsistemas:

Unidad de memoria o almacenamiento primarios

Unidad de Control

Unidad Aritmético-Lógica.

Unidad de control de periféricos.

UNIDAD DE MEMORIA O ALMACENAMIENTO PRIMARIO

En esta unidad se depositan los datos que se envían para procesarse desde los

dispositivos de almacenamiento (manejados por las unidades de entrada/salida), así

como los programas que realizaran los procesados y los resultados obtenidos listos para

ser enviados a un dispositivo de almacenamiento secundario.

La memoria almacena gran información que esta disponible para ser usada por otros

subsistemas de la computadora. A su vez, cuando la memoria recibe alguna información

de otros subsistemas, almacena la información del lugar que le ha sido especificado por

la unidad emisora.

La Unidad de Memoria está constituida a su vez por:

Unidad de Almacenamiento

Unidad de Control de Memoria

Registros de dirección de datos

La unidad de almacenamiento es, como su nombre indica un almacén de depósito de

datos e instrucciones; elemento pasivo que puede equiparse con un estante con varios

casilleros en cada uno de los cuales se colocará un dato. Cada uno de estos casilleros

puede contener el diseño interno de la computadora un número específico de bits.

Las memorias de semiconductores se fabrican en diversas modalidades que podríamos

clasificar en 2 grandes grupos:

Las de lectura solamente y,

Las de lectura y escritura

Las memorias de lectura solamente se conocen con las siglas ROM (Read Only

Memory; memoria solo para lectura) y constituyen una nueva concepción de la

arquitectura de los equipo de computo. Normalmente se utilizan para guardar programas

de uso general en forma permanente; convirtiéndose así en un híbrido entre lo que

tradicionalmente constituía el equipo (hardware) y los sistemas y programas (software).

Las memorias de lectura y escritura, erróneamente designados con las siglas RAM

(Random Access Memory; memoria de acceso aleatorio), a diferencia de los ROM,

pierden su contenido e información al faltarles la corriente eléctrica.

Además, permite escribir, leer o modificar un dato tantas veces como sea necesario.

La unidad de almacenamiento es una parte clave de una computadora digital. En ella se

guardan los programas y los datos con los que se trabaja el equipo. De su tamaño y

velocidad de operación depende gran parte de la capacidad de todo el equipo de

cómputo.

La unidad de control de memoria es la que coordina en forma autónoma la unidad de

memoria en su totalidad; recibe llamados desde la unidad de control del procesador

control para conectarse con otros subsistemas y reenviar datos. Cuando la unidad de

control de conecta con otros subsistemas recibe de estos una señal que puede indicar

que se enviaran datos a la unidad de almacenamiento o que serán extraídos de ella.

Una vez que la unidad de control del procesador o cualquier otro subsistema llega a la

unidad de control de memoria procede a extraer o a depositar datos; para ello, la unidad

de control de memoria usa dos registros, uno que tendrá la dirección de memoria RDM

(Registro de dirección de memoria), a partir d e la cual se extraerá o depositará un dato,

y otro registro RD (Registro de datos), que contendrá el dato que se ha extraído o que

debe depositarse en la memoria.

UNIDAD DE CONTROL

Con base en las instrucciones registradas en la memoria principal, la UC determina el

ritmo del proceso de los diferentes datos, coordinando el desarrollo dichas instrucciones

a través de las unidades de memoria y de aritmética y lógica, de acuerdo con los

requerimientos del programa almacenado. La unidad de control es el cerebro del equipo;

supervisa el proceso de las demás unidades de la unidad central del proceso y puede

permitir una autonomía a las demás unidades; esto depende del tipo y marca de

computadora en cuestión. Aun cuando un subsistema posea retornará su control a la UC,

cada vez que haya completado una operación.

El programa almacenado indica a la unidad de control la acción que en cada momento

debe llevar a cabo; la UC debe determinar cuál instrucción debe ejecutarse, qué

operaciones deben desarrollarse y la dirección en donde se encuentran los datos que

deben procesarse en un momento dado. Para esto, cuenta con el auxilio de la unidad de

control de memoria.

Cada instrucción debe interpretarse antes de ejecutarse, con objeto de saber si es posible

llevarla a cabo. Es importante observar que cada instrucción debe ejecutarse en su

propia secuencia. La unidad de control supervisa la interpretación y ejecución de cada

instrucción.

En resumen: la unidad de control interpreta instrucciones, determina que éstas se

ejecuten, direcciona y controla la operación de todas las unidades en el sistema de

cómputo; también vigila el ciclo de máquina.

Este en un intervalo de de tiempo fijo, medido en términos de impulsos eléctricos. El

ciclo de máquina está determinado por el diseño de la unidad central de proceso y es el

tiempo necesario para que la unidad de control accese una unidad de información (esta

unidad de información se define en forma diferente para cada máquina). Para ejecutar

una instrucción se requiere generalmente más de un ciclo de máquina.

Hay dos tipos básicos de ciclos de máquina: el ciclo de instrucción que es el tiempo

requerido para mover una instrucción a la unidad de control y ser analizada por ésta y el

ciclo de ejecución, intervalo de tiempo necesario para ejecutar una instrucción dada.

UNIDAD DE ARITMÉTICA Y LÓGICA

Esta contiene:

Circuitos.

Registros.

Unidad de control de proceso.

Unidad de algoritmización.

Las operaciones de esta unidad se basan en la adición. La resta se realiza por la adición

del complemento del número original. La división se logra por sustracciones sucesivas y

la multiplicación, por sumas progresivas.

En la unidad de aritmética y lógica se usan dos clases de registros: acumuladores y

sumadores. Los acumuladores constituyen registros especiales en los cuales se

almacenan los resultados de operaciones aritméticas.

El acumulador está formado, por lo general, de un par de registros combinados

conjuntamente para manejar resultados aritméticos.

Los sumadores se encargan de realizar todas las operaciones aritméticas; pueden estar

conectados en serie o paralelo.

UNIDAD DE CONTROL DE PERIFERICOS

Esta unidad controla tanto el tráfico de datos que entran y salen de los diferentes

dispositivos, como el acceso a los mismos periféricos.

Cuando una instrucción de programa demanda la salida o entrada de datos, la unidad de

control hace participar en el proceso a la unidad de control hace participar en el proceso

a la unidad de control de periféricos. Esta última determina primeramente si es posible

enviar información desde la memoria principal hacia un dispositivo de salida o enviar

datos desde un dispositivo de entrada a la memoria primaria; para ello verifica si cuenta

con un canal libre para tal fin. Posteriormente determina si el dispositivo por usar está

libre o no en ese momento.

La unidad de control de periféricos actúa como un agente de tránsito, todas las llamadas

del programa para enviar o pedir datos de almacenamientos secundarios son manejadas

por esta unidad la cual determina el momento en que las unidades periféricas de

entrada/salida puedan operar. En la actualidad la unidad de control de periféricos, al

igual que los canales de entrada y salida de datos, se construyen por lo común por

pequeños microprocesadores especialmente diseñados y programados para este

propósito.

Puesto que el tiempo en que se procesa una instrucción (aritmética o lógica) dentro del

procesador central es del orden de nanosegundos y el término en que se procesa una

instrucción de entrada/salida tarda milisegundos, es necesario controlar los periféricos a

fin de que no exista traslape en la información; para lo cual la unidad de control de

periféricos coordina los canales que permiten la transmisión.

El canal es esencialmente la unidad de control para una o más unidades de

entrada/salida por las cuales los datos son traídos dentro o llevados fuera de la unidad de

almacenamiento secundario.

RISC

DEC Alpha AXP 21064, un microprocesador RISC

En la arquitectura computacional, RISC (del inglés reduced instruction set computer)

es un tipo de microprocesador con las siguientes características fundamentales:

1. Instrucciones de tamaño fijo y presentadas en un reducido número de formatos.

2. Sólo las instrucciones de carga y almacenamiento acceden a la memoria por

datos.

Además estos procesadores suelen disponer de muchos registros de propósito general.

El objetivo de diseñar máquinas con esta arquitectura es posibilitar la segmentación y el

paralelismo en la ejecución de instrucciones y reducir los accesos a memoria. Las

máquinas RISC protagonizan la tendencia actual de construcción de microprocesadores.

PowerPC, DEC Alpha, MIPS, ARM, ... son ejemplos de algunos de ellos.

RISC es una filosofía de diseño de CPU para computadora que está a favor de conjuntos

de instrucciones pequeñas y simples que toman menor tiempo para ejecutarse. El tipo de

procesador más comúnmente utilizado en equipos de escritorio, el x86, está basado en

CISC en lugar de RISC, aunque las versiones más nuevas traducen instrucciones

basadas en CISC x86 a instrucciones más simples basadas en RISC para uso interno

antes de su ejecución.

La idea fue inspirada por el hecho de que muchas de las características que eran

incluidas en los diseños tradicionales de CPU para aumentar la velocidad estaban siendo

ignoradas por los programas que eran ejecutados en ellas. Además, la velocidad del

procesador en relación con la memoria de la computadora que accedía era cada vez más

alta. Esto conllevó la aparición de numerosas técnicas para reducir el procesamiento

dentro del CPU, así como de reducir el número total de accesos a memoria.

Terminología más moderna se refiere a esos diseños como arquitecturas de carga-

almacenamiento.

Contenido

[ocultar]

1 Filosofía de diseño antes de RISC

2 Filosofía de diseño RISC

o 2.1 Multitarea

3 Historia

4 Características

5 Primeros diseños RISC

6 RISC moderno

7 Véase también

8 Enlaces externos

[editar] Filosofía de diseño antes de RISC

Uno de los principios básicos de diseño para todos los procesadores es añadir velocidad

al proveerles alguna memoria muy rápida para almacenar información temporalmente,

estas memorias son conocidas como registros. Por ejemplo, casi cada CPU incluye una

orden para sumar dos números. La operación básica de un CPU sería cargar esos dos

números en los registros, sumarlos y almacenar el resultado en otro registro, finalmente,

tomar el resultado del último registro y devolverlo a la memoria principal.

Sin embargo, los registros tienen el inconveniente de ser algo complejos para

implementar. Cada uno está representado por transistores en el chip, en este aspecto la

memoria principal tiende a ser mucho más simple y económica. Además, los registros le

añaden complejidad al cableado, porque la unidad central de procesamiento necesita

estar conectada a todos y cada uno de los registros para poder utilizarlos por igual.

Como resultado de esto, muchos diseños de CPU limitan el uso de registros de alguna u

otra manera. Algunos incluyen pocos registros, aunque esto limita su velocidad. Otros

dedican sus registros a tareas específicas para reducir la complejidad; por ejemplo, un

registro podría ser cap registros, mientras que el resultado podría estar almacenado en

cualquiera de ellos.

En el mundo de la microcomputación de los años setenta, éste era un aspecto más de las

CPU, ya que los procesadores eran entonces demasiado lentos –de hecho había una

tendencia a que el procesador fuera más lento que la memoria con la que se

comunicaba-. En esos casos tenía sentido eliminar casi todos los registros, y entonces

proveer al programador de una buena cantidad de maneras de tratar con la memoria para

facilitar su trabajo.

Dado el ejemplo de la suma, la mayoría de los diseños de CPU se enfocaron a crear una

orden que pudiera hacer todo el trabajo automáticamente: llamar los dos números que

serían sumados, sumarlos, y luego almacenarlos fuera directamente. Otra versión podría

leer los dos números de la memoria, pero almacenaría el resultado en un registro. Otra

versión podría leer uno de la memoria y otro desde un registro y almacenarlo en la

memoria nuevamente. Y así sucesivamente.

La meta en general en aquel tiempo era proveer cada posible modo de direccionamiento

para cada instrucción, un principio conocido como ortogonalidad. Esto llevó a un CPU

complejo, pero en teoría capaz de configurar cada posible orden individualmente,

haciendo el diseño más rápido en lugar de que el programador utilizara órdenes simples.

La última representación de este tipo de diseño puede ser vista en dos equipos, el MOS

6502 por un lado, y el VAX en el otro. El chip 6502 de $25 USD efectivamente tenía

solamente un registro, y con la configuración cuidadosa de la interfaz de memoria fue

capaz de sobrepasar diseños corriendo a velocidades mayores (como el Zilog Z80 a

4MHz). El VAX era un minicomputador que en una instalación inicial requería 3

gabinetes de equipo para un solo CPU, y era notable por la sorprendente variedad de

estilos de acceso a memoria que soportaba, y el hecho de que cada uno de éstos estaba

disponible para cada instrucción.

[editar] Filosofía de diseño RISC

A finales de los setenta, investigaciones en IBM (y otros proyectos similares en otros

lugares) demostraron que la mayoría de esos modos de direccionamiento ortogonal eran

ignorados por la mayoría de los programas. Esto fue un efecto colateral en el

incremento en el uso de compiladores para generar los programas, algo opuesto a

escribirlos en lenguaje ensamblador. Los compiladores tendían a ser demasiado tontos

en términos de las características que usaban, un efecto colateral del intento por hacerlos

pequeños. El mercado se estaba moviendo hacia un uso más generalizado de los

compiladores, diluyendo aún más la utilidad de los modelos ortogonales.

Otro descubrimiento fue que debido a que esas operaciones eran escasamente utilizadas,

de hecho tendían a ser más lentas que un número pequeño de operaciones haciendo lo

mismo. Esta paradoja fue un efecto colateral del tiempo que se utilizaba diseñando los

CPU, los diseñadores simplemente no tenían tiempo de optimizar cada instrucción

posible, y en vez de esto sólo optimizaban las más utilizadas. Un famoso ejemplo de

esto era la instrucción VAX INDEX, que se ejecutaba más lentamente que un ciclo que

implementara el mismo código.

Casi al mismo tiempo, las CPU comenzaron a correr a velocidades mayores que las de

la memoria con la que se comunicaban. Aún a finales de los setenta, era aparente que

esta disparidad continuaría incrementándose al menos durante la siguiente década, para

entonces los CPU podrían ser cientos de veces más rápidos que la memoria. Esto

significó que los avances para optimizar cualquier modo de direccionamiento serían

completamente sobrepasados por las velocidades tan lentas en las que se llevaban a

cabo.

Otra parte del diseño RISC llego desde las medidas prácticas de los programas en el

mundo real. Andrew Tanenbaum reunió muchos de éstos, demostrando así que la

mayoría de los procesadores estaban sobredimensionados. Por ejemplo, él demostró que

el 98 % de todas las constantes en un programa podían acomodarse en 13 bits, aun

cuando cada diseño de CPU dedicaba algunos múltiplos de 8 bits para almacenarlos,

típicamente 8, 16 o 32, una palabra entera. Tomando este hecho en cuenta sugiere que

una máquina debería permitir que las constantes fuesen almacenadas en los bits sin

utilizar de otras instrucciones, disminuyendo el número de accesos a memoria. En lugar

de cargar números desde la memoria o los registros, éstos podrían estar ahí mismo para

el momento en el que el CPU los necesitara, y por lo tanto el proceso sería mucho más

rápido. Sin embargo, esto requería que la instrucción misma fuera muy pequeña, de otra

manera no existiría suficiente espacio libre en los 32 bits para mantener constantes de

un tamaño razonable.

Fue el pequeño número de modos y órdenes que dio lugar al término Conjunto de

Instrucciones Reducidas. Ésta no es una definición correcta, ya que los diseños RISC

cuentan con una vasta cantidad de conjuntos de instrucciones para ellos. La verdadera

diferencia es la filosofía para hacer todo en registros y llamar y guardar los datos hacia

ellos y en ellos mismos. Ésta es la razón por la que la forma más correcta de denominar

este diseño es cargar-almacenar. Con el paso del tiempo las técnicas de diseño antiguas

se dieron a conocer como Computadora con Conjunto de Instrucciones Complejo, CISC

por sus siglas en inglés, aunque esto fue solamente para darles un nombre diferente por

razones de comparación.

Por esto la filosofía RISC fue crear instrucciones pequeñas, implicando que había

pocas, de ahí el nombre conjunto de instrucciones reducido. El código fue

implementado como series de esas instrucciones simples, en vez de un sola instrucción

compleja que diera el mismo resultado. Esto hizo posible tener más espacio dentro de la

instrucción para transportar datos, resultando esto en la necesidad de menos registros en

la memoria. Al mismo tiempo la interfaz con la memoria era considerablemente simple,

permitiendo ser optimizada.

Sin embargo RISC también tenía sus desventajas. Debido a que una serie de

instrucciones son necesarias para completar incluso las tareas más sencillas, el número

total de instrucciones para la lectura de la memoria es más grande, y por lo tanto lleva

más tiempo. Al mismo tiempo no estaba claro dónde habría o no una ganancia neta en el

desempeño debido a esta limitación, y hubo una batalla casi continua en el mundo de la

prensa y del diseño sobre los conceptos de RISC.

[editar] Multitarea

Debido a lo redundante de las microinstrucciones, los sistemas operativos diseñados

para estos microprocesadores, contemplaban la capacidad de subdividir un

microprocesador en varios, reduciendo el número de instrucciones redundantes por cada

instancia del mismo. Con una arquitectura del sofware optimizada, los entornos visuales

desarrollados para estas plataformas, contemplaban la posibilidad de ejecutar varias

tareas en un mismo ciclo de reloj. Así mismo, la paginación de la memoria RAM era

dinámica y se asignaba una cantidad suficiente a cada instancia, existiendo una especie

de 'simbiosis' entre la potencia del microprocesador y la RAM dedicada a cada instancia

del mismo.

La multitarea dentro de la arquitectura CISC nunca ha sido real, tal como en los RISC sí

lo es. En CISC, el microprocesador en todo su conjunto está diseñado en tantas

instrucciones complejas y diferentes, que la subdivisión no es posible, al menos a nivel

lógico. Por lo tanto, la multitarea es aparente y por ordenes de prioridad. Cada ciclo de

reloj trata de atender a una tarea instanciada en la RAM y pendiente de ser atendida.

Con una cola de atención por tarea FIFO para los datos generados por el procesador, y

LIFO para las interrupciones de usuario, trataban de dar prioridad a las tareas que el

usuario desencadenara en el sistema. La apariencia de multitarea en un CISC

tradicional, biene de la mano de los modelos escalares de datos, convirtiendo el flujo en

un vector con distintas etapas y creando la tecnología pipeline.

Los microprocesadores actuales, al ser hibridos, permiten cierta parte de multitarea real.

La capa final al usuario es como un CISC tradicional, mientras que las tareas que el

usuario deja pendientes, dependiendo del tiempo de inactividad, el sistema traducirá las

instrucciones (el software ha de ser compatible con esto) CISC a RISC, pasando la

ejecución de la tarea a bajo nivel, en donde los recursos se procesan con la filosofía

RISC. Dado que el usuario solo atiende una tarea por su capacidad de atención, el resto

de tareas que deja pendientes y que no son compatibles con el modelo de traducción

CISC/RISC, pasan a ser atendidas por el tradicional pipeline, o si son tareas de bajo

nivel, tal como desfragmentaciones de disco, chequeo de la integridad de la

información, formateos, tareas gráficas o tareas de cálculo matemático intenso.

En vez de tratar de subdividir a un solo microprocesador, se incorporó un segundo

microprocesador gemelo, indéntico al primero. El inconveniente es que la RAM debía

de ser tratada a nivel hardware y los módulos diseñados para plataformas

monoprocesador no eran compatibles o con la misma eficiencia, que para las

plataformas multiprocesador. Otro inconveniente, era la fragmentación del BYTE de

palabra. En un RISC tradicional, se ocupan los BYTES de la siguiente forma: Si la

palabra es de 32 BITS (4 BYTES de palabra de 8 BITS cada una, o dos de 16 o una de

32), dependiendo de la profundidad del dato portado, dentro del mismo BYTE, se

incluian partes de otras instrucciones y datos. Ahora, al ser dos microprocesadores

distintos, ambos usaban registros independientes, con accesos a la memoria propios (en

estas plataformas, la relacion de RAM por procesador es de 1/1). En sus orígenes, las

soluciones se parecían a las típícas ñapas de albanil, cada placa base incorporaba una

solución solamente homologada por la chip set usada y los drivers que la acompañaban.

Si bien la fragmentación siempre ha sido como ese mosquito que zumba en el oido, pero

que por pereza permitimos que nos pique, llegó un momento que era imposible evadir el

zumbido. Esta época llegó con las plataformas de 64 BITS.

[editar] Historia

Mientras la filosofía de diseño RISC se estaba formando, nuevas ideas comenzaban a

surgir con un único fin: incrementar drásticamente el rendimiento de la CPU.

Al principio de la década de los ochenta se pensaba que los diseños existentes estaban

alcanzando sus límites teóricos. Las mejoras de la velocidad en el futuro serían hechas

con base en procesos mejorados, esto es, pequeñas características en el chip. La

complejidad del chip podría continuar como hasta entonces, pero un tamaño más

pequeño podría resultar en un mejor rendimiento del mismo al operar a más altas

velocidades de reloj. Se puso una gran cantidad de esfuerzo en diseñar chips para

computación paralela, con vínculos de comunicación interconstruidos. En vez de hacer

los chips más rápidos, una gran cantidad de chips serían utilizados, dividiendo la

problemática entre éstos. Sin embargo, la historia mostró que estos miedos no se

convirtieron en realidad, y hubo un número de ideas que mejoraron drásticamente el

rendimiento al final de la década de los ochenta.

Una idea era la de incluir un canal por el cual se pudieran dividir las instrucciones en

pasos y trabajar en cada paso muchas instrucciones diferentes al mismo tiempo. Un

procesador normal podría leer una instrucción, decodificarla, enviar a la memoria la

instrucción de origen, realizar la operación y luego enviar los resultados. La clave de la

canalización es que el procesador pueda comenzar a leer la siguiente instrucción tan

pronto como termine la última instrucción, significando esto que ahora dos

instrucciones se están trabajando (una está siendo leída, la otra está comenzando a ser

decodificada), y en el siguiente ciclo habrá tres instrucciones. Mientras que una sola

instrucción no se completaría más rápido, la siguiente instrucción sería completada

enseguida. La ilusión era la de un sistema mucho más rápido. Esta técnica se conoce

hoy en día como Segmentación de cauce.

Otra solución más era utilizar varios elementos de procesamiento dentro del procesador

y ejecutarlos en paralelo. En vez de trabajar en una instrucción para sumar dos números,

esos procesadores superescalares podrían ver la siguiente instrucción en el canal y tratar

de ejecutarla al mismo tiempo en una unidad idéntica. Esto no era muy fácil de hacer,

sin embargo, ya que algunas instrucciones dependían del resultado de otras

instrucciones.

Ambas técnicas se basaban en incrementar la velocidad al añadir complejidad al diseño

básico del CPU, todo lo opuesto a las instrucciones que se ejecutaban en el mismo.

Siendo el espacio en el chip una cantidad finita, para poder incluir todas esas

características algo más tendría que ser eliminado para hacer hueco. RISC se encargó de

tomar ventaja de esas técnicas, esto debido a que su lógica para el CPU era

considerablemente más simple que la de los diseños CISC. Aun con esto, los primeros

diseños de RISC ofrecían una mejora de rendimiento muy pequeña, pero fueron capaces

de añadir nuevas características y para finales de los ochenta habían dejado totalmente

atrás a sus contrapartes CISC. Con el tiempo esto pudo ser dirigido como una mejora de

proceso al punto en el que todo esto pudo ser añadido a los diseños CISC y aun así

caber en un solo chip, pero esto tomó prácticamente una década entre finales de los

ochenta y principios de los noventa.

[editar] Características

En pocas palabras esto significa que para cualquier nivel de desempeño dado, un chip

RISC típicamente tendrá menos transistores dedicados a la lógica principal. Esto

permite a los diseñadores una flexibilidad considerable; así pueden, por ejemplo:

Incrementar el tamaño del conjunto de registros.

Mayor velocidad en la ejecución de instrucciones.

Implementar medidas para aumentar el paralelismo interno.

Añadir cachés enormes.

Añadir otras funcionalidades, como E/S y relojes para minicontroladores.

Construir los chips en líneas de producción antiguas que de otra manera no

serían utilizables.

No hacer nada, ofrecer el chip para aplicaciones de bajo consumo de energía o

de tamaño limitado.

Las características que generalmente son encontradas en los diseños RISC son:

Codificación uniforme de instrucciones (ejemplo: el código de operación se

encuentra siempre en la misma posición en cada instrucción, la cual es siempre

una palabra), lo que permite una decodificación más rápida.

Un conjunto de registros homogéneo, permitiendo que cualquier registro sea

utilizado en cualquier contexto y así simplificar el diseño del compilador

(aunque existen muchas formas de separar los ficheros de registro de entero y

coma flotante).

Modos de direccionamiento simple con modos más complejos reemplazados por

secuencias de instrucciones aritméticas simples.

Los tipos de datos soportados en el hardware (por ejemplo, algunas máquinas

CISC tiene instrucciones para tratar con tipos byte, cadena) no se encuentran en

una máquina RISC.

Los diseños RISC también prefieren utilizar como característica un modelo de memoria

Harvard, donde los conjuntos de instrucciones y los conjuntos de datos están

conceptualmente separados; esto significa que el modificar las direcciones donde el

código se encuentra pudiera no tener efecto alguno en las instrucciones ejecutadas por el

procesador (porque la CPU tiene separada la instrucción y el caché de datos, al menos

mientras una instrucción especial de sincronización es utilizada). Por otra parte, esto

permite que ambos cachés sean accedidos separadamente, lo que puede en algunas

ocasiones mejorar el rendimiento.

Muchos de esos diseños RISC anteriores también compartían una característica no muy

amable, el slot de salto retardado (Delay Slot). Un slot de salto retardado es un espacio

de instrucción siguiendo inmediatamente un salto. La instrucción en este espacio es

ejecutada independientemente de si el salto se produce o no (en otras palabra el salto es

retardado). Esta instrucción mantiene la ALU de la CPU ocupada por el tiempo extra

normalmente necesario para ejecutar una brecha. Para utilizarlo, recae en el compilador

la responsabilidad de reordenar las instrucciones de manera que el código sea coherente

para ejecutar con esta característica. En nuestros días el slot de salto retardado se

considera un desafortunado efecto colateral de la estrategia particular por implementar

algunos diseños RISC. Es por esto que los diseños modernos de RISC, tales como

ARM, PowerPC, y versiones más recientes de SPARC y de MIPS, generalmente

eliminan esta característica.

[editar] Primeros diseños RISC

Una consola del CDC 6600 mainframe system

El primer sistema que pudiera ser considerado en nuestros días como RISC no lo era así

en aquellos días; era la supercomputadora CDC 6600, diseñada en 1964 por Seymour

Cray.

Cray la diseñó como un CPU para cálculos a gran escala (con 74 códigos, comparada

con un 8086 400, además de 12 computadores simples para manejar los procesos de E/S

(la mayor parte del sistema operativo se encontraba en uno de éstos).

El CDC 6600 tenía una arquitectura de carga/almacenamiento con tan solo dos modos

de direccionamiento. Había once unidades de canalización funcional para la aritmética y

la lógica, además de cinco unidades de carga y dos unidades de almacenamiento (la

memoria tenía múltiples bancos para que todas las unidades de carga/almacenamiento

pudiesen operar al mismo tiempo). El nivel promedio de operación por ciclo/instrucción

era 10 veces más rápido que el tiempo de acceso a memoria.

Los diseños RISC que más se dieron a conocer sin embargo, fueron aquellos donde los

resultados de los programas de investigación de las universidades eran ejecutados con

fondos del programa DARPA VLSI. El programa VLSI prácticamente desconocido hoy

en día, llevo a un gran número de avances en el diseño de chips, la fabricación y aún en

las gráficas asistidas por computadora.

El proyecto RISC de la Universidad de Berkeley comenzó en 1980 bajo la dirección de

David A. Patterson, basándose en la obtención de rendimiento a través del uso de la

canalización y un agresivo uso de los registros conocido como ventanas de registros. En

una CPU normal se tienen un pequeño número de registros, un programa puede usar

cualquier registro en cualquier momento. En una CPU con ventanas de registros, existen

un gran número de registros (138 en el RISC-I), pero los programas solo pueden utilizar

un pequeño número de estos (32 en el RISC-I) en cualquier momento.

Un programa que se limita asimismo a 32 registros por procedimiento puede hacer

llamadas a procedimientos muy rápidas: la llamada, y el regreso, simplemente mueven

la ventana de 32 registros actual para limpiar suficiente espacio de trabajo para la

subrutina, y el regreso restablece esos valores.

El proyecto RISC entregó el procesador RISC-I en 1982. Consistiendo de solo 44.420

transistores (comparado con promedios de aproximadamente 100.000 en un diseño

CISC de esa época) RISC-I solo tenía 32 instrucciones, y aun así sobrepasaba el

desempeño de cualquier otro diseño de chip simple. Se continuó con esta tendencia y

RISC-II en 1983 tenía 40.760 transistores y 39 instrucciones, con los cuales ejecutaba 3

veces más rápido que el RISC-I.

Casi al mismo tiempo, John Hennessy comenzó un proyecto similar llamado MIPS en la

Universidad de Stanford en 1981. MIPS se centraba casi completamente en la

segmentación, asegurándose de que ejecutara tan lleno como fuera posible. Aunque la

segmentación ya había sido utilizada en otros diseños, varias características del chip

MIPS hacían su segmentación mucho más rápida. Lo más importante, y quizá molesto

de estas características era el requisito de que todas las instrucciones fueran capaces de

completarse en un solo ciclo. Este requisito permitía al canal ser ejecutado a velocidades

más altas (no había necesidad de retardos inducidos) y es la responsable de la mayoría

de la velocidad del procesador. Sin embargo, también tenía un efecto colateral negativo

al eliminar muchas de las instrucciones potencialmente utilizables, como una

multiplicación o una división.

El primer intento por hacer una CPU basada en el concepto RISC fue hecho en IBM el

cual comenzó en 1975, precediendo a los dos proyectos anteriores. Nombrado como

proyecto RAN, el trabajo llevó a la creación de la familia de procesadores IBM 801, la

cual fue utilizada ampliamente en los equipos de IBM. El 801 fue producido

eventualmente en forma de un chip como ROMP en 1981, que es la abreviatura de

Research Office Products Division Mini Processor. Como implica el nombre, esta CPU

fue diseñada para tareas pequeñas, y cuando IBM lanzó el diseño basado en el IBM

RT-PC en 1986, el rendimiento no era aceptable. A pesar de esto, el 801 inspiró varios

proyectos de investigación, incluyendo algunos nuevos dentro de IBM que

eventualmente llevarían a su sistema IBM POWER.

En los primeros años, todos los esfuerzos de RISC eran bien conocidos, pero muy

confinados a los laboratorios de las universidades que los habían creado. El esfuerzo de

Berkeley se dio a conocer tanto que eventualmente se convirtió en el nombre para el

proyecto completo. Muchos en la industria de la computación criticaban el que los

beneficios del rendimiento no se podían traducir en resultados en el mundo real debido a

la eficiencia de la memoria de múltiples instrucciones, y ésa fue la razón por la que

nadie los estaba utilizando. Pero a comienzos de 1986, todos los proyectos de

investigación RISC comenzaron a entregar productos. De hecho, casi todos los

procesadores RISC modernos son copias directas del diseño RISC-II.

[editar] RISC moderno

La investigación de Berkeley no fue comercializada directamente, pero el diseño RISC-

II fue utilizado por Sun Microsystems para desarrollar el SPARC, por Pyramid

Technology para desarrollar sus máquinas de multiprocesador de rango medio, y por

casi todas las compañías unos años más tarde. Fue el uso de RISC por el chip de SUN

en las nuevas máquinas el que demostró que los beneficios de RISC eran reales, y sus

máquinas rápidamente desplazaron a la competencia y esencialmente se apoderaron de

todo el mercado de estaciones de trabajo.

John Hennessy dejó Stanford para comercializar el diseño MIPS, comenzando una

compañía conocida como MIPS Computer Systems Inc. Su primer diseño fue el chip de

segunda generación MIPS-II conocido como el R2000. Los diseños MIPS se

convirtieron en uno de los chips más utilizados cuando fueron incluidos en las consolas

de juego Nintendo 64 y PlayStation. Hoy son uno de los procesadores integrados más

comúnmente utilizados en aplicaciones de alto nivel por Silicon Graphics.

IBM aprendió del fallo del RT-PC y tuvo que continuar con el diseño del RS/6000

basado en su entonces nueva arquitectura IBM POWER. Entonces movieron sus

computadoras centrales S/370 a los chips basados en IBM POWER, y se sorprendieron

al ver que aun el conjunto de instrucciones muy complejas (que era parte del S/360

desde 1964) corría considerablemente más rápido. El resultado fue la nueva serie

System/390 que aún hoy en día es comercializada como zSeries. El diseño IBM

POWER también se ha encontrado moviéndose hacia abajo en escala para producir el

diseño PowerPC, el cual eliminó muchas de las instrucciones solo IBM y creó una

implementación de chip único. El PowerPC fue utilizado en todas las computadoras

Apple Macintosh hasta 2006, y está comenzando a ser utilizado en aplicaciones

automotrices (algunos vehículos tienen más de 10 dentro de ellos), las consolas de

videojuegos de última generación (PlayStation 3, Nintendo Wii y Xbox 360) están

basadas en PowerPC.

Casi todos los demás proveedores se unieron rápidamente. De los esfuerzos similares en

el Reino Unido resultó el INMOS Trasputer, el Acorn Archimedes y la línea Advanced

RISC Machine, la cual tiene un gran éxito hoy en día. Las compañías existentes con

diseños CISC también se unieron a la revolución. Intel lanzó el i860 y el i960 a finales

de los ochenta, aunque no fueron muy exitosos. Motorola construyó un nuevo diseño

pero no le vio demasiado uso y eventualmente lo abandonó, uniéndose a IBM para

producir el PowerPC. AMD lanzó su familia 29000 la cual se convirtió en el diseño

RISC más popular a principios de los noventa.

Hoy en día los microcontroladores y CPU RISC representan a la vasta mayoría de todos

los CPU utilizados. La técnica de diseño RISC ofrece poder incluso en medidas

pequeñas, y esto ha venido a dominar completamente el mercado de CPU integrados de

bajo consumo de energía. Los CPU integrados son por mucho los procesadores más

comunes en el mercado: considera que una familia completa con una o dos

computadoras personales puede poseer varias docenas de dispositivos con procesadores

integrados. RISC se ha apoderó completamente del mercado de estación de trabajo.

Después del lanzamiento de la SUN SPARCstation los otros proveedores se apuraron a

competir con sus propias soluciones basadas en RISC. Aunque hacia 2006-2010 las

estaciones de trabajo pasaron a la arquitectura x86-64 de Intel y AMD. Incluso el

mundo de las computadoras centrales está ahora basado completamente en RISC.

Esto es sorprendente en vista del dominio del Intel x86 y x86 64 en el mercado de las

computadoras personales de escritorio (ahora también en el de estaciones de trabajo),

ordenadores portátiles y en servidores de la gama baja. Aunque RISC fue capaz de

avanzar en velocidad muy rápida y económicamente.

Los diseños RISC han llevado a un gran número de plataformas y arquitecturas al éxito,

algunas de las más grandes:

La línea MIPS Technologies Inc., que se encontraba en la mayoría de las

computadoras de Silicon Graphics hasta 2006, y estuvo en las consolas ya

descatalogadas Nintendo 64, PlayStation y PlayStation 2. Actualmente se utiliza

en la PlayStation Portable y algunos routers.

La serie IBM POWER, utilizado principalmente por IBM en Servidores y

superordenadores.

La versión PowerPC de Motorola e IBM (una versión de la serie IBM POWER)

utilizada en los ordenadores AmigaOne, Apple Macintosh como el iMac, eMac,

Power Mac y posteriores (hasta 2006). Actualmente se utiliza en muchos

sistemas empotrados en automóviles, routers, etc, así como en muchas consolas

de videojuegos, como la Playstation 3, Xbox 360 y Nintendo Wii.

El procesador SPARC y UltraSPARC de Sun Microsystems y Fujitsu, que se

encuentra en sus últimos modelos de servidores (y hasta 2008 también en

estaciones de trabajo).

El PA-RISC y el HP/PA de Hewlett-Packard, ya descatalogados.

El DEC Alpha en servidores HP AlphaServer y estaciones de trabajo

AlphaStation, ya descatalogados.

El ARM – Se encuentra en dispositivos PALM, Nintendo DS, Game Boy

Advance y en múltiples PDAs, teléfonos móviles, smartphones y reproductores

multimedia (como el iPod).

Pipeline

Pipelinining

domingo, 01 de junio de 2008 07:09 p.m.

La Segmentación (pipelining) es un método por el cual se consigue aumentar el

rendimiento de algunos sistemas electrónicos digitales. Es aplicado, sobre todo, en

microprocesadores. El nombre viene de que para impulsar el gas en un oleoducto a la

máxima velocidad es necesario dividir el oleoducto en tramos y colocar una bomba que

de un nuevo impulso al gas. El símilar con la programación existe en que los cálculos

deben ser registrados o sincronizados con el reloj cada cierto tiempo para que la ruta

crítica (tramo con más carga o retardo computacional entre dos registros de reloj) se

reduzca.

La ruta crítica es en realidad la frecuencia máxima de trabajo alcanzada por el conjunto.

A mayor ruta crítica (tiempo o retraso entre registros) menor es la frecuencia máxima de

trabajo y a menor ruta crítica mayor frecuencia de trabajo. La una es la inversa de la

otra. Repartir o segmentar equitativamente el cálculo hace que esa frecuencia sea la

óptima a costa de más área para el almacenamiento o registro de los datos intervinientes

y de un retraso o latencia (en ciclos de reloj/tiempo) en la salida del resultado

equivalente al número de segmentaciones o registros realizados. La ventaja primordial

de este sistema es que, tal y como se muestra en la imagen, una vez el pipe está lleno, es

decir, después de una latencia de cuatro en la imagen, los resultados de cada comando

vienen uno tras otro cada flanco de reloj y sin latencia extra por estar encadenados

dentro del mismo pipe. Todo esto habiendo maximizado la frecuencia máxima de

trabajo.

Detalle de la segmentación de instrucciones.

El alto rendimiento y la velocidad elevada de los modernos procesadores, se debe,

principalmente a la conjunción de tres técnicas:

Arquitectura Harvard (arquitectura que propicia el paralelismo).

Procesador tipo RISC.

Segmentación.

Consiste en descomponer la ejecución de cada instrucción en varias etapas para poder

empezar a procesar una instrucción diferente en cada una de ellas y trabajar con varias a

la vez.

En el caso del procesador DLX podemos encontrar las siguientes etapas en una

instrucción:

IF: búsqueda

ID: decodificación

EX: ejecución de unidad aritmético lógica

MEM: memoria

WB: escritura

Cada una de estas etapas de la instrucción usa en exclusiva un hardware determinado

del procesador, de tal forma que la ejecución de cada una de las etapas en principio no

interfiere en la ejecución del resto.

En el caso de que el procesador no pudiese ejecutar las instrucciones en etapas

segmentadas, la ejecución de la siguiente instrucción sólo se podría llevar a cabo tras la

finalización de la primera. En cambio en un procesador segmentado, salvo excepciones

de dependencias de datos o uso de unidades funcionales, la siguiente instrucción podría

iniciar su ejecución tras acabar la primera etapa de la instrucción actual.

Otro ejemplo de lo anterior, en el caso del PIC, consiste en que el procesador realice al

mismo tiempo la ejecución de una instrucción y la búsqueda del código de la siguiente.

Superpipeline

La reducción del período de reloj τ sin reducir el tiempo total de cada etapa, y

permitiendo que se emita una instrucción por ciclo, se denomina. Un procesador

superpipeline posee sus etapas supersegmentadas, cada una de las cuales duran varios

ciclos

Superescalar

Es el término utilizado para designar un tipo de microarquitectura de procesador capaz

de ejecutar más de una instrucción por ciclo de reloj. El término se emplea por

oposición a la microarquitectura escalar que sólo es capaz de ejecutar una instrucción

por ciclo de reloj. En la clasificación de Flynn, un procesador superescalar es un

procesador de tipo MIMD (multiple instruction multiple data). La microarquitectura

superescalar utiliza el paralelismo de instrucciones además del paralelismo de flujo, éste

último gracias a la estructura en pipeline. La estructura típica de un procesador

superescalar consta de un pipeline con las siguientes etapas:

lectura (fetch)

decodificación (decode)

lanzamiento (dispatch)

ejecución (execute)

escritura (writeback)

finalización (retirement)

En un procesador superescalar, el procesador maneja más de una instrucción en cada

etapa. El número máximo de instrucciones en una etapa concreta del pipeline se

denomina grado, así un procesador superescalar de grado 4 en lectura (fetch) es capaz

de leer como máximo cuatro instrucciones por ciclo. El grado de la etapa de ejecución

depende del número y del tipo de las unidades funcionales.

Un procesador superescalar suele tener unidades funcionales independientes de los tipos

siguientes :

Unidad aritmético lógica (ALU)

Unidad de lectura / escritura en memoria (Load/Store Unit)

Unidad de coma flotante (Floating Point Unit)

Unidad de salto (Branch unit)

Un procesador superescalar es capaz de ejecutar más de una instrucción

simultáneamente únicamente si las instrucciones no presentan algún tipo de

dependencia (hazard). Los tipos de dependencia entre instrucciones son :

Dependencia estructural, esta ocurre cuando dos instrucciones requieren el mismo tipo

unidad funcional y su número no es suficiente.

Dependencia de datos, esta ocurre cuando una instrucción necesita del resultado de otra

instrucción para ejecutarse, por ejemplo R1<=R2+R3 y R4<=R1+5.

Dependencia de escritura o falsa dependencia , esta ocurre cuando dos instrucciones

necesitan escribir en la misma memoria, por ejemplo R1<=R2+R3 y R1<=R1+5.

La detección y resolución de las dependencias entre instrucciones puede ser estática

(durante la compilación) o dinámica, es decir, a medida que se ejecuta un programa,

generalmente durante la etapas de codificación y lanzamiento de las instrucciones.

La detección y resolución dinámica de las dependencias entre instrucciones suele

realizarse mediante alguna variante del algoritmo de Tomasulo que permite la ejecución

de instrucciones en un orden distinto al del programa también llamada ejecución en

desorden .

La eficacia de un procesador superescalar viene limitada por un lado por la dificultad en

suministrar al procesador suficientes instrucciones que puedan ser ejecutadas en

paralelo y por otro lado por las prestaciones de la jerarquía de memorias.

Si las instrucciones de salto son un problema para los procesadores con pipeline en

general, en el caso de los procesadores superescalares, el problema se multiplica ya que

un parón en el pipeline tiene consecuencias en un número mayor de instrucciones.

Por esta razón, los fabricantes de procesadores recurren a técnicas de ejecución

especulativa y diseñan algoritmos de predicción de saltos cada vez más sofisticados así

como sistemas de almacenamiento de instrucciones por trazas (trace caches).

Las arquitecturas superescalares adolecen de una estructura compleja y de un mal

aprovechamiento de sus recursos debido en parte a la dificultad en encontrar suficientes

instrucciones paralelizables. Una forma de obtener un mayor número de instrucciones

paralelizables es aumentar la ventana de instrucciones, es decir el conjunto de

instrucciones que la unidad de lanzamiento considera como candidatas a ser lanzadas en

un momento dado.

Desafortunadamente la complejidad del procesador superescalar aumenta

desproporcionadamente con respecto al tamaño de dicha ventana lo que se traduce por

un ralentizamiento general del circuito. Otra forma de obtener más instrucciones

paralelizables es manipulando instrucciones de más de un programa a la vez, lo que se

conoce bajo el nombre de multitarea simultánea o multithreading simultáneo.

Mientras las primeras CPUs superescalares disponían de dos ALUs y una sola FPU, un

procesador moderno como el PowerPC 970 incluye cuatro ALUs y dos FPUs, además

de dos unidades SIMD. Si el despachador no es eficiente haciendo trabajar lo máximo

posible a estas unidades, el rendimiento global del procesador se verá mermado.

La CDC 6600 de Seymour Cray, construida en 1965, es la primera arquitectura

superescalar, siendo llevado el concepto a las microcomputadoras en las CPUs RISC.

Esta posibilidad venía dada por la simpleza de los núcleos RISC, permitiendo meter

más unidades de ejecución en un mismo chip.

Esta fue una de las razones de la rapidez de los sistemas RISC frente a los más antiguos

CISC durante las décadas de los 80 y los 90, pero a medida que los procesos de

fabricación mejoraron y se pudieron meter más y más transistores en el mismo chip,

hasta diseños complejos como el IA-32 pudieron ser superescalares.

La inmensa mayoría de las CPUs desarrolladas desde 1998 son superescalares.

Llegados a un punto en que la mejora sustancial de la unidad de control y

despachamiento parece imposible, ya no parece que los diseños superescalares puedan

dar más de sí. Una de las posibles soluciones es trasladar la lógica de despachamiento

desde el chip hasta el compilador, que puede invertir mucho más tiempo en tomar las

mejores decisiones posibles, ya que no tiene que operar en tiempo real como tenía que

hacer el hardware de despachamiento.

Este es el principio básico de los procesadores VLIW (Very Long Instruction Word),

donde el paralelismo es explicitado por el formato de instrucción, también conocidos

como superescalares estáticos

Riesgos de salto o de control

Los riesgos de salto o de control ocurren cuando el procesador se ve obligado a saltar a

una instrucción que no tiene por qué ser necesariamente la inmediatamente siguiente en

el código. En ese caso, el procesador no puede saber por adelantado si debería ejecutar

la siguiente instrucción u otra situada más lejos en el código.

Esto puede resultar en acciones no deseadas por parte de la CPU.

Eliminación de riesgos de salto

Ejecución especulativa

En ciencias de la computación, la ejecución especulativa es la ejecución de código por

parte del procesador que no tiene por qué ser necesaria a priori. En la programación

funcional, suele usarse el término "evaluación especulativa".

La ejecución especulativa no es más que una optimización. Obviamente, sólo es útil

cuando la ejecución previa requiere menos tiempo y espacio que el que requeriría la

ejecución posterior, siendo este ahorro lo suficientemente importante como para

compensar el esfuerzo gastado en caso de que el resultado de la operación nunca llegue

a usarse.

Los procesadores modernos que hacen uso de un pipeline usan la ejecución especulativa

para, entre otras cosas, reducir el coste computacional de las instrucciones de salto

condicional. Cuando el procesador se encuentra con una instrucción de salto

condicional, el procesador intenta adivinar donde es más probable que se salte (a esto se

le llama predicción de saltos) e inmediatamente comienza a ejecutar el código que

empieza en ese área. Si a posteriori se demuestra que la predicción fue errónea, todo lo

ejecutado después del salto se descarta. Esta ejecución prematura sale realmente

rentable en términos de uso de recursos puesto que si no el pipeline se pararía hasta

conocer cual sería la próxima instrucción.

Hay un tipo de ejecución 'vaga' que no realiza este tipo de predicciones. La

incorporación de la ejecución especulativa en lenguajes de programación es un tema de

investigación actualmente, probándose en diversas implementaciones de Haskell. Las

versiones recientes del GHC permiten un tipo de ejecución especulativa llamada

"ejecución optimista".

Hueco de retardo

En arquitectura de computadores, un hueco de retardo contiene una instrucción que es

ejecutada sin tener en cuenta los efectos de la instrucción precedente. La forma más

común consiste en una instrucción arbitraria sencilla colocada inmediatamente después

de una instrucción de salto en las arquitecturas RISC o DSP; esta instrucción se

ejecutará incluso si el salto precedente es efectivo. De este modo las instrucciones

parecen ejecutarse de un modo ilógico o incorrecto. Es típico de los lenguajes

ensambladores reordenar automáticamente las instrucciones, cubriendo de este modo las

carencias de algunos compiladores.

Huecos de retardo de salto

Los huecos de retardo en que se ven involucradas las instrucciones de salto son

conocidos como huecos de retardo de salto. Se encuentran principalmente en las

arquitecturas DSP y RISC más antiguas. Las arquitecturas MIPS, PA-RISC, ETRAX

CRIS, SuperH y SPARC son arquitecturas RISC que tienen un único huecos de retardo

de salto; las arquitecturas PowerPC, ARM y la recientemente diseñada DEC Alpha

carecen de él. Las arquitecturas de los DSP pueden ser de hueco único o doble (ejecutan

dos instrucciones entre el inicio de la instrucción de salto y su resolución).

El objetivo de la segmentación RISC clásica es mantener los registros de segmentación

ocupados en todo momento. El hueco de retardo de salto es un efecto colateral de las

arquitecturas segmentadas debido a los riesgos. Un diseño sencillo insertaría burbujas

en la segmentación después del salto hasta que la dirección de destino sea computada y

cargada en el contador de programa. Cada ciclo en que se inserta una burbuja es

considerado un hueco de retardo de salto. Un diseño más sofisticado ejecutaría las

instrucciones del programa no dependientes del resultado de la instrucción de salto. Esta

optimización puede ser realizada mediante software en tiempo de compilación

moviendo instrucciones desde memoria al hueco de retardo de salto, siempre y cuando

el hardware soporte esta operación. Otro efecto colateral es el especial cuidado que hay

que tener con los puntos de ruptura y las ejecuciones línea a línea durante el proceso de

depuración de programas.

El número ideal de huecos de retardo de salto en una determinada implementación

segmentada viene dado por el número de etapas de segmentación, la presencia de

unidades anticipadoras, la etapa en que se computen las condiciones de salto, si se

utiliza o no un buffer de destino de salto, etc. Los requisitos de compatibilidad de

software marcan que una arquitectura no puede cambiar el número de huecos de retardo

de una generación a la siguiente. Esto requiere inevitablemente que las nuevas

implementaciones del hardware contengan componentes a mayores para asegurar que el

comportamiento de la arquitectura se mantiene a pesar de no ser ya relevante.

Hueco de retardo de carga

Un hueco de retardo de carga es una instrucción que se ejecuta inmediatamente después

de una carga (copia de memoria a registro) pero que no ve el resultado de dicha carga.

Estos huecos de retardo son poco comunes porque los retardos por cargas son altamente

impredecibles en el hardware actual. Una carga puede ser satisfecha por la RAM por la

caché, y puede ser ralentizada por la distribución de recursos. Los retardos por cargas

eran propios de los diseños más primitivos de procesadores RISC. El repertorio de

instrucciones MIPS1 (utilizado en los procesadores R3000 y anteriores) sufre este

problema.

El siguiente código de ejemplo está escrito en ensamblador MIPS1, mostrando tanto un

hueco de retardo de carga como de salto.

lw v0,4(v1) # carga de la palabra almacenada en la dirección v1+4 en el registro v0

nop # hueco de retardo de carga

jr v0 # salto incondicional a la dirección especificada por el registro v0

nop # hueco de retardo de salto

Un salto es una interrupción del flujo normal de las instrucciones, haciendo que el

procesador continúe en otro punto del programa ("salta" a otra parte del programa). Un

salto condicional es una instrucción (más bien una familia de instrucciones) que realiza

el salto si se cumple una condición determinada con anterioridad. El problema es que el

procesador no sabe si se realizará el salto o no hasta que se evalúa la condición y si esto

ocurre en la mitad del pipeline, es posible que tenga que borrar el pipeline y comenzar

de nuevo en el nuevo punto de ejecución, perdiendo tiempo y trabajo.

Para evitar interrumpir el pipeline, el procesador trata de adivinar si se tomará el salto o

no, y seguir leyendo/decodificando/ejecutando las instrucciones de acuerdo a su

escogencia. Claro que no toma la decisión al azar, sino que utiliza circuitos adicionales

que guardan la historia de estos saltos y un algoritmo (no revelado) que lo ayuda a

elegir. Además, los programadores que construyen los compiladores tienen que seguir

unas reglas que Intel ha especificado para ayudar al procesador a realizar una decisión

inteligente. trata de adivinar si se tomará el salto o no, y seguir

leyendo/decodificando/ejecutando las instrucciones de acuerdo a su escogencia. Claro

que no toma la decisión al azar, sino que utiliza circuitos adicionales que guardan la

historia de estos saltos y un algoritmo (no revelado) que lo ayuda a elegir. Además, los

programadores que construyen los compiladores tienen que seguir unas reglas que Intel

ha especificado para ayudar al procesador a realizar una decisión inteligente.

Videos de pipeline.

Introducción a los microprocesadores

multi núcleo

1. Introducción a los microprocesadores multi núcleo.

2. Conceptos asociados.

3. Un baile de tecnologías.

4. 1 núcleo. 2 núcleos. 4 núcleos.. Historia de la evolución.

5. Comparando distintos procesadores.

6. Conclusiones. Jos

1 Procesadores para port_atiles - Lista de benchmarks http://es.notebookcheck.com/Procesadores-mobiles-lista-de-benchmarks-nueva.2553.0.html 2 Tablas de comparaci_on de productos Intel http://compare.intel.com/PCC/default.aspx?familyid=1&culture=es-ES 3 Compara especi_caciones de procesadores AMD

http://www.amdcompare.com 4 The Truth About PC Power Consumption http://www.tomshardware.com/2007/10/19/the truth about pc power consumption/page5.html 5 Choosing Dual or Quad Core http://www.codinghorror.com/blog/archives/000942.html 6 Descripcion de la tecnologia HyperThreading http://www.intel.com/espanol/business/bss/products/hyperthreading/overview.htm 7 El procesador: aspectos tecnologicos http://www.zator.com/Hardware/H3 1.htm 8 >Dual Core o Quad Core? http://www.javipas.com/2007/09/04/ %C2 %BFdual-core-o-quad-core/ 9 Lo _ultimo en portatiles http://www.pc-actual.com/Actualidad/An_alisis/Informatica personal/Hardware/20070709065/6 10 Quad-core frente a dual-core, las claves http://www.theinquirer.es/2006/11/14/especial quadcore frente a dua.html 11 HyperTransport Technology http://www.hispatech.com/articulos/html/ibap/htt/pag2.php 12 Multi nucleo http://es.wikipedia.org/wiki/Doble Nucleo 13 Plataforma Santa Rosa http://es.wikipedia.org/wiki/Plataforma Santa Rosa Jos_e Ignacio _Alvarez Ruiz (UCO)

Procesadores de altas prestaciones (Digital Signal Processor):

PARTE 1. INTRODUCCIÓN. 1. Introducción a los DSP. Conceptos básicos. 2. Familias TMS320 de

Texas Instruments.

PARTE 2. DESCRIPCIÓN INTERNA DE LOS PROCESADORES DE ALTAS PRESTACIONES. 3. La CPU

de la familia TMS320C3x. 4. La CPU de la familia TMS320C600. 5. Periféricos internos. 6.

Operaciones externas del bus.

PARTE 3. PROGRAMACIÓN DE LOS PROCESADORES DE ALTAS PRESTACIONES. 7. Programación

de la familia TMS320C3x. 8. Programación de la familia TMS320C6000.

PARTE 4. ENTORNOS DE DESARROLLO Y APLICACIONES. 9. Entorno de desarrollo DSK3x. 10.

Entorno de desarrollo del TMS320C6000. Índice.

Bibliografia

EBOOK-PROCESADORES DIGITALES DE SE|AL ALTAS PRESTACIONES

Federico José Barrero García. Universidad de Sevilla. Sergio Luis Toral Marín. Universidad de

Sevilla. Mariano Ruiz González. Universidad Politécnica de Madrid.

SBN: 8448173503

EAN: 9788448173500