una biblioteca numérica paralela para upcgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfconclusiones...

55
Introducción Diseño de la biblioteca Implementación de la biblioteca Evaluación experimental Conclusiones Una Biblioteca Numérica Paralela para UPC Jorge González-Domínguez 1 *, María J. Martín 1 , Guillermo L. Taboada 1 , Juan Touriño 1 , Ramón Doallo 1 , Andrés Gómez 2 1 Grupo de Arquitectura de Computadores Universidad de A Coruña {jgonzalezd,mariam,taboada, juan,doallo}@udc.es 2 Centro de Supercomputación de Galicia (CESGA) Santiago de Compostela {agomez}@cesga.es XX Jornadas de Paralelismo, Universidad de A Coruña 1/32

Upload: others

Post on 06-Mar-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 2: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 3: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 4: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 5: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 6: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 7: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 8: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 9: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 10: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 11: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 12: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 13: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 14: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 15: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 16: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 17: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 18: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 19: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 20: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 21: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 22: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 23: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 24: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 25: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 26: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 27: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 28: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 29: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 30: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 31: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 32: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 33: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 34: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 35: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 36: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 37: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 38: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 39: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 40: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 41: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 42: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 43: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 44: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 45: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 46: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 47: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 48: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 49: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 50: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 51: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 52: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 53: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 54: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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

Page 55: Una Biblioteca Numérica Paralela para UPCgac.udc.es/~jorgeg/slides/jornadas09-talk.pdfConclusiones Funciones privadas Funciones compartidas Dos funciones por cada rutina BLAS Funciones

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