La evolución de la computadora. Ing. Obadiah

Anuncio
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.
ENTRADAS
Y
UNIDAD CENTRAL
DE PROCESO
UNIDAD DE
MEMORIA
SALIDAS
UNIDAD
UNIDAD
ARITMÉTICODE
LÓGICA
CONTROL
INSTRUCCIONES
BUSES DE
COMUNICACIÓN
+
CAMINO
DE
DATOS
DATOS
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.
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.
UNIDAD CENTRAL
DE PROCESO
MEMORIA DE
PROGRAMA
BUS DE
DIRECCIONES
INSTRUCCIONES
32 bits
BUS DE
INSTRUCCIONES
UNIDAD
UNIDAD
ARITM
DE
CONTROL
CAMINO
DE
DATOS
BUS DE
DIRECCIONES
DATOS
8 bits
BUS DE
DATOS
ENTRADAS
Y
Figura 1.11. Arquitectura Harvard.
SALIDAS
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.
Figura 1.11. Arquitectura actuales Pentium.
CPU
UNIDAD DE
CONTROL
MEMORIA PRINCIPAL
CACHÉ
DATOS
CACHÉ
CAMINO DE
DATOS
INSTRUCCIONES
DATOS
+
1.4- INFLUENCIA DE LA TECNOLOGÍA EN LA EVOLUCIÓN
INSTRUCCIONES 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
UNIDAD CENTRAL DE PROCESO
UNIDAD DE MEMORIA
INSTRUCCIONES
UNIDAD DE
INSTRUCCIONES
CONTROL
DATOS
+
CAMINO
DE DATOS
DATOS
MÓDULO DE E / S
Figura 1.12. Diagrama general por bloques de los computadores de la primera etapa.
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).
UNIDAD CENTRAL DE PROCESO
UNIDAD DE MEMORIA
INSTRUCCIONES
UNIDAD DE
CONTROL
INSTRUCCIONES
+
SECUENCIADOR
CAMINO
DE DATOS
DATOS
DATOS
MÓDULO DE E / S
Figura 1.13. Diagrama general por bloques de la segunda etapa.
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.
UNIDAD CENTRAL DE PROCESO
UNIDAD DE MEMORIA
INSTRUCCIONES
UNIDAD DE
CONTROL
INSTRUCCIONES
MEMORIA
CACHÉ
INSTRUCCIONES
+
UNIDAD DE
MEMORIA
CAMINO DE
DATOS
DATOS
MODULO DE E / S
DATOS
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.
UNIDAD DE MEMORIA
UNIDAD CENTRAL DE PROCESO
MEMORIA
CACHÉ
UNIDAD DE
INSTRUCCIONES
INSTRUCCIONES
INSTRUCCIONES
INSTRUCCIONES
+
CONTROL
DATOS
DATOS
UNIDAD
ARITMÉTICO-LOGICA
+
DATOS
DATOS
MODULO DE E / S
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.
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.
UNIDAD DE
MEMORIA
FLUJO DE
FLUJO DE
INSTRUCCIONES
PROCESO
UNIDAD DE
CONTROL
DATOS
FLUJO DE
INSTRUCCIONES
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
INSTRUCCIONES
1
MEMORIA 1
UNIDAD
DE
CONTROL
1
MEMORIA 2
FLUJO
INSTRUCCIONES
2
UNIDAD
DE
CONTROL
2
FLUJO
INSTRUCCIONES
n
MEMORIA n
UNIDAD
DE
CONTROL
n
FLUJO DE DATOS
FLUJO
INSTRUCCIONES
1
UNIDAD
DE
PROCESO
1
FLUJO DE DATOS
FLUJO
INSTRUCCIONES
2
UNIDAD
DE
PROCESO
2
FLUJO DE DATOS
FLUJO
INSTRUCCIONES
n
UNIDAD
DE
PROCESO
UP1
n
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.
FLUJO DE
DATOS
1
MEMORIA 1
UNIDAD
DE
PROCESO
1
MEMORIA 2
FLUJO DE
DATOS
2
UNIDAD
DE
PROCESO
FLUJO
INSTRUCCIONES
UNIDAD
DE
CONTROL
2
MEMORIA n
FLUJO DE
DATOS
n
UNIDAD
DE
PROCESO
n
FLUJO DE INSTRUCCIONES
.
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
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.
UP 1
UP 2
M
5
M
5
UP 3
UP 4
M
5
UP 5
M
5
M
5
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.
FLUJO
INSTRUCCIONES
1
MEMORIA 1
UNIDAD
DE
CONTROL
FLUJO DE DATOS
1
FLUJO
INSTRUCCIONES
2
MEMORIA 2
UNIDAD
DE
CONTROL
MEMORIA n
FLUJO DE DATOS
n
.
FLUJO
INSTRUCCIONES
2
UNIDAD
DE
PROCESO
2
UNIDAD
DE
CONTROL
UNIDAD
DE
PROCESO
UP1
1
1
FLUJO DE DATOS
2
FLUJO
INSTRUCCIONES
n
FLUJO
INSTRUCCIONES
1
2
FLUJO
INSTRUCCIONES
n
n
UNIDAD
DE
PROCESO
n
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.
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
o
o
PREDICCION DE SALTOS MULTIPLES
ANALISIS DEL FLUJO DE DATOS
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 microdatos, 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 7,11 SPECint95 7,29 SPECint95 8,09 SPECint95
5,42 SPECfp95 6,21SPECfp95 6,10 SPECfp95 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 cargaalmacenamiento.
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 RISCII 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.
2.
3.
4.
5.
6.
Introducción a los microprocesadores multi núcleo.
Conceptos asociados.
Un baile de tecnologías.
1 núcleo. 2 núcleos. 4 núcleos.. Historia de la evolución.
Comparando distintos procesadores.
Conclusiones.
Jos
1 Procesadores para port_atiles - Lista de benchmarks
http://es.notebookcheck.com/Procesadores-mobiles-lista-de-benchmarksnueva.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
Descargar