Multiplicación de matrices en sistemas cc

Anuncio
Multiplicación de
Matrices en Sistemas
cc-NUMA Multicore
Jesús Cámara Moreno
Director: Domingo Giménez Cánovas
Autor:
Índice de Contenido
1.
2.
3.
4.
5.
6.
7.
8.
Introducción
Línea de Investigación
Sistemas Empleados
Software Utilizado
Planteamiento del Problema
Interés del Problema
Estudio Experimental
Conclusiones
Introducción
„
En la mayoría de problemas científicos y de ingeniería la
computación se lleva a cabo mediante el uso de rutinas
matriciales de álgebra lineal implementadas en librerías
como BLAS, LAPACK...
„
Las últimas versiones de estas librerías (MKL, ATLAS,
Goto BLAS) permiten multithreading y pueden ser usadas
eficientemente en sistemas multicore.
„
Pero… Que ofrezcan implementaciones eficientes no
implica que sean usadas eficientemente por científicos Æ
Necesario estudiar su comportamiento en diferentes
sistemas, variar num_threads, tamaño del problema...
Línea de Investigación
„
Analizar cómo se comporta la rutina de multiplicación de
matrices en sistemas cc-NUMA multicore en función del
tamaño del problema y del número de threads.
„
Decidir el número de threads a usar para obtener el
menor tiempo de ejecución.
„
Usar la información obtenida para desarrollar versión de
2 niveles (OpenMP+MKL) de la multiplicación que sea
capaz de seleccionar el número de threads en cada
nivel en función de las características del sistema Æ
Tesis de Máster
Sistemas Empleados
„
Arquitectura cc-NUMA con memoria compartida.
„
Bertha: IBM 16 Xeon X7640 hexa-core con 96 cores.
Dispone de 4 nodos, cada nodo 4 procesadores, cada
procesador hexa-core. 191 GB de memoria compartida.
„
Ben: HP Integrity Superdome con 128 cores. Cada
computador consta de 4 Intel Itanium-2 dual core
Montvale. 1,5 TB de memoria compartida.
„
Pirineus: SGI Altix UV 1000 con procesadores Xeon
X7542 hexa-core Æ 1344 cores (uso limitado 256). 6 TB
de memoria compartida.
Software Utilizado
„
dgemm: rutina de multiplicación de matrices en doble
precisión.
„
OpenMP: entorno de programación paralela en sistemas
de memoria compartida.
„
icc (compilador de Intel). Versiones:
…
…
…
„
Bertha: 11.0
Ben: 11.1
Pirineus: 11.1
MKL (BLAS implementada por Intel). Versiones:
…
…
…
Bertha: 11.0
Ben: 10.2
Pirineus: 10.2
Planteamiento del Problema
„
Multiplicar dos matrices cuadradas, A y B, usando
paralelismo anidado (OpenMP + MKL)
„
Se establece un número determinado de threads
OpenMP y cada uno multiplica un bloque de filas
adyacentes de la matriz A por la matriz B usando la
rutina dgemm de MKL con un número de threads MKL
establecido (estática/dinámicamente).
„
La idea es analizar qué ocurre con el paralelismo
anidado, no optimizar la multiplicación de matrices.
Planteamiento del Problema
„
Esquema de paralelismo anidado empleado:
omp_set_nested(1);
omp_set_num_threads(nthomp);
mkl_set_dynamic(0);
mkl_set_num_threads(nthmkl);
//Habilita paralelismo anidado
//Establece threads OpenMP
//Deshabilita paralelismo dinamico
//Establece threads MKL
#pragma omp parallel {
obtener tamaño y posicion inicial de la submatriz A
a
ser multiplicada
llamar a la rutina dgemm para multiplicar esta
submatriz por la matriz B
}
Interés del Problema
„
Se puede pensar que la mejor opción es usar versiones
paralelas de BLAS con determinación dinámica de
threads sin usar paralelismo OpenMP o incluso usando
un número de threads igual al de cores disponibles.
„
Pero dependiendo del sistema computacional, del tamaño
de las matrices y del número de threads utilizados, se
pueden obtener tiempos menores de ejecución usando
otras combinaciones.
„
Tal y como se muestra a continuación, usando solo
paralelismo MKL, es preferible usar un número de threads
diferente al número de cores del sistema si se quiere
obtener el menor tiempo de ejecución.
Interés del Problema
Estudio Experimental
2 niveles de paralelismo (OpenMP + MKL)
Estudio Experimental
(sin selección dinámica de threads MKL)
(speed-up mostrado con respecto al tiempo obtenido con paralelismo MKL)
Estudio Experimental
2 niveles de paralelismo (OpenMP + MKL)
Estudio Experimental
(sin selección dinámica de threads MKL)
(speed-up mostrado con respecto al tiempo obtenido con paralelismo MKL)
Estudio Experimental
Estudio Experimental
2 niveles de paralelismo (OpenMP + MKL)
pirineus
pirineus
4,5
16
4
14
500
750
1000
2000
speed-up
3
2,5
2
3000
4000
5000
1,5
1
12
8
4
2
0
0
4
2
1
3000
4000
5000
6
0,5
8
500
750
1000
2000
10
speed-up
3,5
16
8
4
2
1
Estudio Experimental
pirineus
30
25
500
750
1000
2000
speed-up
20
15
3000
4000
5000
10000
10
5
0
60
30
20
15
12
10
6
5
4
3
2
1
pirineus
25
speed-up
20
500
750
1000
2000
15
3000
4000
5000
10000
10
5
0
120
60
40
30
24
20
15
12
10
8
6
5
4
3
2
1
Estudio Experimental
pirineus
20
18
16
500
750
1000
2000
3000
speed-up
14
12
10
8
4000
5000
10000
6
4
2
0
180
90
60
45
36
30
20
18
15
12
10
9
6
5
4
3
2
1
pirineus
16
14
500
750
1000
2000
12
speed-up
10
8
3000
4000
5000
10000
6
4
2
0
240
120
80
60
48
40
30
24
20
16
15
12
10
8
6
5
4
3
2
1
Estudio Experimental
(sin selección dinámica de threads MKL)
(speed-up mostrado con respecto al tiempo obtenido con paralelismo MKL)
pirineus
1,6
1,4
speed-up
1,2
1
3000
4000
0,8
5000
10000
0,6
0,4
0,2
0
2-30 4-15 10-6 15-4 30-2 60-1
#thr.OMP - #thr.MKL
Conclusiones
„
Sin paralelismo dinámico, conforme se aumenta el número de
threads OpenMP y el tamaño de las matrices, se observa un
incremento del speed-up.
„
En sistemas grandes (muchos cores), suele ser preferible usar un
número de threads OpenMP superior o semejante al de MKL.
…
…
…
„
Ben, speed-up entre 1.2 y 1.8 con 16 threads OpenMP y 4 MKL.
Bertha, speed-up entre 1.4 y 1.6 con 8 threads OpenMP y 8 MKL.
Pirineus, speed-up entre 1 y 1.4 con 4 threads OpenMP y 15 MKL.
El uso de dos niveles de paralelismo contribuye a acelerar la
multiplicación de matrices especialmente en problemas de gran
dimensión.
Descargar