Este documento resume los conceptos clave del paralelismo a nivel de instrucción. Explica la segmentación de procesadores en etapas múltiples para ejecutar instrucciones de forma concurrente. También describe técnicas para explotar el paralelismo como la predicción de saltos y la emisión múltiple. Finalmente, introduce el concepto de paralelismo a nivel de hilo.
2. Paralelismo A Nivel De Instrucción
I
Introducción al paralelismo a nivel
de instrucción:
Introduce el concepto de
arquitectura segmentada,
presentando como caso practicó
el diseño de un procesador
básico de cinco Etapas. También
introduce el concepto de riesgo
y realiza una clasificación de los
distintos tipos. Así mismo,
presenta el concepto de
operación multiciclo.
Explotación del paralelismo a nivel
de instrucción:
Presenta diversos aspectos de la
explotación de las arquitectura
segmentadas como la planificación y des
enrollamiento de bucles.
También presta especial atención a las
técnicas de predicción de saltos. Otros
aspectos a los que se prestan atención son
las técnicas de emisión múltiple y las
limitaciones del paralelismo a nivel de
instrucción. Finalmente se Introduce el
concepto de paralelismo a nivel del hilo.
Este modulo esta estructurado en dos Lecciones:
3. Introducción al paralelismo a nivel de Instrucción:
Esta lección tiene la siguiente estructura General:
Introducción a la segmentación:
La segmentación (pipelining) es una técnica de
implementación que se basa en dividir la ejecución de
cada instrucción en varias etapas. Esta técnica no
afecta (o afecta mínimamente) a la latencia de
cada instrucción, pero permite incrementar el puesto
que permite analizar (idealmente) una instrucción por
ciclo.
En el material puede observar los detalles de diseño
de un procesador segmentado simplificado de 5
etapas:
1.
1.Captación (Instrucción Fetch IF).
Lectura de instrucción y
actualización del registro contador
de programa
2.Decodificación (Instruction
Decode, ID). Decodi,cación de la
instrucción, lectura de registros,
extensión de signo de
desplazamientos y cálculo de
posible dirección de salto.
4.Memoria
(Memoria, M).
Lectura o escritura
en memoria
Post-escritura (Write-back,
WB). Escritura de resultado
en el banco de registros.
3.Ejecución (Execution ,EX).
Operación de ALU sobre
registros y cálculo de
dirección efectiva de salto
4. Riesgos a nivel
de Instrucción :
Riesgo es una situación que impide que la siguiente instrucción
pueda comenzar en el ciclo de
reloj previsto. Estas situaciones reducen el rendimiento de las
arquitecturas segmentadas. Los riesgos
pueden ser de tres tipos: estructurales, de datos o de control.
La aproximación más simple y menos consiste en detener el de
instrucciones hasta que se elimina el riesgo.
Los riesgos estructurales se producen cuando el hardware no
puede soportar todas las posibles
secuencias de instrucciones. Esto se produce si dos etapas
necesitan hacer uso del mismo recurso hardware.
Las razones suelen ser la presencia de unidades funcionales
que no están totalmente segmentadas
o unidades funcionales no duplicadas. En general, los riesgos
estructurales se pueden evitar en el diseño
pero encarecen el hardware resultante.
Operaciones
multiciclos:
La asignación de un único ciclo a
las operaciones de coma requiere
un ciclo de reloj extremadamente
largo o el uso de una lógica de
coma muy compleja (con el
consiguiente consumo de
recursos). La alternativa a estas
opciones es la segmentación de la
unidad de coma por lo que estas
instrucciones requerirán múltiples
ciclos en la etapa de ejecución.
Explotación
del
paralelismo a
nivel de
instrucción
1. Técnicas de
compilación e ILP.
2. Técnicas avanzadas
de predicción de salto.
3. Introducción a la
planificación dinámica.
4. Especulación.
5. Técnicas de emisión
múltiple.
6. Límites del ILP.
7. Paralelismo a nivel de
hilo.
5. Paralelismo de datos
Es un paradigma de la programación
concurrente que consiste en subdividir el conjunto de
datos de entrada a un programa, de manera que a
cada procesador le corresponda un subconjunto de
esos datos. Cada procesador efectuará la misma
secuencia de operaciones que los otros procesadores
sobre su subconjunto de datos asignado. En
resumen: se distribuyen los datos y se replican las
tareas.
Idealmente, esta ejecución simultánea de
operaciones, resulta en una aceleración neta global
del cómputo.
El paralelismo de datos es un paradigma
suficientemente adecuado para operaciones sobre
vectores y matrices, dado que muchas de ellas
consisten en aplicar la misma operación sobre cada
uno de sus elementos.
Multimedia “publicitario”. Más correcto:
Arquitecturas SIMD (Single Instrucción Múltiple
Data) o de paralelismo de datos DLP (Data Leve
Paralelismo) en lugar de ILP. Vectores/Matrices
igual operación sobre múltiples elementos
Código científico y multimedia (procesamiento
imágenes, sonido, etc.)
Introducción: Aplicaciones
científicas y multimedia
Arquitecturas vectoriales
segmentadas clásicas
Hacen Años 70 Arquitecturas Vectoriales
(supercomputadores, Ej: CRAY). • Sólo existían
programas de Problemas científico-técnicos
Procesador Vectorial: Registros e Instrucciones
Vectoriales o Múltiples datos por registros (ej.
256 doublés: 2KB cada registro!!! ) o
instrucciones que operan sobre registros
completos. Ingeniosas cadenas (pipeline) para
operar con elemento de registro vectorial Tb
existían operaciones entre vectoriales y
escalares Tb registros especiales de control del
número de elemento (iteraciones) Ej. DAXPY en
ensamblador vectorial: LDV VX,(RX) LDV VY,(RY)
MULDV VX,VA,VX //previamente se replicó la
cte ‘a’ en VA ADDDV VX,VX,VY SDV (RY),VX
6. Taxonomía de Flynn
En 1966 Michael Flynn
propuso un mecanismo de
clasificación de las
computadoras. El método de
Flynn se basa en el número de
instrucciones y de la secuencia
de datos que la computadora
utiliza para procesar
información. Puede haber
secuencias de instrucciones
sencillas o múltiples y
secuencias de datos sencillas o
múltiples. Esto da lugar a 4
tipos de computadoras, de las
cuales solamente dos son
aplicables a las computadoras
paralelas. Esquema de la
Taxonomía de Flynn
Michael Flynn
Una instrucción, un
dato (SISD)
En computación, SISD (del inglés
Single Instrucción, Single Data, en
español: "una instrucción, un dato")
es un término que se refiere a una
arquitectura computacional en la que
un único procesador ejecuta un sólo
flujo de instrucciones, para operar
sobre datos almacenados en una
única memoria. Se corresponde con la
arquitectura de Von Neumann.
Según Michael J. Flynn, SISD puede
tener características del
procesamiento concurrente. La carga
de instrucciones y la ejecución
segmentada de instrucciones son
ejemplos comunes encontrados en las
computadoras SISD más modernas.
Características
*.La CPU procesa
únicamente una
instrucción por cada ciclo
de reloj
*.Únicamente un dato es
procesado en cada ciclo de
reloj
*.Es el modelo más
antiguo de computadora y
el más extendido
7. Múltiples instrucciones, un dato
(MISD):
Es una técnica empleada para
conseguir paralelismo a nivel de
datos.
Los repertorios SIMD consisten en
instrucciones que aplican una misma
operación sobre un conjunto más o
menos grande de datos. Es una
organización en donde una única
unidad de control común despacha
las instrucciones a diferentes
unidades de procesamiento. Todas
éstas reciben la misma instrucción,
pero operan sobre diferentes
conjuntos de datos. Es decir, la
misma instrucción es ejecutada de
manera sincronizada por todas las
unidades de procesamiento.
Características del modelo SIMD:
*.Todas las unidades ejecutan la misma
instrucción.
*.Cada unidad procesa un dato distinto.
*.Todas las unidades operan
simultáneamente.
Múltiples instrucciones,
múltiples datos (MIMD):
Es una técnica empleada para lograr paralelismo. Las
máquinas que usan MIMD tienen un número de
procesadores que funcionan de manera asíncrona e
independiente. En cualquier momento, cualquier
procesador puede ejecutar diferentes instrucciones sobre
distintos datos. La arquitectura MIMD pueden utilizarse en
una amplia gama de aplicaciones como el diseño asistido,
simulación, modelado y en interruptores. Las
computadoras MIMD pueden categorizarse por tener
memoria compartida o distribuida, clasificación que se
basa en cómo el procesador MIMD accede a la memoria.
La memoria compartida de las máquinas puede estar
basada en buses, extensiones, o de tipo jerárquico. Las
máquinas con memoria distribuida pueden tener
esquemas de interconexión en hipercubo o malla
8. Arquitectura de Memoria de
computación Paralela
La computación paralela es una forma de cómputo en la que muchas instrucciones se ejecutan simultáneamente, 1
operando sobre el principio de que problemas grandes, a menudo se pueden dividir en unos más pequeños, que luego
son resueltos simultáneamente (en paralelo). Hay varias formas diferentes de computación paralela: paralelismo a nivel
de bit, paralelismo a nivel de instrucción, paralelismo de datos y paralelismo de tareas. El paralelismo se ha empleado
durante muchos años, sobre todo en la computación de altas prestaciones, pero el interés en ella ha crecido
últimamente debido a las limitaciones físicas que impiden el aumento de la frecuencia. 12Como el consumo de energía y
por consiguiente la generación de calor de las computadoras constituye una preocupación en los últimos años. 23 la
computación en paralelo se ha convertido en el paradigma dominante en la arquitectura de computadores,
principalmente en forma de procesadores multinúcleo.n. 34
Un gabinete de Blue Gene/L,
clasificado como el cuarto mejor
superordenador del mundo de
acuerdo a la clasificación
TOP500 en 11/2008. Blue Gene/L
es un procesador masivamente
paralelo.
Lenguajes de programación en paralelo
Los lenguajes de programación concurrentes, bibliotecas, APIs y modelos de programación paralela han sido creados
para la programación de computadores paralelos. Estos generalmente se pueden dividir en clases basadas en las
suposiciones que se hacen sobre la arquitectura de memoria subyacente: compartida, distribuida, o compartida-
distribuida. Los lenguajes de programación de memoria compartida se comunican mediante la manipulación de
variables en la memoria compartida. En la arquitectura con memoria distribuida se utiliza el paso de mensajes. POSIX
Threads y OpenMP son dos de las API más utilizadas con la memoria compartida, mientras que Message Passing
Interface (MPI) «Interfaz de Paso de Mensajes» es el API más utilizado en los sistemas de paso de mensajes.n. 639 El
concepto «valor futuro» es muy utilizado en la programación de programas paralelos, donde una parte de un programa
promete proporcionar un dato requerido a otra parte del programa en un tiempo futuro.
10. Línea de Tiempo del
Procesador Intel o AMD:
A CONTINUACIÓN SE
MUESTRAN LOS
PROCESADORES MAS
COMUNES DE INTEL Y
AMD
AMD Sempron-2004
AMD Athlon 64- 2006
AMD ATHLON 64- 2008
es el nombre de una línea
de microprocesadores
x86 y x86-64 de Intel,
anteriormente
denominados. Están
diseñados para un
proceso de fabricación de
45 nm CMOS y
destinados a utilizarse en
dispositivos móviles de
Internet
AMD DURON SPITFIRE-
200