La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Teo 2: Plataformas para programación paralela

Presentaciones similares


Presentación del tema: "Teo 2: Plataformas para programación paralela"— Transcripción de la presentación:

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

2 Arquitectura tradicional de una computadora secuencial
CPU + RAM conectado por un bus Los 3 elementos pueden ser cuellos de botella Mejora: múltiples elementos

3 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”.

4 La Control Unit coordina todo

5 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

6 Registros Uso Registros de propósito general
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

7 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.

8 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 …)

9 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

10 Relación entre MAR, MDR y la Memoria
Data Dirección

11 Ejemplo MAR-MDR

12 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.

13 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

14 Ciclo Fetch/Execute –carga
PC -> MAR Transferir la dirección del PC (contador de programa) al MAR MDR -> IR Transferir la instrucción al IR IR(address) -> MAR Cargar el parámetro de dirección de la instrucción al MAR MDR -> A Copiar la data en el acumulador PC + 1 -> PC Incrementar el PC (contador de programa)

15 Ciclo Fetch/Execute –grabación
PC -> MAR Transferir la dirección del PC al MAR MDR -> IR Transferir la instrucción al IR IR(address) -> MAR Cargar parámetro de dirección de la instrucción en el MAR A -> MDR* Copiar la data del cumulador al MDR PC + 1 -> PC Incrementar contador del programa *Note la diferencia en el paso #4

16 Ciclo Fetch/Execute – sumar
PC -> MAR Transferir la dirección del PC al MAR MDR -> IR Transferir la instrucción al IR IR(address) -> MAR Cargar el parámetro de dirección de la instrucción al MAR A + MDR -> A Contenido del MDR se suma al del acumulador PC + 1 -> PC Incrementar PC

17 Instrucciones Instrucción “Instruction set”
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)

18 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 Direcciones OPCODE OPERANDO fuente resultado

19 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

20 Formato de instrucciones: CISC

21 Formato de instrucciones: RISC

22 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

23 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

24 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”

25 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

26 Lavada secuencial Lavada secuencial toma 6 hours para 4 cargas 6 PM 7
8 9 10 11 medianoche Tiempo 30 40 20 30 40 20 30 40 20 30 40 20 O r d e n A B C D Lavada secuencial toma 6 hours para 4 cargas

27 Lavada con pipelining Ahora toma 3 horas y media 6 PM 7 8 9 10 11
medianoche Time 30 40 20 O r d e n A B C D Ahora toma 3 horas y media

28 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

29 Pipelining en CPU RISC O R D E N I S T . Ciclo 1 Ciclo 2 Ciclo 3
Reg ALU DMem Ifetch Ciclo 1 Ciclo 2 Ciclo 3 Ciclo 4 Ciclo 6 Ciclo 7 Ciclo 5 O R D E N I S T .

30 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.

31 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

32 Tiempo 1000 100 Performance 10 1 Processor-DRAM Memory Gap (latency)
CPU 60%/año (2X/1.5 a) 1000 CPU “Ley de Moore” 100 Performance Gap entre CPU y memoria (crece 50% / año) Performance 10 DRAM 9%/aó (2X/10 a) Y-axis is performance X-axis is time Latency Cliché: Not e that x86 didn’t have cache on chip until 1989 DRAM 1 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 Tiempo

33 Niveles de la jerarquía de memoria
Capacidad, Tiempo de acceso Costos Mayor nivel Staging Unidad de transfer. Más rápido Registros CPU 100s Bytes <1s ns Registros Instr. Operandos prog./compilador 1-8 bytes Cache 10s-100s K Bytes 1-10 ns $10/ MByte Cache Control de cache 8-128 bytes Bloques Memoria Pcpal. MBytes 100ns- 300ns $1/ MByte Memoria S.O. 512-4K bytes Páginas Disco 10s GBytes, 10 ms (10,000,000 ns) $0.0031/ MByte Disco Usario Mbytes Archivos Más grande Cinta infinito sec-min $0.0014/ MByte Cinta Menor nivel

34 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

35 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 Matriz por columna en memoria Por fila Por Columna 5 10 15 1 2 3 1 6 11 16 4 5 6 7 2 7 12 17 8 9 10 11 3 8 13 18 12 13 14 15 4 9 14 19 16 17 18 19 La fila azul en la matriz está guardada en las líneas rojas Cache lines Fuente: Larry Carter, UCSD

36 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 Intensidad computacional: eficiencia de algor. Balance de máquina: eficiencia de máquina

37 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) A(i,:) = + * y(i) y(i) x(:)

38 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

39 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) 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) A(i,:) C(i,j) C(i,j) B(:,j) = + *

40 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} A(i,:) C(i,j) C(i,j) B(:,j) = + *

41 Multiplicación de matrices por método trivial
Número de accesos a memoria lenta: m = n 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 A(i,:) C(i,j) C(i,j) B(:,j) = + *

42 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?

43 Una arquitectura paralela genérica
P = procesador, M = memoria P P P P M M M M Interconnection Network Memoria Físicamente, dónde está la memoria?

44 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?

45 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?????

46 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. Example: think of a thread as a subroutine that gets called on on processor, executed on another Like concurrent programming on a uniprocessor (as studied in CS162). Memoria compartida s s = ... y = ..s ... i: 8 i: 2 i: 5 Memoria privada P0 P1 Pn

47 Sumando con memoria compartida
static int s = 0; 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]) 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.

48 Sumando con memoria compartida
static int s = 0; (s = 27) 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 7 9 27 27 34 36 34 36 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)

49 Sumando con memoria compartida (mejorado)
static int s = 0; static lock lk; lock(lk); unlock(lk); 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 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) Why not do lock inside loop?

50 Modelo de máquina 1a: Shared Memory
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. Now we switch to machine models (hardware) that support the shared memory programming model (software) P1 P2 Pn $ $ $ bus memoria

51 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

52 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.) Horizontal axis is resolution, which determines memory size Higher resolution => more memory => more bus/shared memory use => slower From Pat Worley, ORNL

53 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. Implication for programming: if your program refers to shared data too frequently, it will run slowly, Because time to execute cache coherency protocol much longer than getting unshared data from cache. P1 P2 Pn $ $ $ network memory memory memory

54 Problemas de performance al compartir
Real compartir Escrituras frecuentes a la misma variable: cuello de botella OK 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 complejidad Dos diferentes variables en el mismo bloque de cache Técnica: colocar la data usada por cada procesador en forma contigua, o por lo menos evitar intercalado en memoria

55 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 s: 12 i: 2 s: 14 i: 3 s: 11 i: 1 Memoria privada Now we switch back to the next programming model. Easiest form of software: all processes start executing identical program. By calling get_my_processor_ID_number(), they can figure out who they are, And branch to run different programs. receive Pn,s y = ..s ... send P1,s P0 P1 Pn Red

56 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] send xlocal, proc1 receive xremote, proc1 s = xlocal + xremote Si send/receive funcionara como el teléfono? Como el correo? 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 2do intento Synchronous vs. asynchronous Si hubiera más de 2 procesadores?

57 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 Now we switch to machine models (hardware) that support the distributed memory programming model (software). Note that we can always run distributed memory (message passing) software on shared memory hardware (we implement MPI using the shared memory hardware). But the motivation for message passing software is That it can run on much larger machines, and/or much cheaper machines, like clusters. interconnect P0 memory NI . . . P1 Pn

58 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 3.6GHz 64 TFlops pico, 38 TFlops en Linpack Infiniband connection network Walt Disney Feature Animation (The Hive) era #96 1110 Intel 3 GHz Gigabit Ethernet Saudi Oil Company era #107 Credit Suisse/First Boston era #108 Para más detalles usar “statistics/sublist generator” en Collaborators/clients at this time: . SLAC . FETC . LBNL HENP . MSRI . ExtremeLinux society (national labs, universities, etc) . Millennium Project The following slides all address performance aspects. However, our work will be just as much in ease-of-setup/admin, working with users, etc.

59 Modelo de máquina 2b: Internet/Grid Computing
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 Will have guest lecture by David Anderson, designer of software

60 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. Now we switch back to a programming model (software) intended to provide some benefits of Shared memory programming (simplicity) but run on distributed memory hardware. We will have guest lectures on some of these, and possibly programming assignments. Shared memory s[0]: 27 s[1]: 27 s[n]: 27 y = ..s[i] ... i: 2 i: 5 i: 8 Private memory s[myThread] = ... P0 P1 Pn

61 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. Espacio global de dirs. puede ser soportado en varios grados interconnect P0 memory NI . . . P1 Pn

62 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 grueso A: fA: f sum A = array de toda la data fA = f(A) s = sum(fA) s:

63 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

64 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.

65 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 vr1 vr2 + + (logicamente, hace #elem sumas en paralelo) r3 vr3 vr1 vr2 (en realidad, hace #`pipes sumas en paralelo) + + +

66 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.

67 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

68 Redes de interconexión
Estaticas vs dinámicas

69 Topología Bus Sin cache local vs con cache local

70 Redes de crossbar

71 Redes de switch en cascada

72 Completamente conectada, y en estrella

73 Meshes e hipercubos

74

75 Redes basadas en árboles

76 Costos de comunicación en computación paralela
Costos del pase de mensajes Usaremos modelo con CREW PRAM Costos en memoria compartida

77 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 “a-b” : Usualmente a >> b >> 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 = a + n*b a + n*b << n*(a + 1*b)

78 Parametros Alfa-Beta en Máquinas reales
Números obtenidos empíricamente a es latencia en μs es ancho de banda en μs por byte Qué tan bien el modelo αβ Tiempo = a + n*b predice la performance real?

79 Tiempo según el modelo para varios n

80 Tiempo medido experimentalmente

81 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 a/b es mucho menor en memoria compartida que en paso de mensajes (a tiende a cero)

82 Mapeo proceso-procesador
Números: CPUs Letras: procesos (c) Mapeo natural (d) Mapeo aleatorio

83 Ej.: Mapeo en hipercubo


Descargar ppt "Teo 2: Plataformas para programación paralela"

Presentaciones similares


Anuncios Google