Introducción

Anuncio
Tema 2. Arquitectura de CPU avanzadas
15/03/2011
Tema 2. Arquitectura de CPU avanzadas. Juegos CISC y RISC. Proceso
paralelo. Procesadores escalares y vectoriales. Segmentación. Caches
multinivel.
Índice
Introducción.....................................................................................................................1
Procesadores CISC y RISC..............................................................................................2
Proceso paralelo...............................................................................................................4
Clasificación de Flynn de los sistemas paralelos.......................................................5
Proceso paralelo con multiprocesadores...................................................................5
Segmentación - PipeLine.................................................................................................6
Procesadores escalares y vectoriales...............................................................................8
Procesadores superescalares............................................................................................9
Memoria caché multi-nivel............................................................................................10
Niveles de caches........................................................................................................10
Cache unificad contra cache partida.......................................................................11
Introducción
Desde la creación de los ordenadores, las prestaciones de los procesadores no han
dejado de aumentar sin parar. Este rápido crecimiento ha sido debido a dos factores:
• Los avances en la tecnología utilizada en la construcción del ordenador, y
• Las innovaciones en el diseño de los mismos.
Los avances tecnológicos han permitido disminuir los tiempos de conmutación de los
transistores a base de hacerlos cada vez más pequeños e integrarlos en menor espacio.
Por lo que los circuitos integrados que forman el ordenador pueden trabajar a mayor
velocidad y aumenta el rendimiento del ordenador.
Otro camino para obtener mejores prestaciones es modificar la organización interna del
ordenador, es decir, su diseño. Gran parte de las mejoras obtenidas es gracias al uso del
paralelismo, el aumento de los niveles de jerarquía de la memoria del ordenador
añadiendo más niveles de memoria entre el procesador y la memoria principal y
cambios en el diseño de los procesadores.
Página 1 de 11
Tema 2. Arquitectura de CPU avanzadas
15/03/2011
Procesadores CISC y RISC
En el diseño de procesadores hay dos tendencias enfrentadas, diseñar ordenadores que
ejecutan un conjunto de instrucciones complejas -CISC, Complex Instruction Set
Computers- o lo contrario, ordenadores con un juego de instrucciones simple y reducido
-RISC Reduced Instruction Set Computer-.
La tendencia histórica era diseñar procesadores cada vez más complejos y potentes, que
pudieran ejecutar muchas instrucciones diferentes, con muchos operandos y muchos
modos de direccionamiento. El objetivo de estos juegos de instrucciones complejos era:
•
Facilitar el desarrollo de compiladores eficientes
•
Mejorar la eficiencia de la ejecución, pues las instrucciones complejas se
podían implementar por microcódigo.
•
Dar soporte a lenguajes de alto nivel más sotisficados.
•
Permitir la compatibilidad entre familias de mainframes de un mismo
fabricante (Años 60 y 70)
Los procesadores CISC se caracterizan por:
•
Necesitar varios ciclos de reloj para ejecutar una instrucción
•
Instrucciones Memoria-Memoria de tamaño variable
•
Un gran numero de instrucciones disponibles.
•
Tener una arquitectura compleja
IBM, tras analizar y estudiar programas reales compilados, se dio cuenta que la mayoría
de las instrucciones de un programa son sencillas (asignaciones, operaciones aritméticas
básicas...) por lo que propusieron una arquitectura de procesador sencilla con muchos
registros de propósito general. Los ordenadores RISC, que ejecutara eficientemente las
instrucciones sencillas que son las más habituales, y las complejas las descompusiera el
compilador en operaciones más sencillas. La finalidad es tener instrucciones fácilmente
segmentables.
Las características de los RISC son:
•
Un conjunto de instrucciones disponibles reducido y de la misma longitud.
•
Instrucciones sencillas del tipo registro-registro o memoria-registro
•
Instrucciones de acceso a memoria especiales (LOAD / STORE). Esto facilita
un tratamiento específico de estas instrucciones por parte de la arquitectura y los
compiladores.
•
Instrucciones fácilmente segmentables, por lo que se consigue finalizar una
instrucción por ciclo de CPU.
•
Procesadores más sencillos, con unidades de control cableadas. Son más baratos
de diseñar y fabricar. La descodificación de la instrucción es más rápida.
El objetivo del diseño RISC es conseguir finalizar la ejecución de una instrucción cada
ciclo de reloj.
Página 2 de 11
Tema 2. Arquitectura de CPU avanzadas
15/03/2011
Ej: Diferencias entre una instrucción RISC y CISC:
CISC
RISC
Add @100, @200, @300
Load @100, R1
Load @200,R2
Add R2, R1
Store R1, @300
No existe ningún estudio definitivo que demuestre la superioridad de los RISC frente a
los CISC. Aunque es una realidad que la mayoría de los procesadores de los nuevos
diseños son RISC o híbridos que incorporan características de RISC y CISC.
Página 3 de 11
Tema 2. Arquitectura de CPU avanzadas
15/03/2011
Proceso paralelo
El procesamiento paralelo se basa en procesar varias operaciones de forma simultánea
en el mismo ordenador. El paralelismo se puede aplicar en varios niveles:
• Paralelismo funcional. Consiste en tener en el procesador varias unidades de
ejecución para poder ejecutar varias operaciones independientes de forma
paralela. Tener varias unidades funcionales aumenta la complejidad del
hardware, y su coste. Además surgen problemas como las dependencias entre
instrucciones. Los procesadores superescalares entran dentro de este grupo.
•
Segmentación. La segmentación aprovecha que la ejecución de una instrucción
pasa por varias fases, para crear unidades físicas independientes para cada fase.
De esta forma en la misma unidad de ejecución se pueden tener varias
instrucciones ejecutándose de forma simultánea pero en fases diferentes.
•
Procesamiento en Array. Consiste en tener varias unidades de ejecución bajo
la supervisión de una misma unidad de control. De esta forma se puede ejecutar
de forma paralela la misma función con datos diferentes. No confundir con los
procesadores vectoriales, que se basan en la segmentación.
•
Multiprocesamiento. Consiste en tener en una misma máquina varios
procesadores. Cada procesador ejecuta un proceso (programa independiente) de
forma paralela.
•
Sistemas multitarea, existe un conjunto de procesos cargados en memoria,
preparados para ejecutarse. En un sistema monoprocesador, sólo puede haber un
proceso en ejecución en el procesador, y cuando éste efectúa una operación E/S,
deja de ejecutarse en espera de que termine la operación de E/S y se ejecuta otro
proceso. De esta forma, puede haber simultáneamente un proceso ejecutado por
el procesador y varias tareas de E/S de procesos diferentes en los periféricos de
E/S.
Un concepto relacionado con el nivel de paralelismo es el de granularidad de las tareas
paralelas.
 Un sistema con granularidad gruesa es aquel en que las operaciones que se
ejecutan en paralelo son bastante gruesas, del orden de programas enteros.

Un sistema con granularidad fina divide los programas en pequeñas partes, en
algunos casos compuestas por unes pocas instrucciones.
El paralelismo a nivel de multiprocesamiento es de granulidad gruesa, en cambio el
paralelismo dentro de un procesador superescalar es de granularidad fina.
Página 4 de 11
Tema 2. Arquitectura de CPU avanzadas
15/03/2011
Clasificación de Flynn de los sistemas paralelos
Es una de las clasificaciones más famosas de los sistemas paralelos. Esta clasificación
esta basada en la noción de flujos de información. Dos tipos de información entran en
un procesador: datos e instrucciones. Conceptualmente, los dos flujos son
independientes, aunque se almacenen juntos y se transmitan por los mismos canales.
Flynn clasifica los ordenadores según tengan uno o más flujos. Esta clasificación da
cuatro tipos de sistemas informáticos:
•
SISD (Single Instruction stream, Single Data Stream). Las máquinas
convencionales monoprocesador son clasificadas como sistemas SISD.
•
SIMD (Single Instruction stream, Multiple Data Stream). Son máquinas que
tienen una unidad de control y varias unidades de ejecución, que suelen tener su
propia memoria. La unidad de ejecución carga y decodifica las instrucciones y
envía las señales de control a todas la unidades de ejecución para que ejecuten la
misma operación, aunque cada una con datos de su memoria.
•
MISD (Multiple Instruction stream, Single Data Stream). Estas máquinas
ejecutan diferentes operaciones de forma simultánea sobre los mismos datos.
Estás máquinas solo existen de forma experimental a no tener utilidad práctica.
•
MIMD (Multiple Instruction stream, Multiple Data Stream). Esta es la
clasificación incluye sistemas informáticos de los más heterogéneos. Incluye
todos los sistemas multiporcesador. Que explicaré a continuación.
Proceso paralelo con multiprocesadores
Uno de los métodos para mejorar el rendimiento de un ordenador es aumentar el
número de procesadores de propósito general del sistema. Los sistemas de
multiprocesadores se pueden dividir en:
• Sistema fuertemente acoplados. Son los ordenadores donde los procesadores
comparten una memoria común, los procesadores acceden a datos y programas
comunes, y se comunican a través de la memoria. Estos sistemas a su vez se
pueden subdividir en:
 Multiprocesadores simétricos (SMP). Los procesadores comparten una
misma memoria común y dispositivos de E/S y el tiempo de acceso a
memoria es aproximadamente el mismo para todos los procesadores.
Todos los procesadores pueden realizar las mismas funciones, de hay lo
de simétricos y están gobernados por un SO común. Los SMP tienen las
siguientes ventajas potenciales respecto los monoprocesadores:
o Prestaciones. Si un trabajo se puede dividir en partes que se
pueden realizar en paralelo, un sistema SMP proporcionará
mejores prestaciones.
o Disponibilidad: Como todos los procesadores pueden realizar las
mismas funciones, un fallo de procesador no hará que el
computador se detenga.
o Escalado: Se puede incrementar la potencia del sistema
añadiendo más procesadores.
Página 5 de 11
Tema 2. Arquitectura de CPU avanzadas
15/03/2011
El acceso a memoria puede ser a través de un bus común, este sistema
de acceso es el más simple, pero el bus se puede convertir un cuello de
botella que reduzca las prestaciones del sistema. Para solucionarlo, estos
sistemas se utilizan sistemas de caché multinivel. Otro sistema para
acceder a memoria es utilizar sistema de memoria multipuerto que
permite el acceso directo e independiente a los módulos de memoria por
parte de los procesadores y dispositivos. Este método consigue
prestaciones mejores pero obliga a tener memorias más complejas con
mucho más lógica para controlar los accesos concurrentes a los mismos
datos, por lo que es más cara.
 Sistemas NUMA (Non Uniforme Memory Access): Son sistemas donde
el tiempo de acceso a la memoria no es uniforme para todos las
direcciones de memoria. Los procesadores acceden más rápido a los
módulos de memoria que tienen más cercanos. La ubicación de los datos
en un módulo u otro afecta directamente al rendimiento de los procesos.
•
Sistemas débilmente acoplados: Sistemas de memoria distribuida. Son
sistemas donde existe una unidad de control y varias unidades de ejecución con
su memoria dedicada. Estos sistemas no se utilizan dado el alto ratio
coste/prestaciones. Una evolución de estos sistemas que si que tienen una buena
cuota de mercado son los clusters.
Existen también los procesadores multi-núcleo, en los cuales se combina dos o más
núcleos (Unidad de control y unidades de ejecución) independientes en un solo paquete,
a menudo un solo circuito integrado.
Actúan como si cada núcleo fuera un procesador independiente, aunque tienen la
limitación de usar el mismo acceso a la memoria principal. Los sistemas de procesador
multinúcleo tienen menor rendimiento que un sistema de varios procesadores
independientes, aunque se usan porque su coste es menor.
Segmentación - PipeLine
Aprovecha que la ejecución de una instrucción pasa por varias fases, para crear
unidades físicas independientes para cada fase. El ciclo de una instrucción se puede
dividir, por ejemplo, en carga de la instrucción, decodificación, carga de los operandos,
ejecución de la operación y guardar los resultados.
De esta forma en la misma unidad de ejecución se pueden tener varias instrucciones
ejecutándose de forma simultánea pero en fases diferentes del ciclo de instrucción. El
número de instrucciones simultaneas ejecutándose puede ser como máximo el número
de etapas del pipe-line.
Instrucción 1
Fetch
Instrucción 2
Decode
Instrucción 3
Fetch
operandos
El pipeline se sincroniza con el reloj del procesador. La división por etapas debe hacerse
de forma que todas las etapas tarden un tiempo similar, pues el ciclo del procesador
dependerá del tiempo que tarda la etapa más lenta. Los principios de segmentación
Página 6 de 11
Tema 2. Arquitectura de CPU avanzadas
15/03/2011
también se aplican a las ALU para poder tener operaciones segmentadas y tener una
pipe-line con más etapas y un ciclo de CPU menor.
La segmentación no mejora la velocidad de ejecución individual de una instrucción,
sino que la empeora, pero mejora la velocidad de ejecución global del procesador. Un
procesador en ejecución durante un tiempo, termina la ejecución de una instrucción casi
cada ciclo.
Un problema para la segmentación es el acceso a memoria, que suele ser mucho más
lento que una fase del pipeline. Por ello, los procesadores segmentados son usados en
procesadores con muchos registros en el procesador, para evitar tener que acceder
constantemente a memoria.
Dependencias
Los problemas que tiene la segmentación, que reducen el rendimiento del procesador
son las dependencias entre instrucciones. Ocurre cuando dos instrucciones compiten por
un mismo recurso, generalmente un registro. Por ejemplo:
I:
R1 = R2 + R3
I + 1: R4 = R1 + R5
La segunda instrucción utiliza como operando el resultado de la primera, por lo que
tendrá que esperar a que finalice. Esto provoca que se pierdan ciclos de CPU. Estos
ciclos perdidos se conocen como “burbujas”.
Además de las dependencias de datos, existe la dependencia de control, que se produce
por instrucciones de salto. El pipeline comienza a ejecutar instrucciones, que luego por
un salto, se tienen que descartar, provocando la perdida de ciclos de CPU.
Existen técnicas para reducir el número de ciclos perdidos, pero no se pueden reducir a
cero.
Para reducir los problemas de las dependencias de control el procesador realice un
“predicción de salto”, para hacer efectivo el salto o no, según sea lo más probable.
Para reducir las dependencias de datos hay básicamente dos soluciones:
•
Reordenación de código por parte de un compilador. A la hora de generar el
código máquina, el compilador organiza el código de forma que se reducen la
perdida de ciclos, manteniendo la misma funcionalidad del algoritmo.
•
Uso de hardware especializado, capaz de detectar las dependencias y activar
los ‘adelantamientos’ o ‘atajo’. Un adelantamiento es una conexión entre dos
fases de una pipeline para un dato recién calculado puede ser utilizado por otra
instrucción sin esperar que la otra instrucción finalice.
Por ejemplo, establecer una conexión entre el registro acumulador de la ALU y
las entradas de la misma ALU, para poder aprovechar utilizar el resultado de una
operación como operando en el siguiente ciclo.
Página 7 de 11
Tema 2. Arquitectura de CPU avanzadas
15/03/2011
Procesadores escalares y vectoriales
Los procesadores escalares son los diseñados para realizar cálculos con operandos
atómicos. Por ejemplo una instrucción escalar sería suma 3 + 2, donde el 3 y el 2 son
valores atómicos. Los procesadores escalares son de propósito general pues sirven para
realizar cualquier cálculo, pues las operaciones con valores no escalares se pueden
descomponer en operaciones con valores escalares.
Los procesadores escalares tienen un bajo rendimiento para ciertos tipos de problemas
matemáticos y de ingeniería donde los problemas se resuelven con operaciones
matriciales y vectoriales. Por ejemplo para multiplicar un vector de 64 elementos por un
escalar, un procesador escalar deberá hacer 64 operaciones dentro de un bucle.
Claramente se observa que esta operación se puede realizar de forma paralela para cada
uno de los elementos del vector. Un procesador vectorial podría realizar la operación
sobre los vectores en una sola instrucción sin necesidad de bucles.
Ventajas del procesamiento vectorial:
• Permiten una gran segmentación pues los cálculos con cada elementos del
vector suelen ser independientes.
•
Cada instrucción vectorial equivale a un bucle, con los procesadores vectorial se
evita tener que controlar el bucle.
•
Las instrucciones vectorial que acceden a memoria tienen un patrón de acceso
predecible. Se puede organizar los datos en memoria entrelazadas para obtener
un buen rendimiento de acceso a los datos.
Características específicas de los máquinas vectoriales.
•
Instrucciones especiales para operar vectores, incluidas dentro del juego de
instrucciones del procesador.
•
Registros separados para vectores y para escalares. Los procesadores vectoriales
suelen tener un registro especial para indicar el número de elementos que
componen el vector.
•
Ejecución de las operaciones a través de segmentación, no hay varias unidades
de ejecución paralelas.
•
Necesidad de sistemas de memoria con un gran ancho de banda.
Clasificación de los procesadores vectoriales
En las operaciones vectoriales la CPU deben ser capaz de leer dos operandos y guardar
un resultado en cada ciclo de reloj. Las memorias convencionales no pueden soportar
este ancho de banda, pues sólo pueden realizar una operación por ciclo.
Por ello, las máquinas vectoriales tienen sistemas de memoria más complejos, que
sirven para clasificarlos:
•
Arquitecturas vectoriales memoria-memoria: Los operandos para las
instrucciones se cargan directamente de la memoria principal. Utilizan memorias
multipuerto para soportar el acceso concurrente a datos. Los sistemas de
memoria con acceso concurrente a varios datos son muy costosos.
Página 8 de 11
Tema 2. Arquitectura de CPU avanzadas
•
15/03/2011
Arquitecturas vectoriales con registros: Los operandos son cargados
previamente sobre un conjunto de registros vectoriales, cada uno de los cuales
puede almacenar una parte del vector, por ejemplo 64 elementos. Las
operaciones se realizan cogiendo los elementos del registro vectorial y
almacenándolos en otro registro vectorial.
La ventaja de las arquitecturas memoria-memoria es que pueden operar con vectores
de cualquier tamaño. En cambio las arquitecturas registro-registro deben dividir el
vector en fragmentos que quepan en los vectores. La arquitectura reg-reg tiene un
mejor rendimiento cuando se realizan múltiples usos de los operandos transferidos a
los registros.
Procesadores superescalares
Son procesadores escalares capaces de ejecutar varias instrucciones secuenciales de
forma simultánea en cada ciclo. Para ello, el procesador dispone de varias unidades de
ejecución independientes. Cada unidad de ejecución tiene su propia unidad de control y
existe una UC principal que las coordina.
Al procesador se le añade una unidad de recogida de instrucciones, que lee varias
instrucciones de un proceso y las analiza para detectar las dependencias entre ellas.
Reordena las instrucciones de forma que se reduzcan las dependencias y poder
ejecutarlas de forma simultánea. A la hora de almacenar los resultados de las
operaciones, se vuelven a la orden inicial del programa.
Para reducir las dependencias de datos entre instrucciones en unidades de ejecución
independiente, se aplican técnicas como el renombre de registros.
En la mayoría de sistemas, la arquitectura de alto nivel, como el juego de instrucciones,
no se ha modificado desde los diseños escalares anteriores. Sencillamente, los diseños
superescalares aprovechan el paralelismo a nivel de instrucción para mejorar el
rendimiento de estas arquitecturas. Ejemplo: La arquitectura X86.
Página 9 de 11
Tema 2. Arquitectura de CPU avanzadas
15/03/2011
Memoria caché multi-nivel
La memoria cache se sitúa entre el microprocesador y la memoria principal. Se utiliza
para almacenar una copia de los datos de la principal que se utilizan frecuentemente.
Esta memoria permite agilizar el trabajo del microprocesador pues trabaja casi a su
misma velocidad. Es una memoria que es invisible a los programas que se ejecutan.
Cuando se introdujeron originalmente las caches, un sistema normalmente sólo tenía
una caché. Más recientemente, se ha convertido en una norma el uso de múltiples
caches. Hay dos aspectos de diseño relacionados con este tema, que son: el número de
niveles de caché y el uso de caché unificada frente a partida.
Niveles de caches
Con el aumento de la densidad de integración, ha sido posible tener una caché en el
mismo chip del procesador: caché “on-chip”, además de la caché exterior “off-chip”. La
caché on-chip reduce la actividad del bus externo del procesador (que conecta e
procesador con la caché externa) por lo que reduce los tiempos de acceso y aumenta las
prestaciones del sistema. El tiempo de acceso a datos internos del procesador es muy
corto en comparación que los accesos a caches “off-chip” y además deja el bus libre
para realizar otras operaciones.
La inclusión de una caché “on-chip” deja abierta la cuestión si es deseable tener una
caché externa. La respuesta es afirmativa, por el principio de localidad temporal y
espacial de las referencias a memoria de los programas durante su ejecución. Por ello,
los diseños actuales incorporan ambas cachés.
La estructura resultante se denomina caché dos niveles, el nivel 1 (L1) es la caché
interna y la externa el nivel 2 (L2). La memoria de nivel 1 es de menor capacidad que la
de nivel 2. El funcionamiento de las memorias caché multinivel es similar que la de un
solo nivel. Cuando el procesador accede a una palabra de memoria, si esta en caché L1
accede a esa memoria, sino la caché L1 lo solita a la caché L2, si esta tampoco lo tiene
solicita el bloque de memoria con la palabra a la memoria principal.
En los sistemas con varios procesadores, la memoria de nivel L2 puede estar compartida
o puede aparecer un nivel más de caché L3. Las cachés con post-escritura en sistema
con varios procesadores pueden provocar problemas de coherencia de datos, un
procesador modifica un dato en su memoria cache de nivel 1 y al ser un sistema postescritura, otro procesador que lea el dato de la memoria principal obtendrá un dato
erróneo. Los problemas de coherencia se solucionan con el protocolo MESI.
Página 10 de 11
Tema 2. Arquitectura de CPU avanzadas
15/03/2011
Cache unificad contra cache partida
En los primeros diseños de caches multinivel, la cache de nivel 1 contiene tanto las
referencias a datos como instrucciones. Más recientemente se hecho normal separar los
datos y las instrucciones en dos caches separadas. La cache unificada tiene varias
ventajas potenciales:
•
Para un mismo tamaño de memoria, una cache unificada tiene más tasa de
aciertos que una divida, ya que nivela automáticamente la carga entre la
captación de instrucciones y datos. Es decir, si un patrón de acceso solicita
muchos más datos que instrucciones en la caché unificada se reservará más
espacio para datos, cosa que en una dividida no se puede.
•
Sólo se necesita diseñar e implementar una caché, por lo que es más barato.
La caché dividida se utiliza porque los procesadores actuales son superescalares con
ejecución segmentada de instrucciones. Un procesador superescalar llena un buffer con
las instrucciones que va ejecutar y las reordena y a la vez las unidades de ejecución
solicitan datos. Si se tiene un caché unificada, puede que en un momento dado puede
que se solicitud de instrucciones para ejecutar deba esperar porque la caché está
atendiendo una solicitud de datos. Esta disputa por la caché degrada el rendimiento del
procesador, para evitarlo se tienen caches divididas.
Página 11 de 11
Descargar