IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Una Biblioteca Numérica Paralela para UPC
Jorge González-Domínguez1*, María J. Martín1,Guillermo L. Taboada1, Juan Touriño1, Ramón Doallo1,
Andrés Gómez2
1Grupo de Arquitectura de ComputadoresUniversidad de A Coruña
{jgonzalezd,mariam,taboada,juan,doallo}@udc.es
2Centro de Supercomputación deGalicia (CESGA)
Santiago de Compostela{agomez}@cesga.es
XX Jornadas de Paralelismo, Universidad de A Coruña
1/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
1 IntroducciónUnified Parallel C para Computación de AltasPrestacionesComputación Numérica en UPC
2 Diseño de la bibliotecaFunciones privadasFunciones compartidas
3 Implementación de la biblioteca
4 Evaluación experimental
5 Conclusiones
2/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Unified Parallel C para Computación de Altas PrestacionesComputación Numérica en UPC
1 IntroducciónUnified Parallel C para Computación de AltasPrestacionesComputación Numérica en UPC
2 Diseño de la biblioteca
3 Implementación de la biblioteca
4 Evaluación experimental
5 Conclusiones
3/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Unified Parallel C para Computación de Altas PrestacionesComputación Numérica en UPC
UPC: una Alternativa Adecuada para la Era Multi-core
Modelos de programación:
Tradicionalmente: Memoria compartida odistribuida
Reto: Arquitecturas con memoria híbrida
PGAS (Partitioned Global AddressSpace)
Lenguajes PGAS:
UPC -> C
Titanium -> Java
Co-Array Fortran ->Fortran
Compiladores UPC:
Berkeley UPC
GCC (Intrepid)
Michigan TU
Compiladores de HP,IBM y Cray
4/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Unified Parallel C para Computación de Altas PrestacionesComputación Numérica en UPC
UPC: una Alternativa Adecuada para la Era Multi-core
Modelos de programación:
Tradicionalmente: Memoria compartida odistribuida
Reto: Arquitecturas con memoria híbrida
PGAS (Partitioned Global AddressSpace)
Lenguajes PGAS:
UPC -> C
Titanium -> Java
Co-Array Fortran ->Fortran
Compiladores UPC:
Berkeley UPC
GCC (Intrepid)
Michigan TU
Compiladores de HP,IBM y Cray
4/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Unified Parallel C para Computación de Altas PrestacionesComputación Numérica en UPC
UPC: una Alternativa Adecuada para la Era Multi-core
Modelos de programación:
Tradicionalmente: Memoria compartida odistribuida
Reto: Arquitecturas con memoria híbrida
PGAS (Partitioned Global AddressSpace)
Lenguajes PGAS:
UPC -> C
Titanium -> Java
Co-Array Fortran ->Fortran
Compiladores UPC:
Berkeley UPC
GCC (Intrepid)
Michigan TU
Compiladores de HP,IBM y Cray
4/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Unified Parallel C para Computación de Altas PrestacionesComputación Numérica en UPC
Identificadores importantesTHREADS -> Número total de threads en ejecución
MYTHREAD -> Número del thread actual
#include<stdio.h>#include<upc.h>int main() {printf("Thread %d de %d: Hola Mundo\n",
MYTHREAD, THREADS);}
$ upcc -o holamundo holamundo.upc
$ upcrun -n 3 holamundoThread 0 de 3: Hola MundoThread 2 de 3: Hola MundoThread 1 de 3: Hola Mundo
5/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Unified Parallel C para Computación de Altas PrestacionesComputación Numérica en UPC
Identificadores importantesTHREADS -> Número total de threads en ejecución
MYTHREAD -> Número del thread actual
#include<stdio.h>#include<upc.h>int main() {printf("Thread %d de %d: Hola Mundo\n",
MYTHREAD, THREADS);}
$ upcc -o holamundo holamundo.upc
$ upcrun -n 3 holamundoThread 0 de 3: Hola MundoThread 2 de 3: Hola MundoThread 1 de 3: Hola Mundo
5/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Unified Parallel C para Computación de Altas PrestacionesComputación Numérica en UPC
Identificadores importantesTHREADS -> Número total de threads en ejecución
MYTHREAD -> Número del thread actual
#include<stdio.h>#include<upc.h>int main() {printf("Thread %d de %d: Hola Mundo\n",
MYTHREAD, THREADS);}
$ upcc -o holamundo holamundo.upc
$ upcrun -n 3 holamundoThread 0 de 3: Hola MundoThread 2 de 3: Hola MundoThread 1 de 3: Hola Mundo
5/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Unified Parallel C para Computación de Altas PrestacionesComputación Numérica en UPC
Declaración de arrays compartidosshared [block_factor] A [size]
size -> Tamaño del array
block_factor -> Número de elementos consecutivos afines al mismo thread-> Tamaño de los trozos
6/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Unified Parallel C para Computación de Altas PrestacionesComputación Numérica en UPC
Bibliotecas BLASBasic Linear Algebra SubprogramsEspecificación de un conjunto de funciones numéricasMuy usada por científicos e ingenierosSparseBLAS y PBLAS (BLAS paralelo)
Implementaciones BLASGenéricas y código abierto
GSL -> GNUOptimizadas para ciertas arquitecturas
MKL -> IntelACML -> AMDCXML -> CompaqMLIB -> HP
7/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Unified Parallel C para Computación de Altas PrestacionesComputación Numérica en UPC
Bibliotecas BLASBasic Linear Algebra SubprogramsEspecificación de un conjunto de funciones numéricasMuy usada por científicos e ingenierosSparseBLAS y PBLAS (BLAS paralelo)
Implementaciones BLASGenéricas y código abierto
GSL -> GNUOptimizadas para ciertas arquitecturas
MKL -> IntelACML -> AMDCXML -> CompaqMLIB -> HP
7/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Unified Parallel C para Computación de Altas PrestacionesComputación Numérica en UPC
Nivel BLAS TnombreBLAS Acción
BLAS1
Tcopy Copia de un vectorTswap Intercambio de los elementos de dos vectoresTscal Multiplicación de un vector por un escalarTaxpy Actualización de un vector usando los datos de otro:
y = α ∗ x + yTdot Producto escalar de dos vectores
Tnrm2 Norma euclídeaTasum Suma del valor absoluto de
todos los elementos de un vectoriTamax Encuentra el índice del vector con el valor máximoiTamin Encuentra el índice del vector con el valor mínimo
BLAS2Tgemv Producto matriz-vectorTtrsv Resolución de un sistema
triangular de ecuaciones linealesTger Producto tensorial de dos vectores
BLAS3 Tgemm Producto de dos matricesTtrsm Resolución de un bloque de sistemas
triangulares de ecuaciones lineales
8/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Unified Parallel C para Computación de Altas PrestacionesComputación Numérica en UPC
Computación numérica en UPC
Ninguna biblioteca numérica para lenguajesPGAS
Alternativas del programador:Implementar las rutinas por si mismo
Mayor esfuerzoPeor rendimiento
Cambiar a un modelo de programación con bibliotecasnuméricas
Memoria distribuida -> MPIMemoria compartida -> OpenMP
Consecuencia:Barrera a la productividad de los lenguajes PGAS
9/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Unified Parallel C para Computación de Altas PrestacionesComputación Numérica en UPC
Computación numérica en UPC
Ninguna biblioteca numérica para lenguajesPGAS
Alternativas del programador:Implementar las rutinas por si mismo
Mayor esfuerzoPeor rendimiento
Cambiar a un modelo de programación con bibliotecasnuméricas
Memoria distribuida -> MPIMemoria compartida -> OpenMP
Consecuencia:Barrera a la productividad de los lenguajes PGAS
9/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Unified Parallel C para Computación de Altas PrestacionesComputación Numérica en UPC
Computación numérica en UPC
Ninguna biblioteca numérica para lenguajesPGAS
Alternativas del programador:Implementar las rutinas por si mismo
Mayor esfuerzoPeor rendimiento
Cambiar a un modelo de programación con bibliotecasnuméricas
Memoria distribuida -> MPIMemoria compartida -> OpenMP
Consecuencia:Barrera a la productividad de los lenguajes PGAS
9/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Funciones privadasFunciones compartidas
1 Introducción
2 Diseño de la bibliotecaFunciones privadasFunciones compartidas
3 Implementación de la biblioteca
4 Evaluación experimental
5 Conclusiones
10/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Funciones privadasFunciones compartidas
Análisis de trabajos previos
Aproximación con memoria distribuida (Parallel -MPI- BLAS)Paradigma de Paso de MensajesSólo memoria privadaNuevas estructuras para representar matrices y vectoresdistribuidos
Difíciles de entenderFunciones para ayudar a trabajar con ellas
CreaciónInicialización de los datosEliminación
Nueva aproximaciónUso de los arrays compartidos de UPC
11/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Funciones privadasFunciones compartidas
Análisis de trabajos previos
Aproximación con memoria distribuida (Parallel -MPI- BLAS)Paradigma de Paso de MensajesSólo memoria privadaNuevas estructuras para representar matrices y vectoresdistribuidos
Difíciles de entenderFunciones para ayudar a trabajar con ellas
CreaciónInicialización de los datosEliminación
Nueva aproximaciónUso de los arrays compartidos de UPC
11/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Funciones privadasFunciones compartidas
Análisis de trabajos previos
Aproximación con memoria distribuida (Parallel -MPI- BLAS)Paradigma de Paso de MensajesSólo memoria privadaNuevas estructuras para representar matrices y vectoresdistribuidos
Difíciles de entenderFunciones para ayudar a trabajar con ellas
CreaciónInicialización de los datosEliminación
Nueva aproximaciónUso de los arrays compartidos de UPC
11/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Funciones privadasFunciones compartidas
Dos funciones por cada rutina BLAS
Funciones privadasDatos de entrada y salidaen memoria privadaDistribución de los datosinterna a la función -> niescogida ni conocida porel usuario
Funciones compartidasDatos de entrada y salidaen memoria compartidaDistribución de datoselegida por el usuario
12/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Funciones privadasFunciones compartidas
Dos funciones por cada rutina BLAS
Funciones privadasDatos de entrada y salidaen memoria privadaDistribución de los datosinterna a la función -> niescogida ni conocida porel usuario
Funciones compartidasDatos de entrada y salidaen memoria compartidaDistribución de datoselegida por el usuario
12/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Funciones privadasFunciones compartidas
Dos funciones por cada rutina BLAS
Funciones privadasDatos de entrada y salidaen memoria privadaDistribución de los datosinterna a la función -> niescogida ni conocida porel usuario
Funciones compartidasDatos de entrada y salidaen memoria compartidaDistribución de datoselegida por el usuario
12/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Funciones privadasFunciones compartidas
upc_blas_[p]Tnombreblas
valor de p
_ -> versión compartidap -> versión privada
valor de T
i -> integerl -> longf -> floatd -> double
2 versiones *4 tipos de datos *14 rutinas = 112 funciones
13/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Funciones privadasFunciones compartidas
y = a ∗ x + y
versión privada -> upc_blas_pdaxpyversión compartida ->upc_blas_daxpy
14/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Funciones privadasFunciones compartidas
int upc_blas_pdaxpy(const int size, constdouble a, const int thread_src, const double
*x, const int thread_dst, double *y);
Parameterssize. Tamaño del vector
a. Factor a multiplicar
x, y. Punteros privados a las posiciones de la memoria privada dondese almacenan los vectores
thread_src. [0,THREADS]Thread con los vectores de entrada x e y en su memoria privadaSi THREADS -> Vectores replicados en todas las memoriasprivadas
thread_dst. [0,THREADS]Thread con la memoria privada donde se escribirá el vector desalidaSi THREADS -> Salida replicada en todas las memorias privadas-> BROADCAST
15/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Funciones privadasFunciones compartidas
int upc_blas_pdaxpy(const int size, constdouble a, const int thread_src, const double
*x, const int thread_dst, double *y);
Parameterssize. Tamaño del vector
a. Factor a multiplicar
x, y. Punteros privados a las posiciones de la memoria privada dondese almacenan los vectores
thread_src. [0,THREADS]Thread con los vectores de entrada x e y en su memoria privadaSi THREADS -> Vectores replicados en todas las memoriasprivadas
thread_dst. [0,THREADS]Thread con la memoria privada donde se escribirá el vector desalidaSi THREADS -> Salida replicada en todas las memorias privadas-> BROADCAST
15/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Funciones privadasFunciones compartidas
int upc_blas_pdaxpy(const int size, constdouble a, const int thread_src, const double
*x, const int thread_dst, double *y);
Parameterssize. Tamaño del vector
a. Factor a multiplicar
x, y. Punteros privados a las posiciones de la memoria privada dondese almacenan los vectores
thread_src. [0,THREADS]Thread con los vectores de entrada x e y en su memoria privadaSi THREADS -> Vectores replicados en todas las memoriasprivadas
thread_dst. [0,THREADS]Thread con la memoria privada donde se escribirá el vector desalidaSi THREADS -> Salida replicada en todas las memorias privadas-> BROADCAST
15/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Funciones privadasFunciones compartidas
int upc_blas_pdaxpy(const int size, constdouble a, const int thread_src, const double
*x, const int thread_dst, double *y);
Parameterssize. Tamaño del vector
a. Factor a multiplicar
x, y. Punteros privados a las posiciones de la memoria privada dondese almacenan los vectores
thread_src. [0,THREADS]Thread con los vectores de entrada x e y en su memoria privadaSi THREADS -> Vectores replicados en todas las memoriasprivadas
thread_dst. [0,THREADS]Thread con la memoria privada donde se escribirá el vector desalidaSi THREADS -> Salida replicada en todas las memorias privadas-> BROADCAST
15/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Funciones privadasFunciones compartidas
int upc_blas_pdaxpy(const int size, constdouble a, const int thread_src, const double
*x, const int thread_dst, double *y);
Parameterssize. Tamaño del vector
a. Factor a multiplicar
x, y. Punteros privados a las posiciones de la memoria privada dondese almacenan los vectores
thread_src. [0,THREADS]Thread con los vectores de entrada x e y en su memoria privadaSi THREADS -> Vectores replicados en todas las memoriasprivadas
thread_dst. [0,THREADS]Thread con la memoria privada donde se escribirá el vector desalidaSi THREADS -> Salida replicada en todas las memorias privadas-> BROADCAST
15/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Funciones privadasFunciones compartidas
int upc_blas_pdaxpy(const int size, constdouble a, const int thread_src, const double
*x, const int thread_dst, double *y);
Parameterssize. Tamaño del vector
a. Factor a multiplicar
x, y. Punteros privados a las posiciones de la memoria privada dondese almacenan los vectores
thread_src. [0,THREADS]Thread con los vectores de entrada x e y en su memoria privadaSi THREADS -> Vectores replicados en todas las memoriasprivadas
thread_dst. [0,THREADS]Thread con la memoria privada donde se escribirá el vector desalidaSi THREADS -> Salida replicada en todas las memorias privadas-> BROADCAST
15/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Funciones privadasFunciones compartidas
int upc_blas_daxpy(const int block_size, constint size, const double a, shared const double
*x, shared double *y);
Parameterssize. Tamaño de los vectores -> Igual que en privado
a. Factor a multiplicar -> Igual que en privado
x, y. Punteros privados a las posiciones de la memoria compartidadonde se almacenan los vectores
16/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Funciones privadasFunciones compartidas
int upc_blas_daxpy(const int block_size, constint size, const double a, shared const double
*x, shared double *y);
Parameterssize. Tamaño de los vectores -> Igual que en privado
a. Factor a multiplicar -> Igual que en privado
x, y. Punteros privados a las posiciones de la memoria compartidadonde se almacenan los vectores
16/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Funciones privadasFunciones compartidas
int upc_blas_daxpy(const int block_size, constint size, const double a, shared const double
*x, shared double *y);
Parameterssize. Tamaño de los vectores -> Igual que en privado
a. Factor a multiplicar -> Igual que en privado
x, y. Punteros privados a las posiciones de la memoria compartidadonde se almacenan los vectores
16/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Funciones privadasFunciones compartidas
Significado de block_size para vectoresIn the range [1,size]Cantidad de elementos consecutivos afines al mismothreadEn la práctica, block_size = block_factor del arraycompartidoDetermina la distribución del trabajo
shared [block_size] y [size]
17/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Funciones privadasFunciones compartidas
Significado de block_size para las matrices distribuidas porfilas
Parámetro adicional dist_dimm = row_dist
En el intervalo [1,rows]Cantidad de filas consecutivas afines al mismo threadDetermina la distribución del trabajo
shared [block_size*cols] y [rows*cols]18/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Funciones privadasFunciones compartidas
Significado de block_size para matrices distribuidas porcolumnas
Parámetro adicional dist_dimm = col_dist
En el intervalo [1,cols]Cantidad de columnas consecutivas afines al mismo threadDetermina la distribución del trabajo
shared [block_size] y [rows*cols]19/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
1 Introducción
2 Diseño de la biblioteca
3 Implementación de la biblioteca
4 Evaluación experimental
5 Conclusiones
20/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Técnicas para obtener buena eficienciaTécnicas de optimización de UPC:
Privatización de los accesos a memoria compartida
21/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Técnicas para obtener buena eficienciaTécnicas de optimización de UPC:
Privatización de los accesos a memoria compartida
21/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Punteros privados a memoriaprivada
Punteros de C estándarAlmacenados en memoriaprivadaPueden acceder:
Memoria privadaParte de la memoriacompartida afín althread
Accesos muy rápidos
Punteros privados a memoriacompartida
Almacenados en memoriaprivadaPueden acceder:
Toda la memoriacompartida
Más pesados que lospunteros de C -> Accesosmás lentos
22/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Técnicas para obtener buena eficienciaTécnicas de optimización de UPC:
Privatización de los accesos a memoria compartidaAgrupación de accesos a memoria compartida remota(upc_memget, upc_memput, upc_memcpy)Solapamiento de accesos remotos con computación
Distribución correcta de la carga de trabajo y los datosentre los threads -> versión privadaLlamadas internas a bibliotecas numéricas paralelas muyeficientes
23/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Técnicas para obtener buena eficienciaTécnicas de optimización de UPC:
Privatización de los accesos a memoria compartidaAgrupación de accesos a memoria compartida remota(upc_memget, upc_memput, upc_memcpy)Solapamiento de accesos remotos con computación
Distribución correcta de la carga de trabajo y los datosentre los threads -> versión privadaLlamadas internas a bibliotecas numéricas paralelas muyeficientes
23/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Técnicas para obtener buena eficienciaTécnicas de optimización de UPC:
Privatización de los accesos a memoria compartidaAgrupación de accesos a memoria compartida remota(upc_memget, upc_memput, upc_memcpy)Solapamiento de accesos remotos con computación
Distribución correcta de la carga de trabajo y los datosentre los threads -> versión privadaLlamadas internas a bibliotecas numéricas paralelas muyeficientes
23/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Técnicas para obtener buena eficienciaTécnicas de optimización de UPC:
Privatización de los accesos a memoria compartidaAgrupación de accesos a memoria compartida remota(upc_memget, upc_memput, upc_memcpy)Solapamiento de accesos remotos con computación
Distribución correcta de la carga de trabajo y los datosentre los threads -> versión privadaLlamadas internas a bibliotecas numéricas paralelas muyeficientes
23/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
1 Introducción
2 Diseño de la biblioteca
3 Implementación de la biblioteca
4 Evaluación experimental
5 Conclusiones
24/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Finis Terrae (CESGA)142 nodos HP Integrity rx7640, cada uno:
16 núcleos Montvale Itanium2 (IA64) at 1.6 GHz2 celdas, cada una
4 procesadores dual-core1 módulo de memoria compartida
128 GB RAMMellanox InfiniBand HCA (16 Gbps bandwidth)
SW Configuration:Berkeley UPC (BUPC) 2.6Intel Math Kernel Library (MKL) 9.1
Todas las funciones BLAS1, BLAS2 y BLAS3 secuencialesOtras rutinas: SparseBLAS, LAPACK, ScaLAPACK...
25/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
Configuración de los benchmarks
Configuración de memoria híbridaExplotación de la localidad de los threads en el mismonodo -> memoria compartidaAumenta la escalabilidad -> memoria distribuida
4 threads por nodo, 2 por celdaVersión privadasrc_threads = THREADS
dst_threads = 0
26/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
2 4 8 16 32 64 128
THREADS
speedups
efficiencies
4
8
12
16
20
24
28
32
36
40
44
48
52
SP
EED
UP
0
1
EFFIC
IEN
CY
DOT PRODUCT (pddot)
50M100M150M
27/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
2 4 8 16 32 64 128
THREADS
speedups
efficiencies
4
12
20
28
36
44
52
60
68
SP
EED
UP
0
1
EFFIC
IEN
CY
MATRIX-VECTOR PRODUCT (pdgemv)
100002000030000
28/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
2 4 8 16 32 64 128
THREADS
speedups
efficiencies
0
8
16
24
32
40
48
56
64
72
80
88
SP
EED
UP
0
1
EFFIC
IEN
CY
MATRIX-MATRIX PRODUCT (pdgemm)
6000800010000
29/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
1 Introducción
2 Diseño de la biblioteca
3 Implementación de la biblioteca
4 Evaluación experimental
5 Conclusiones
30/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
SummaryPrimera biblioteca numérica desarrollada para UPC ->NovedadPermite almacenar los datos de entrada y/o salida enmemoria privada o compartida -> FlexibilidadUsa funciones BLAS secuenciales -> PortabilidadScalabilidad demostrada con test experimentales ->Eficiencia
Trabajo futuroDesarrollo de una biblioteca de computación numéricadispersa para UPC
31/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
SummaryPrimera biblioteca numérica desarrollada para UPC ->NovedadPermite almacenar los datos de entrada y/o salida enmemoria privada o compartida -> FlexibilidadUsa funciones BLAS secuenciales -> PortabilidadScalabilidad demostrada con test experimentales ->Eficiencia
Trabajo futuroDesarrollo de una biblioteca de computación numéricadispersa para UPC
31/32
IntroducciónDiseño de la biblioteca
Implementación de la bibliotecaEvaluación experimental
Conclusiones
¿Preguntas?
Contacto: Jorge González-Domínguez [email protected]
Grupo de Arquitectura de Computadores, Departamento deElectrónica y Sistemas
Universidad de A Coruña
32/32