Teo 2: Plataformas para programación paralela

83
Teo 2: Plataformas para programación paralela Algoritmos paralelos Glen Rodríguez

description

Teo 2: Plataformas para programación paralela. Algoritmos paralelos Glen Rodríguez. Arquitectura tradicional de una computadora secuencial. CPU + RAM conectado por un bus Los 3 elementos pueden ser cuellos de botella Mejora: múltiples elementos. Arquitecturas secuenciales mejoradas. - PowerPoint PPT Presentation

Transcript of Teo 2: Plataformas para programación paralela

Page 1: Teo 2: Plataformas para programación paralela

Teo 2: Plataformas para programación paralela

Algoritmos paralelos

Glen Rodríguez

Page 2: Teo 2: Plataformas para programación paralela

Arquitectura tradicional de una computadora secuencial

CPU + RAM conectado por un bus

Los 3 elementos pueden ser cuellos de botella

Mejora: múltiples elementos

Page 3: Teo 2: Plataformas para programación paralela

Arquitecturas secuenciales mejoradas

Si la multiplicidad de elementos es ocultada al programador: paralelismo implícito.

Cuando se puede, se debe reescribir un programa para que aproveche al máximo el paralelismo implícito, antes de paralelizar “a mano”.

Page 4: Teo 2: Plataformas para programación paralela

La Control Unit coordina todo

Page 5: Teo 2: Plataformas para programación paralela

Registros

Mini memorias (chica, permanente) dentro de la CPU, usadas para ciertos propósitos especiales

Directamente manipuladas por la CU Funcionalidad específica Tamaño en bits o bytes (no MB como la

memoria RAM, ni siquiera KB) Guardan data, direcciones o

instrucciones

Page 6: Teo 2: Plataformas para programación paralela

Registros Uso

Acceso rápido para el programa que se está ejecutando en un momento dado Guarda data necesitada de inmediato o repetidamente.

Guarda info sobre el estatus de la CPU y del programa corriendo Dirección de la siguiente instrucción del programa Señales de dispositivos externos

Registros de propósito general Registros visibles al usurio Guardan resultados intermedio o valores de datos. Ej:

contadores de un loop Varias docenas en CPUs actuales

Page 7: Teo 2: Plataformas para programación paralela

Registros de propósito especial

Program Count Register (PC) Puntero a una instrucción

Instruction Register (IR) Guarda la instrucción cargada desde memoria

Memory Address Register (MAR) Memory Data Register (MDR) Status Registers

Estatus de la CPU y del programa corriendo Flags (variable booleana de 1 bit) que hacen

seguimiento de condiciones como el carry y el overflow de operaciones aritméticas, errores de la computadora, etc.

Page 8: Teo 2: Plataformas para programación paralela

Operaciones en los registros

Guardan valores de otras localizaciones (registros y memoria)

Sumas y restas Shift (desplazar) o rotar data Contenidos de los tests condicionales

básicos (if ?=0 else …; if ?>0 …)

Page 9: Teo 2: Plataformas para programación paralela

Operación en Memoria

Cada localización en memoria tiene una dirección única

La dirección de una instrucción se copia al MAR, el cuál ubica la localización en memoria

CPU determina si la operación es grabar o leer

Se realiza la transferencia entre el MDR y la memoria

MDR es un registro que se puede leer y escribir

Page 10: Teo 2: Plataformas para programación paralela

Relación entre MAR, MDR y la Memoria

Dirección Data

Page 11: Teo 2: Plataformas para programación paralela

Ejemplo MAR-MDR

Page 12: Teo 2: Plataformas para programación paralela

Capacidad de memoria Determinada por 2 factores

1. Número of bits en el MAR 2K donde K = cantidad de bits en el registro MAR

2. Tamaño del parámetro “dirección” en las instrucciones 4 bits permite 16 lugares de memoria 8 bits permite 256 lugares 32 bits permite 4,294,967,296 ó 4 GB

Importante para la performance Memoria insuficiente puede causar que el

procesador trabaje a menos de 50% de su performance de fábrica.

Page 13: Teo 2: Plataformas para programación paralela

Ciclo Fetch-Execute Una instrucción no se puede ejecutar en un solo

ciclo de reloj, por que tiene que cargar tanto las instrucciones como la data desde memoria.

Fetch (carga) Decodificar o encontrar la instrucción, cargarla de

memoria al registro y avisar a la ALU Execute (ejecuta)

Ejecuta la operación según lo que dice la instrucción Mueve/transforma data

Page 14: Teo 2: Plataformas para programación paralela

Ciclo Fetch/Execute –carga

1. PC -> MAR Transferir la dirección del PC (contador de programa) al MAR

2. MDR -> IR Transferir la instrucción al IR

3. IR(address) -> MAR Cargar el parámetro de dirección de la instrucción al MAR

4. MDR -> A Copiar la data en el acumulador

5. PC + 1 -> PC Incrementar el PC (contador de programa)

Page 15: Teo 2: Plataformas para programación paralela

Ciclo Fetch/Execute –grabación

1. PC -> MAR Transferir la dirección del PC al MAR

2. MDR -> IR Transferir la instrucción al IR

3. IR(address) -> MAR Cargar parámetro de dirección de la instrucción en el MAR

4. A -> MDR* Copiar la data del cumulador al MDR

5. PC + 1 -> PC Incrementar contador del programa

*Note la diferencia en el paso #4

Page 16: Teo 2: Plataformas para programación paralela

Ciclo Fetch/Execute – sumar1. PC -> MAR Transferir la dirección del PC

al MAR

2. MDR -> IR Transferir la instrucción al IR

3. IR(address) -> MAR Cargar el parámetro de dirección de la instrucción al MAR

4. A + MDR -> A Contenido del MDR se suma al del acumulador

5. PC + 1 -> PC Incrementar PC

Page 17: Teo 2: Plataformas para programación paralela

Instrucciones Instrucción

Comando dado a la computadora Hace que la señal eléctrica sea enviada por ciertos

circuitos para ser procesada “Instruction set”

Su diseño define las funciones soportadas por el procesador

Diferencia las arquitecturas de computadoras por: Número de instrucciones Complejidad de operaciones ejecutadas por una instrucción Tipos de data soportados Formato (layout, longitud fija vs. variable) Uso de registros Manejo de Direcciones (tamaño, modos)

Page 18: Teo 2: Plataformas para programación paralela

Elementos de una instrucción OPCODE: tarea o comando OPERANDO(s) fuente OPERANDO resultado

Ubicación de la data (registro, memoria) Explícito: incluido en la instrucción Implícito: se asume por default

OPCODEOPERANDOfuente

OPERANDOresultado

Direcciones

Page 19: Teo 2: Plataformas para programación paralela

Formato de instrucciones

Formato dependiente del CPU que define: Longitud del OPCODE Número de operandos Longitud de los operandos

Ej.: Formato

de 32-bit

Page 20: Teo 2: Plataformas para programación paralela

Formato de instrucciones: CISC

Page 21: Teo 2: Plataformas para programación paralela

Formato de instrucciones: RISC

Page 22: Teo 2: Plataformas para programación paralela

Tipos de Instrucciones Transferir data (cargar, guardar)

Más común, más flexible Manipula memoria y registros Definición de word (palabra) ? 16? 32? 64 bits?

Aritméticas Operadores + - / * ^ Enteros y punto flotante

Logical or Boolean Operadores relacionales: > < = Operadores boolenaos AND, OR, XOR, NOR, y NOT

Operaciones de un solo operando Negar, decremento, incremento

Page 23: Teo 2: Plataformas para programación paralela

Más tipos de instrucciones

De manipulación de bits Flags para verificar condiciones

Shift (desplazar) y rotar Control del programa (saltar) Instrucciones de Stack Operaciones en data múltiple Control de I/O y de la máquina

Page 24: Teo 2: Plataformas para programación paralela

Paralelismo Implícito en las CPUs

Pipelines y ejecución superescalar: sobreponer (hacer a la vez) más de una fase del ciclo fetch-execute.

Idea similar a una linea de montaje fabril.

Ejemplo: el pentium 4 tenia un pipeline de 20 fases.

Predicción del “branch”

Page 25: Teo 2: Plataformas para programación paralela

Paralelismo en las instrucciones: pipelines

Ejemplo: lavandería comunal Ana, Beto, Carla y David

tienen cada uno una carga de ropa sucia para lavar, secar y planchar

Lavadora toma 30 minutes Secadora: 40 minutes Planchar: 20 minutes Una sola lavadora, una sola

secadora, una sola plancha

A B C D

Page 26: Teo 2: Plataformas para programación paralela

Lavada secuencial

Lavada secuencial toma 6 hours para 4 cargas

A

B

C

D

30 40 2030 40 2030 40 2030 40 20

6 PM 7 8 9 10 11medianoche

Orden

Tiempo

Page 27: Teo 2: Plataformas para programación paralela

Lavada con pipelining

Ahora toma 3 horas y media

A

B

C

D

6 PM 7 8 9 10 11medianoche

Orden

Time

30 40 40 40 40 20

Page 28: Teo 2: Plataformas para programación paralela

Pipelining No se acelera el tiempo de ejecución de una

sola tarea, sino del conjunto de tareas. Esta limitada por la “instrucción” más lenta (en el

ejemplo, la secadora) y su desbalance respecto a las otras

Muchas tareas se hacen a la vez, cada una en una instrucción diferente

Potencial de acelerar procesos depende del número de “pipes” (operaciones simultáneas posibles)

Aparte hay un costo en administrar el paso de una operación a otra.

Mejor RISC. Pero también CISC, ej: P4

Page 29: Teo 2: Plataformas para programación paralela

Pipelining en CPU RISC

Reg

ALU

DMemIfetch Reg

Reg

ALU

DMemIfetch Reg

Reg

ALU

DMemIfetch Reg

Reg

ALU

DMemIfetch Reg

Ciclo 1 Ciclo 2 Ciclo 3 Ciclo 4 Ciclo 6 Ciclo 7Ciclo 5

ORDEN

INSTR.

Page 30: Teo 2: Plataformas para programación paralela

Pipelining En la vida real, cada paso no necesariamente es

de 1 ciclo. Algunos son de 2 ciclos, y otros pueden demorarse 4 o 5 ciclos, dependiendo de la instrucción.

Problemas posibles: Estructurales: el hardware no puede soportar ciertas

operaciones simultáneas De datos: una operación depende de los resultados de

otra aún no efectuada. De control o de branch.

Estos problemas disminuyen la mejora de performance, y crecen si hay más pipes.

Page 31: Teo 2: Plataformas para programación paralela

Velocidad de CPU versus velocidad de acceso a memoria

La memoria puede ser cuello de botella Latencia: tiempo desde que el CPU pide un

dato en memoria hasta que lo obtiene efectivamente.

Bandwidth: tasa a la que se puede leer la data (bits/s ó bytes/s)

Ej.: tengo una CPU de 1GHz (clock 1 ns) conectada a una RAM de 100 ns. Multiplique 2 vectores de 10 elementos c/u., que están en la RAM

Page 32: Teo 2: Plataformas para programación paralela

CPU60%/año(2X/1.5 a)

DRAM9%/aó(2X/10 a)1

10

100

1000

198

0198

1 198

3198

4198

5 198

6198

7198

8198

9199

0199

1 199

2199

3199

4199

5199

6199

7199

8 199

9200

0

DRAM

CPU198

2

Performance Gapentre CPU y memoria(crece 50% / año)

Perf

orm

an

ce

Tiempo

“Ley de Moore”

Processor-DRAM Memory Gap (latency)

Page 33: Teo 2: Plataformas para programación paralela

Niveles de la jerarquía de memoria

Registros CPU100s Bytes<1s ns

Cache10s-100s K Bytes1-10 ns$10/ MByte

Memoria Pcpal.MBytes100ns- 300ns$1/ MByte

Disco10s GBytes, 10 ms (10,000,000 ns)$0.0031/ MByte

Capacidad,Tiempo de accesoCostos

Cintainfinitosec-min$0.0014/ MByte

Registros

Cache

Memoria

Disco

Cinta

Instr. Operandos

Bloques

Páginas

Archivos

StagingUnidad de transfer.

prog./compilador1-8 bytes

Control de cache 8-128 bytes

S.O.512-4K bytes

UsarioMbytes

Mayor nivel

Menor nivel

Más rápido

Másgrande

Page 34: Teo 2: Plataformas para programación paralela

Mejor latencia usando caches

En vez de leer de 2 en 2 los elementos de los vectores, los leo una sola vez y los guardo en el cache más cercano a la CPU

Conviene acceder a la memoria y computar en el orden que minimize las lecturas de RAM y aproveche mejor el cache.

Ejemplo: multiplicar 2 matrices

Page 35: Teo 2: Plataformas para programación paralela

Notas en almacenamiento de la matriz

Una matriz es un array 2-D de elementos, pero en la memoria todo es “1-D”

Convenciones para almacenamiento de matrices por columna (tipo Fortran); A(i,j) en posición A + i + j*n por fila (tipo C); A(i,j) en posición A + i*n + j recursivo

Usaremos por columna

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

0

4

8

12

16

1

5

9

13

17

2

6

10

14

18

3

7

11

15

19

Por Columna Por fila

Cache lines

Fuente: Larry Carter, UCSD

La fila azul en la matriz está guardada en las líneas rojas

Matriz por columna en memoria

Page 36: Teo 2: Plataformas para programación paralela

Intensidad computacional: eficiencia de algor.

Balance de máquina: eficiencia de máquina

Modelo simple de memoria a usar

Asumir que hay solo 2 niveles de memoria, rápida y lenta Toda la data está al inicio en la memoria lenta

m = número de elemento de memoria (words) movidos entre la memoria rápida y la lenta.

tm = tiempo por operación en memoria lenta f = número de operaciones aritméticas tf = tiempo por operación aritmética (memoria rápida) << tm

q = f / m número promedio de flops por acceso a memoria lenta

Tiempo mínimo= f* tf, si toda la data está en mem. rápida. Tiempo real

f * tf + m * tm = f * tf * (1 + tm/tf * 1/q)

Mayor q es tpo. más cercano al mínimo f * tf q tm/tf necesario para obtener al menos 50% de velocidad pico

Page 37: Teo 2: Plataformas para programación paralela

Multiplicando Matriz y vector

{implementa y = y + A*x}

for i = 1:n

for j = 1:n

y(i) = y(i) + A(i,j)*x(j)

= + *

y(i) y(i)

A(i,:)

x(:)

Page 38: Teo 2: Plataformas para programación paralela

Multiplicando Matriz y vector

{read x(1:n) de memoria lenta en memoria rápida}

{read y(1:n) de memoria lenta en memoria rápida}

for i = 1:n

{read fila i de A de memoria lenta en memoria rápida}

for j = 1:n

y(i) = y(i) + A(i,j)*x(j)

{write y(1:n) de memoria rápida a memoria lenta}

• m = número de ops. en memoria lenta = 3n + n2

• f = número de ops. aritméticas = 2n2

• q = f / m ~= 2

• Esta multiplicación esta limitada por la velocidad de la memoria lenta

Page 39: Teo 2: Plataformas para programación paralela

Multiplicación de matrices por método trivial

{implementa C = C + A*B}

for i = 1 to n

for j = 1 to n

for k = 1 to n

C(i,j) = C(i,j) + A(i,k) * B(k,j)

= + *

C(i,j) C(i,j) A(i,:)

B(:,j)

Algoritmo tiene 2*n3 = O(n3) Flops y opera en 3*n2 words de memoria

q puede llegar hasta 2*n3 / 3*n2 = O(n)

Page 40: Teo 2: Plataformas para programación paralela

Multiplicación de matrices por método trivial

{implementa C = C + A*B}for i = 1 to n

{read fila i de A en memoria rápida}

for j = 1 to n

{read C(i,j) en memoria rápida}

{read columna j de B en memoria rápida}

for k = 1 to n

C(i,j) = C(i,j) + A(i,k) * B(k,j)

{write C(i,j) a memoria lenta}

= + *

C(i,j) A(i,:)

B(:,j)C(i,j)

Page 41: Teo 2: Plataformas para programación paralela

Multiplicación de matrices por método trivial

Número de accesos a memoria lenta:

m = n3 para leer cada columna de B n veces

+ n2 para leer cada fila de A una vez

+ 2n2 para leer y escribir cada elemento de C una vez

= n3 + 3n2

Así, q = f / m = 2n3 / (n3 + 3n2)

~= 2 para n grande, no hay mejora respecto a mult. matriz por vector

= + *

C(i,j) C(i,j) A(i,:)

B(:,j)

Page 42: Teo 2: Plataformas para programación paralela

Impacto del bandwidth

Para mejorarlo: Aumentar el tamaño del cache (cache line).

Ejemplo: que pasaria si deseo multiplicar dos vectores de tamaño 100 c/u. y en cada cache line solo entran 20 floats? Y si entran 200 floats?

Page 43: Teo 2: Plataformas para programación paralela

Una arquitectura paralela genérica

P P P P

Interconnection Network

M M MM

° Físicamente, dónde está la memoria?

Memoria

P = procesador, M = memoria

Page 44: Teo 2: Plataformas para programación paralela

Modelos de programación paralela Control

Cómo se crea el paralelismo? Qué orden hay entre operaciones? Cómo los diferentes hilos de control se sincronizan?

Data Qué data es privada y qué data se comparte? Cómo se accede o comunica la data compartida en

forma lógica? Operaciones

Qué operaciones son atómicas (indivisibles)? Costos

Cómo contabilizar los costos respectivos?

Page 45: Teo 2: Plataformas para programación paralela

Ejemplo sencillo

Sea la suma : Descomposición paralela:

Cada evaluación y cada suma parcial es una tarea.

Asignar n/p números a cada procesador (1 al p) Cada uno computa independientemente sus resultados

“privados” y la suma parcial. Uno (o todos) recolectan las p sumas parciales y computa la

suma global.

Dos clases de data: Compartida lógicamente

Los n números originales, la suma global.

Privada lógicamente Las evaluaciones de las funciones. Y las sumas parciales individuales?????

1

0

])[(n

i

iAf

Page 46: Teo 2: Plataformas para programación paralela

Modelo de prog. 1: Memoria compartida

Un programa es una colección de hilos de control. Se pueden crear dinámicamente en algunos lenguajes.

Cada hilo tiene variables privadas, ej: variables del stack local. También hay variables compartidas, ej: variables estáticas, de bloques

comunes, del heap global. Los hilos se comunican implícitamente escribiendo y leyendo

variables compartidas. Los hilos coordinan sincronizando en variables compartidas.

PnP1P0

s s = ...y = ..s ...

Memoria compartida

i: 2 i: 5 Memoriaprivada

i: 8

Page 47: Teo 2: Plataformas para programación paralela

Sumando con memoria compartida

HILO 1

for i = 0, n/2-1 s = s + f(A[i])

HILO 2

for i = n/2, n-1 s = s + f(A[i])

static int s = 0;

• Problema: “race condition” en la variables s• Una “race condition” o carrera por la data ocurre cuando:

- Dos procesadores (o 2 hilos) acceden a la misma variable, y por lo meno uno la escribe.

- Los accesos son concurrentes (no sincronizados) así que podrían pasar simultáneamente.

Page 48: Teo 2: Plataformas para programación paralela

Sumando con memoria compartida

HILO 1 …. computa f([A[i]) y put en reg0 reg1 = s reg1 = reg1 + reg0 s = reg1 …

HILO 2 … computa f([A[i]) y put en reg0 reg1 = s reg1 = reg1 + reg0 s = reg1 …

static int s = 0;…(s = 27)

• Sea s=27, f(A[i])=7 en Hilo 1, y f(A[i])=9 en Hilo 2• Si el programa está bien, s debería ser 43 al final

• Pero puede ser 43, 34, o 36

• Las operaciones atómicas son lecturas y escrituras• Ose ve un número u otro, no medio número• Las sumas se hacen en registros (privados generalmente)

7 927 2734 36

3634

Page 49: Teo 2: Plataformas para programación paralela

Sumando con memoria compartida (mejorado)

HILO 1

local_s1= 0 for i = 0, n/2-1 local_s1 = local_s1 + f(A[i]) s = s + local_s1

HILO 2

local_s2 = 0 for i = n/2, n-1 local_s2= local_s2 + f(A[i]) s = s +local_s2

static int s = 0;

• Como la suma es asociativa, se puede reordenar• La mayor parte de cómputo es en variables privadas

- La frecuencia de uso de mem. compartida baja, lo que puede mejorar la velocidad.

- Pero hay un “race condition” en el update de la v.compartida s- Se puede solucionar añadiendo locks o candados (sólo un hilo

puede usar el lock a la vez; los otros deben esperar)

static lock lk;

lock(lk);

unlock(lk);

lock(lk);

unlock(lk);

Page 50: Teo 2: Plataformas para programación paralela

Todos los procesadores se conectan a una memoria compartida grande. Nombre típioc: Symmetric Multiprocessors (SMPs) SGI, Sun, HP, Intel, IBM (nodos del Millennium, SP) Chips multicore (hacía donde vamos)

Difícil escalar a gran número de procesadores <= 32 procesadores es típico

Ventaja: uniform memory access (UMA) Costo: es más barato acceder data en cache que en memoria

principal.

Modelo de máquina 1a: Shared Memory

P1

bus

$

memoria

P2

$

Pn

$

Page 51: Teo 2: Plataformas para programación paralela

Problemas escalando HW de mem. compartida

Por qué no poner más procesadores (con mayor memoria?) El bus de memoria se vuelve cuello de botella

Ej. del problema: Parallel Spectral Transform Shallow Water Model (PSTSWM) Resultados (y gráfico) cortesía de Pat Worley del ORNL Es un núcleo vital en modelos atmosféricos 99% de ops. punto flotante son multiplicaciones o

sumas, que generalmente corren bien en toda CPU. Pero se barre toda la memoria con poco reuso de

operandos se usa mucho bus y memoria compartida El experimento muestra performance serial, con una

“copia” del ejecutable corriendo independientemente en varios procesadores. Es el mejor caso para mem.compartida: no comparte Pero la data no cabe en los registros/cache

Page 52: Teo 2: Plataformas para programación paralela

From Pat Worley, ORNL

Ejemplo

• Degradación de performance es una función “suave” del número de procesos.

• No data compartida entre ellos, así que debería haber perfecto paralelismo.

• (Código corrió en 18 niveles z y varios rangos de niveles xy.)

Page 53: Teo 2: Plataformas para programación paralela

Modelo 1b: memoria distribuida compartida

Memoria es compartida en forma lógica, pero distribuida físicamente Cualquier CPU puede acceder cualquier dirección de memoria Líneas de cache (o páginas) se pasan entre máquinas

Ejemplo: SGI Origin Escala a 512 (SGI Altix (Columbia) en NASA/Ames) Limitada por la coherencia del cache– como mantener las copias en

cache de la misma dirección iguales entre si.

P1

network

$

memory

P2

$

Pn

$

memory memory

Page 54: Teo 2: Plataformas para programación paralela

Problemas de performance al compartir

Real compartirEscrituras frecuentes a la misma variable: cuello de

botellaOK para read-only o para escrituras infrecuentes Técnica: hacer copias de un valor, uno por procesador,

si se puede en el algoritmo.Falso compartir

Bloqueo el cache añade complejidadDos diferentes variables en el mismo bloque de cacheTécnica: colocar la data usada por cada procesador en

forma contigua, o por lo menos evitar intercalado en memoria

Page 55: Teo 2: Plataformas para programación paralela

Modelo de program. 2: Paso de mensajes

Programa consiste en colección de procesos nombrados. Se establecen al empezar a correr el programa Hilo de control y direcciones locales -- NO comparte data física. Data compartida lógica se divide entre procesadores locales.

Los procesos se comunican por pares de send/receive Coordinación implícita en cada evento de comunicación. MPI (Message Passing Interface) es la librería más popular

PnP1P0

y = ..s ...

s: 12

i: 2

Memoria privada

s: 14

i: 3

s: 11

i: 1

send P1,s

Red

receive Pn,s

Page 56: Teo 2: Plataformas para programación paralela

Computar s = A[1]+A[2] en cada procesador

° 1er intento – qué podría salir mal?

Procesador 1 xlocal = A[1] send xlocal, proc2 receive xremote, proc2 s = xlocal + xremote

Procesador 2 xlocal = A[2] receive xremote, proc1 send xlocal, proc1 s = xlocal + xremote

° 2do intento

Procesador 1 xlocal = A[1] send xlocal, proc2 receive xremote, proc2 s = xlocal + xremote

Procesador 2 xlocal = A[2] send xlocal, proc1 receive xremote, proc1 s = xlocal + xremote

° Si send/receive funcionara como el teléfono? Como el correo?

° Si hubiera más de 2 procesadores?

Page 57: Teo 2: Plataformas para programación paralela

Modelo de máquina 2a: Memoria distribida

Cray T3E, IBM SP2 Clusters de PC (Berkeley NOW, Beowulf) IBM SP-3, Millennium, CITRIS son máquinas de

memoria distribuída, pero los nodos son SMPs. Cada procesador tiene su propia memoria y cache

pero no puede acceder directamente a la memoria de otro procesador.

Cada “nodo” tiene una “Network Interface” (NI, tarjeta de red o similar) para comunicación y sincronización

interconnect

P0

memory

NI

. . .

P1

memory

NI Pn

memory

NI

Page 58: Teo 2: Plataformas para programación paralela

Clusters de Tflop/s

He aquí algunos ejemplos de clusters configurados de procesadores y redes separadas

72% del Top 500 (Nov 2005), 2 en el top 10 Dell cluster en Sandia (Thunderbird) era #4 en Top 500

8000 Intel Xeons @ 3.6GHz 64 TFlops pico, 38 TFlops en Linpack Infiniband connection network

Walt Disney Feature Animation (The Hive) era #96 1110 Intel Xeons @ 3 GHz Gigabit Ethernet

Saudi Oil Company era #107 Credit Suisse/First Boston era #108 Para más detalles usar “statistics/sublist generator” en www.top500.org

Page 59: Teo 2: Plataformas para programación paralela

Modelo de máquina 2b: Internet/Grid Computing SETI@Home: corría en 500,000 PCs

~1000 años de CPU al día 485,821 años de CPU hasta el 2006

Análisis sofisticado de señales Datasets distribuidos desde Radio Telescopio de Arecibo

Sgte. Paso:Allen Telescope Array

Page 60: Teo 2: Plataformas para programación paralela

Mod. de progr. 2b: Espacio global de direcciones

Programa consiste en colección de hilos nombrados. Se definen al inicio de la corrida. Data local y compartida, como en modelo de mem.compt. Pero la data compartida está dividida entre procesos. Aparentemente, data remota es cara computacionalmente

Ejs: UPC, Titanium, Co-Array Fortran Programación en espacio global de direcciones es punto

medio entre paso de mensajes y mem. compartida.

PnP1P0 s[myThread] = ...

y = ..s[i] ...i: 2 i: 5 Private

memory

Shared memory

i: 8

s[0]: 27 s[1]: 27 s[n]: 27

Page 61: Teo 2: Plataformas para programación paralela

Modelo de máq. 2c: Espacio global de direcs.

Cray T3D, T3E, X1, y cluster HP Alphaserver Clusters construidos con Quadrics, Myrinet, o Infiniband La NI soporta RDMA (Remote Direct Memory Access)

NI puede acceder directamente a la memoria sin interrumpir a la CPU Un proces. puede hacer read/write a memoria como operación unilateral

(put/get) No solo un load/store como en máq. de mem.compartida

Continua computando mientras espera a que la operación en memoria finalice.

Data remota generalmente no está en cache local.

interconnect

P0

memory

NI

. . .

P1

memory

NI Pn

memory

NIEspacio global de dirs. puede ser soportado en varios grados

Page 62: Teo 2: Plataformas para programación paralela

Modelo de prog. 3: Paralelismo de data

Un solo hilo de control que maneja operaciones paralelas.Esas operaciones paralelas se aplican a toda (o a parte

determinada) de un array. Comunicación implícita en los operadores paralelos Elegante y fácil de entender Coordinación implícita: instrucciones se ejecutan sincronizadas Similar a la forma de trabajo de Matlab en operaciones con

arrays

Desventajas: No todos los problemas encajan en este modelo Difícil de mapear en computadoras de grano gruesoA:

fA:f

sum

A = array de toda la datafA = f(A)s = sum(fA)

s:

Page 63: Teo 2: Plataformas para programación paralela

Modelo de máquina 3a: Sistema SIMD

Un número grande de “pequeños” procesadores. Un solo “procesador de control” emite cada instrucción. Cada procesador ejecuta la mima instrucción. Algunos procesadores se pueden “apagar” en alguna instrucciones

Originalmente esas computadoras se especializaban en cómputo científico, pocas fabricadas (CM2, Maspar)

Modelo de programación puede ser implementado en el compilador Mapear paralelismo n-oper. a p procesadores, n >> p, pero es difícil (ej.,

HPF)

interconnect

P1

memory

NI. . .

control processor

P1

memory

NI P1

memory

NI P1

memory

NI P1

memory

NI

Page 64: Teo 2: Plataformas para programación paralela

Modelo de máq. 3b: Máquinas vectoriales

Arquitecturas vectoriales se basan en 1 sólo procesador Múltiples unidades funcionales Todas efectúan la misma operación Grado de paralelismo posible depende del hardware

Importancia histórica Desplazada por los MPPs en los 90s

Ha reaparecido ultimamente A gran escala en el Earth Simulator (NEC SX6) y Cray X1 A pequeña escala en extenciones SIMD de procesadores

SSE, SSE2 (Intel: Pentium/IA64) Altivec (IBM/Motorola/Apple: PowerPC) VIS (Sun: Sparc)

Idea clave: compilador hace parte del trabajo difícil de encontrar el paralelismo, así el HW no tiene que hacerlo.

Page 65: Teo 2: Plataformas para programación paralela

Procesadores Vectoriales Instrucciones Vectoriales operan en un array o vector

Operaciones en registros vectoriales

Un registro vectorial de una superc. ~32-64 elementos El no. de elementos es mayor que la cantidad de HW paralelo,

llamados pipes o lanes, entre 2 y 4

El HW hace una operación vectorial completa en #elementos-por-reg-vectorial / #pipes

r1 r2

r3

+ +

… vr2 … vr1

… vr3

(logicamente, hace #elem sumas en paralelo)

… vr2 … vr1 (en realidad, hace #`pipes sumas en paralelo)

++ ++ ++

Page 66: Teo 2: Plataformas para programación paralela

Modelo de máq.4: Clusters de SMPs SMPs son las computadoras comunes más rápidas, así

que se usan como bloque básico para hacer una máquina mayor en una red

Nombres comunes: CLUMP = Cluster de SMPs Máquinas jerárquicas, constelaciones

Muchas máquinas modernas son de este tipo o similar: Millennium, IBM SPs, ASCI machines

Cual sería el modelo de programación #4 ??? Tratar a las computadoras como “planas”, simepre usar

paso de mensajes, aun dentro del SMP (simple, pero ignora los efectos de la jerarquía de memoria).

Memoria compartida dentro de un SMP, pero paso de mensajes fuera del SMP.

Page 67: Teo 2: Plataformas para programación paralela

Organización física de plataformas paralelas

Modelo ideal: PRAM (parallel R.A. Machine). Toda operación de acceso a memoria se completa en un período de reloj -- no hay jerarquía de memoria (irreal pero sencillo). OK para ver si un algoritmo tiene suficiente paralelismo. Diseñar una estrategia para el Algoritmo paralelo: primero un

alg. PRAM, luego preocuparse de los tienmpos de memoria/comunicación (a veces funciona)

EREW PRAM CREW PRAM ERCW PRAM CRCW PRAM C: concurrente, E:Exclusiva, R: lectura, W: escritura

Page 68: Teo 2: Plataformas para programación paralela

Redes de interconexión

Estaticas vs dinámicas

Page 69: Teo 2: Plataformas para programación paralela

Topología Bus

Sin cache local vs con cache local

Page 70: Teo 2: Plataformas para programación paralela

Redes de crossbar

Page 71: Teo 2: Plataformas para programación paralela

Redes de switch en cascada

Page 72: Teo 2: Plataformas para programación paralela

Completamente conectada, y en estrella

Page 73: Teo 2: Plataformas para programación paralela

Meshes e hipercubos

Page 74: Teo 2: Plataformas para programación paralela
Page 75: Teo 2: Plataformas para programación paralela

Redes basadas en árboles

Page 76: Teo 2: Plataformas para programación paralela

Costos de comunicación en computación paralela

Costos del pase de mensajes Usaremos modelo con CREW PRAM

Costos en memoria compartida

Page 77: Teo 2: Plataformas para programación paralela

Modelo de Latencia y Ancho de banda (pase de mensajes)

Tiempo para mandar mensaje de longitud n es aprox.:

Topología se asume irrelevante. Modelo “” :

Usualmente >> >> tiempo por flop. Un mensaje largo es menos costoso que varios cortos.

Costo de un mensaje puede ser de cientos o miles de flops.

Lección: Se necesita un ratio computación-a-comunicación grande para ser eficiente.

Tiempo = latencia + n*costo_por_word = latencia + n/ancho_de_banda

Tiempo = + n*

nn

Page 78: Teo 2: Plataformas para programación paralela

Parametros Alfa-Beta en Máquinas reales

Números obtenidos empíricamentemáquina

T3E/Shm 1.2 0.003T3E/MPI 6.7 0.003IBM/LAPI 9.4 0.003IBM/MPI 7.6 0.004Quadrics/Get 3.267 0.00498Quadrics/Shm 1.3 0.005Quadrics/MPI 7.3 0.005Myrinet/GM 7.7 0.005Myrinet/MPI 7.2 0.006Dolphin/MPI 7.767 0.00529Giganet/VIPL 3.0 0.010GigE/VIPL 4.6 0.008GigE/MPI 5.854 0.00872

es latencia en μs es ancho de banda en μs por byte

Qué tan bien el modelo αβ Tiempo = + n*predice la performance real?

Page 79: Teo 2: Plataformas para programación paralela

1

10

100

1000

10000

8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072

T3E/Shm

T3E/MPI

IBM/LAPI

IBM/MPI

Quadrics/Shm

Quadrics/MPI

Myrinet/GM

Myrinet/MPI

GigE/VIPL

GigE/MPI

Drop Page Fields Here

Sum of model

size

machine

Tiempo según el modelo para varios n

Page 80: Teo 2: Plataformas para programación paralela

1

10

100

1000

10000

8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072

T3E/Shm

T3E/MPI

IBM/LAPI

IBM/MPI

Quadrics/Shm

Quadrics/MPI

Myrinet/GM

Myrinet/MPI

GigE/VIPL

GigE/MPI

Drop Page Fields Here

Sum of gap

size

machine

Tiempo medido experimentalmente

Page 81: Teo 2: Plataformas para programación paralela

Caso memoria compartida

Modelos mucho más complejos. Muchos factores: el programador no

controla exactamente en que parte de la memoria va su programa; consistencia del cache es casi impredecible; contención.

Se adapta el mismo modelo simplificado que para pase de mensajes, pero sabiendo que es mucho menor en memoria compartida que en paso de mensajes ( tiende a cero)

Page 82: Teo 2: Plataformas para programación paralela

Mapeo proceso-procesador

Números: CPUsLetras: procesos

(c) Mapeo natural(d) Mapeo aleatorio

Page 83: Teo 2: Plataformas para programación paralela

Ej.: Mapeo en hipercubo