930 likes | 1.07k Views
ARQUITECTURAS PARALELAS Computación de altas prestaciones Idoia Cearreta idoia.cearreta@ehu.es www.sc.ehu.es/arpar K onputagailuen A rkitektura eta T eknologia saila I nformatika F akultatea – E uskal H erriko U nibertsitatea. ARQUITECTURAS PARALELAS. 0. Introducción.
E N D
ARQUITECTURAS PARALELAS • Computación de altas prestaciones • Idoia Cearreta • idoia.cearreta@ehu.es • www.sc.ehu.es/arpar • Konputagailuen Arkitektura eta Teknologia saila • Informatika Fakultatea – Euskal Herriko Unibertsitatea Arquitecturas Paralelas 12-13
ARQUITECTURAS PARALELAS • 0. Introducción. • 1. Computadores vectoriales. • 2.Computadores paralelos (conceptos básicos). • 3. Coherencia de los datos (SMP). • 4. Sincronización de procesos (SMP). • 5. Consistencia de la memoria. • 6. Red de comunicación. Paso de mensajes. • 7.Coherencia de los datos (DSM). • 8. Paralelización de bucles, reparto de tareas. • 9. Computadores paralelos de alta velocidad. Programación paralela: OpenMP yMPI (introd.).
0. Introducción Arquitecturas Paralelas 12-13
Introducción La evolución de los computadores se basa principalmente en tres factores: avances en la tecnología electrónica avances enel diseño de laarquitectura de sistemas avances en el desarrollo desoftware de sistemas Arquitecturas Paralelas 12-13
Introducción Avances en la tecnología electrónica número de transistores > 1.000 M frecuencia del reloj > 1 GHz velocidad de conmutación tecnología de empaquetamiento capacidad de memoria tiempos de comunicación entre elementos/chips Arquitecturas Paralelas 12-13
Introducción Avances en la arquitectura de sistemas arquitecturas RISC jerarquía de memoria unidades funcionales específicas registros segmentación (ILP) desorden (Tomasulo) superescalares - VLIW / ejecución especulativa multithreading multicore on chip Arquitecturas Paralelas 12-13
Introducción Avances en el software de sistemas OpenMP MPI UPC OpenCL / Cuda ... list scheduling loop unrolling software pipelining trace scheduling EPIC... Arquitecturas Paralelas 12-13
Introducción Velocidad de cálculo del procesador escalar: > 1 Gflop/s109 operaciones de coma flotante por segundo Recordad: Mega (M) 106 Giga (G) 109 Tera (T) 1012 Peta (P) 1015 micro (µ) 10-6 nano (n) 10-9 pico (p) 10-12 femto (f) 10-15 Dicha velocidad no es suficiente para algunas aplicaciones técnicas/científicas: meteorología, genética, astrofísica, aeronaútica, geofísica, bases de datos grandes... Arquitecturas Paralelas 12-13
Introducción Hennessy – Patterson, 4. ed. 20% anual 52% anual Arquitecturas Paralelas 12-13
Introducción Solución: paralelismo - Multicore(2-8 procesadores por chip) - muchos (?) procesadores trabajando conjuntamente P = 10.000 proc. >> 10.000 GF/s?? ¿Cómo utilizar P procesadores? una red / mera repetición / sistema paralelo Arquitecturas Paralelas 12-13
Flujo de datos 1n SIMD Procesadores en array Computadores vectoriales 1 Flujo de instrucciones MIMD memoria compartida memoria privada n Introducción Clasificación de Flynn SISD Arquitecturas Paralelas 12-13
1.Computadores vectoriales - Introducción - Dependencias de datos - Dependencias estructurales - Medidas de rendimiento - Técnicas de compilación Arquitecturas Paralelas 12-13
Código escalar CV: introducción do i = 0, N-1 C(i) = A(i) + B(i) enddo buc: FLD F1,A(R1) FLD F2,B(R1) FADD F3,F2,F1 FST C(R1),F3 ADDI R1,R1,#8 SUBI R2,R2,#1 BNZ R2,buc TE≈ 7Nciclos Arquitecturas Paralelas 12-13
Código vectorial LV V1,A(R1) LV V2,B(R1) ADDV V3,V2,V1 SV C(R1),V3 CV: introducción do i = 0, N-1 C(i) = A(i) + B(i) enddo Vectores: - Dirección de comienzo - longitud - paso (stride) 2000 – 2008 – 2016 – 2024 – ... – 2120 dir. com. = 2000 / longitud = 16 / paso = 8 Arquitecturas Paralelas 12-13
N x CV: introducción LV V1,A(R1) BD L AM M M M E AMM M M E AMM M M E ... ... ... ... AMM M M E BD L AM M M M E E ... ... E Arquitecturas Paralelas 12-13
LV V1,A(R1) LV V2,B(R1) ADDV V3,V2,V1 SV C(R1),V3 BD L AMMMME ... ... E BD LAMMMME ... ... E BD .... LAAE ... ... E BDLAM...L MMME.... ...E N ti CV: introducción BDLAM.... .L MMME...... E N = 128, ti = 14 TE = 896 ciclos Tv = 142 ciclos Tv≈ ti + Nciclos TE ≈ 7N ciclos ≈ /6 Arquitecturas Paralelas 12-13
LV V1,A(R1) LV V2,B(R1) ADDV V3,V2,V1 SV C(R1),V3 BD L AMMMME ... ... E BD LAMMMME ... ... E BD .... LAAE ... ... E BDLAM...L MMME.... ...E CV: introducción Problemas Memoria: segmentada / núm. buses / módulos Unidades funcionales: segmentadas / muchas Reg. vectoriales: tamaño / cantidad / acceso Arquitecturas Paralelas 12-13
CV: introducción Problemas Programas: ¿Todo operaciones vectoriales? ¿Se pueden vectorizar siempre? do i = 0, N-1 A(i) = A(i) + 1 enddo ¡Hay que desordenarel código original! escalarmente: L0 +0 S0 / L1 +1 S1 / ... / LN-1 +N-1 SN-1 vectorialmente: L0 L1 ... LN-1 / +0 +1 ... +N-1 / S0 S1 ... SN-1 Arquitecturas Paralelas 12-13
Unidad funcional Reg. Reg. Procesador escalar (completo) Memoria (op.) Control del procesador vectorial Unidad de direcciones (datos) CV: introducción Esquema lógico de arquitectura vectorial (tomasulo) Arquitecturas Paralelas 12-13
CV: introducción Lenguaje máquina LV Vi,A(Rj) Vi:= M(A+Rj) SV A(Rj),Vi M(A+Rj):= Vi OPV Vi,Vj,Vk Vi:= Vj OP Vk OPVS Vi,Vj,Fk Vi:= Vj OP Fk OPVI Vi,Vj,#k Vi:= Vj OP #k VL→ longitud del vector VS→ paso del vector MOVI VL,#64 MOVI VS,#8 LV V1,A(R1) Arquitecturas Paralelas 12-13
CV: dependencias de datos Cuando una instrucción necesita el resultado de una instrucción previa LV V1,A(R1) ADDVI V2,V1,#1 SV A(R1),V2 do i = 0, N-1 A(i) = A(i) + 1 enddo - esperar a que el vector completo esté en un registro y leer a continuación - hacer cortocircuitoE → L, y leer los operandos tan pronto como se pueda: ENCADENAMIENTO (chaining) Arquitecturas Paralelas 12-13
LV ADDVI N SV N N CV: dependencias de datos Sin encadenamiento LV V1,A(R1) ADDVI V2,V1,#1 SV A(R1),V2 BD L AM M M M E ... E BD . . . . . ...L A A E ... E BDLAM.. ... . . . . . . L M M M E .. . E TV = 13 + 3N Arquitecturas Paralelas 12-13
LV V1,A(R1) ADDVI V2,V1,#1 SV A(R1),V2 BD L AM M M M E ... ... ... ...E LV ADDVI SV N CV: dependencias de datos Con encadenamiento BD . . . L A A E ... ... ... E BDLAM.. . L M M M E ... ...E Tv = 13 + N Arquitecturas Paralelas 12-13
BD L AM M M M E ... ... ... ... E BDL AMM M M E ... ... ... ... E CV: dependencias de datos Encadenaminto con dos instrucc.: C = A + B LV V1,A(R1) LV V2,B(R1) ADDV V3,V2,V1 SV C(R1),V3 BD . . . . L A A E ... ... ... E BDLAM.. . . L M M M E ... ...E En general, un operando de la unidad funcional (bus) y el otro del banco de registros (se está escribiendo o está escrito) Arquitecturas Paralelas 12-13
CV: dependencias de datos Tablas de ejecución (A=A+1) Sin encadenamiento inic. lat. dato 1 dato N LV V1,A(R1) ADDVI V2,V1,#1 SV A(R1),V2 3 3 6+1 6+N 6+N+1 2 9+N+1 9+2N 9+2N+1 3 13+2N+1 13+3N Con encadenamiento inic. lat. dato 1 dato N LV V1,A(R1) ADDVI V2,V1,#1 SV A(R1),V2 3 3 6+1 6+N [7] 2 9+1 9+N [10] 3 13+1 13+N Arquitecturas Paralelas 12-13
inic. lat. dato 1 dato N LV V1,A(R1) LV V2,B(R1) ADDV V3,V2,V1 SV C(R1),V3 Sin encadenam. inic. lat. dato 1 dato N LV V1,A(R1) LV V2,B(R1) ADDV V3,V2,V1 SV C(R1),V3 Con encadenam. CV: dependencias de datos Tablas de ejecución (C=A+B) 3 3 6+1 6+N 4 3 7+1 7+N 7+N+1 2 10+N+1 10+2N 10+2N+1 3 14+2N+1 14+3N 3 3 6+1 6+N 4 3 7+1 7+N [8] 2 10+1 10+N [11] 3 14+1 14+N Arquitecturas Paralelas 12-13
CV: dependencias estructurales ¿Están libres los recursos? -unidades funcionales ej: se ocuparán N ciclos -registros vectoriales ej: suficientes buses de lectura/escritura - buses de memoria -módulos de memoria Si están ocupados se perderán muchos ciclos (N) Arquitecturas Paralelas 12-13
LV V1,A(R1) ADDVI V2,V1,#1 SV A(R1),V2 BD L AM M M M E ... ... ... ... E BD . . . L A A E ... ... ... . E LV ADDVI SV CV: dependencias estructurales Buses de memoria ¿Cuántos buses hay para acceder a memoria? BDLAM.. . . ? ... .L M M ME ... bus ocupado Tv≈2N Arquitecturas Paralelas 12-13
CV: dependencias estructurales Un único bus de memoria(A = A + 1) Con encadenamiento inic. lat. dato 1 dato N LV V1,A(R1) ADDVI V2,V1,#1 SV A(R1),V2 3 3 6+1 6+N [7] 2 9+1 9+N [6+N] 3 9+N+1 9+2N Arquitecturas Paralelas 12-13
3 3 6+1 6+N 6+N 3 9+N+1 9+2N 2 12+N+1 12+2N 3 12+2N+1 12+3N LV LV Tv≈3N ADDV SV CV: dependencias estructurales Un único bus de memoria(C = A + B) inic. lat. dato 1 dato N LV V1,A(R1) LV V2,B(R1) ADDV V3,V2,V1 SV C(R1),V3 Con encadenamiento [10+N] [9+2N] Arquitecturas Paralelas 12-13
inic. lat. dato 1 dato N LV V1,A(R1) LV V2,B(R1) ADDV V3,V2,V1 SV C(R1),V3 3 3 6+1 6+N 4 3 7+1 7+N Con encadenamiento [8] 2 10+1 10+N [6+N] 3 9+N+1 9+2N LV LV Tv≈2 N ADDV SV CV: dependencias estructurales Dos buses de memoria(C = A + B) Arquitecturas Paralelas 12-13
CV: dependencias estructurales Módulos de memoria ¿Están libres los módulos de memoria que tenemos que utilizar? Si no están libres, habrá que esperar antes de ejecutar las instrucciones LV/SV. Conflictos: - una instrucción de memoria consigo misma - una instrucción de memoria con otra(s) Arquitecturas Paralelas 12-13
4 5 6 7 8 9 10 11 12 13 14 15 m0 m1 m2 m3 CV: dependencias estructurales Una única operación de memoria tm = 3 ciclos nm = 4 s = 1 M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M ¿Cuántos módulos se utilizan? nm / MCD(nm,s) Por lo tanto, no hay problemas, si nm / MCD(nm,s) ≥ tm Arquitecturas Paralelas 12-13
m0 m1 m2 m3 m0 m1 m2 m3 A00 A01 A02 A03 A10 A11 A12 A13 A20 A21 A22 A23 A30 A31 A32 A33 A00 A01 A02 A03 - A10 A11 A12 A13 -A20 A21 A22 A23 -A30 A31 A32 A33 - CV: dependencias estructurales Padding s = 1, sin conflictos s = 1, sin conflictos Filas s = 5, sin conflictos s = 4, conflictos (mi) Columnas s = 5, sin conflictos s = 6, conflictos Diagonal p. s = 3, sin conflictos s = 4, conflictos Diagonal m. Arquitecturas Paralelas 12-13
inic. lat. dato 1 dato N LV V1,A(R1) ADDVI V2,V1,#1 SV A(R1),V2 3 3 6+1 6+N [7] 2 9+1 9+N [10] - - - M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M CV: dependencias estructurales Varias operaciones de memoria 4 5 6 7 8 910 11 12 13 14 15 16 17 18 19 m0 m1 m2 m3 m4 m5 m6 m7 M M M M M M M M M M M Arquitecturas Paralelas 12-13
CV: dependencias estructurales ¿Cuántos ciclos hay que esperar hasta que se libere el módulo que se quiere utilizar? Hay que generar la lista de módulos ocupados: 1.calcular qué módulo va a comenzar a usar la instrucción j (en memoria desde el ciclo inij) en el ciclo inik : (inik – inij) + módulo de inicioj 2.añadir por delante y por detrás tm-1 módulos 3. Si el módulo que va a utilizar la instrucción k está en la lista, esperar los ciclos indicados por la posición en la lista Arquitecturas Paralelas 12-13
CV: dependencias estructurales inic. mod_ocup. t_esp. lat. dato 1 dato N LV V1,A(R1) ADDVI V2,V1,#1 SV A(R1),V2 3 3 6+1 6+N [7] 2 9+1 9+N 3 17+1 17+N [10] 4 5, 6 - 7 - 0, 1 Arquitecturas Paralelas 12-13
CV: dependencias estructurales Longitud de los registros (Lmax) - ¿Qué hacemos si los vectores son más largos? strip mining do i = 0, N-1 A(i) = A(i) + 1 enddo MOVI VS,#1 MOVI R1,#N mas: MOV VL,R1 LV V1,A(R2) ADDVI V2,V1,#1 SV A(R2),V2 ADDI R2,R2,#Lmax SUBI R1,R1,#Lmax BGTZ R1,mas Tv =N/Lmax(ti + tbuc) + tv N TV = 30 + 3N; N = 500; Lmax = 64; tbuc= 10 → 8×(30+10) + 1.500 = 1.820 (+19%) Arquitecturas Paralelas 12-13
CV: velocidad de cálculo Se utilizan tres parámetros para medir la “velocidad”: - Tiempo de ejecución(en ciclos o en segundos). - Velocidad de cálculo: número de operaciones de coma flotante que se ejecutan por segundo. - Factor de aceleración(speed-up): cuántas veces más rápida es la ejecución vectorial que la escalar. Arquitecturas Paralelas 12-13
300 Tv 250 200 pendiente = tv 150 100 TV = 30 + 2N 50 ti N 0 0 25 50 75 100 125 150 CV: velocidad de cálculo Tiempo de ejecución esc.: TE = te N vect.: Tv = ti + tv N OJO: son ciclos! Para darlo en segundos hay que multiplicarlo por el periodo (T). Arquitecturas Paralelas 12-13
R R∞ R∞/2 N N1/2 CV: velocidad de cálculo Velocidad de cálculo × OpCF × F MF/s RV = N / TV = RV = N / (ti + tvN) R∞ = 1 / tv × OpCF × F N1/2 → R∞ / 2 N1/2= ti / tv Arquitecturas Paralelas 12-13
CV: velocidad de cálculo Factor de aceleración (speed-up) KV = TE / TV = te N / (ti + tvN) K∞ = te / tv Longitud mínima de vectores TE = TV te NV = ti + tv NV → NV = N1/2 / (K∞– 1) Arquitecturas Paralelas 12-13
CV: velocidad de cálculo Influencia del código escalar: ley de Amdahl. Una parte del código vectorialmente, f, y la otra, 1–f, escalarmente TVE = f TV + (1-f) TE KVE = TE / TVE = TE / (f TV + (1–f) TE) = KV / (KV – f (KV–1)) Arquitecturas Paralelas 12-13
16 8 4 2 KB = ∞ CV: velocidad de cálculo Ley deAmdahl KVE = KV / (KV – f (KV–1)) Arquitecturas Paralelas 12-13
CV: velocidad de cálculo Ley de Amdahl Velocidad de cálculo: RVE = N / TVE = N / (f TV + (1-f) TE) = = N / (f (ti + tv N) + (1-f) te N) = = N / (f (ti + tv N) + (1-f) K∞ tv N) [× OpCF × F] Arquitecturas Paralelas 12-13
16 ley de Amdahl 14 12 tv = 5 ns te = 66,6 ns 10 factor de aceleración(normalizado) 8 6 tv= 10 ns te= 33,3 ns 4 CRAY X-MP tv = 10 ns te = 66,6ns 2 0 0 0.2 0.4 0.6 0.8 1 f(factor de vectorización) CV: velocidad de cálculo Ley de Amdahl Arquitecturas Paralelas 12-13
1.Computadores vectoriales - Introducción - Dependencias de datos - Dependencias estructurales - Velocidad de cálculo - Técnicas de compilación - dependencias de datos - vectorización - optimizaciones Arquitecturas Paralelas 12-13
Dependencias de datos Para poder ejecutar vectorialmente un bucle hay que cambiar el orden original de las instrucciones escalarmente: L0 +0 S0 / L1 +1 S1 / ... / LN-1 +N-1 SN-1 vectorialmente: L0L1 ... LN-1 / +0 +1 ... +N-1 / S0 S1 ... SN-1 Ojo: se pueden desordenar las instrucciones, pero hay que respetar las dependencias de datos entre instrucciones! Arquitecturas Paralelas 12-13
dependencia RAW(Rango-Dominio) (i)A = ... (j) = A antidependencia WAR(Dominio-Rango) (i) = A ... (j)A = dependencia de salida WAW(Rango-Rango) (i)A = ... (j)A = ij ij i j Dependencias de datos dependencias reales dependencias de “nombres” Recordad: una dependencia implica un determinado orden entre las operaciones. Arquitecturas Paralelas 12-13
Dependencias de datos • Dado que trabajaremos con bucles las dependencias de datos se pueden dar entre instrucciones de cualquier iteración. • Si hay una dependencia entre las instrucciones de las iteraciones i1 e i2, diremos que hay una dependencia a distancia i2 – i1. Las dependencias se representan mediante dos grafos: grafo de dependencias y espacio de iteraciones. Arquitecturas Paralelas 12-13