Librerías matriciales paralelas
ScaLAPACK
Javier Cuenca
Dpto. de Ingeniería y Tecnología de Computadores
Domingo Giménez
Dpto. de Informática y Sistemas
Facultad de Informática
http://dis.um.es/~domingo
Universidad de Murcia
1
2
Contenido
Introducción
Librería BLACS
Librería PBLAS
Librería ScaLAPACK
Introducción
3
ScaLAPACK
Paso de mensajes
Direccionamiento
global
Independiente de la
plataforma
PBLAS
LAPACK
BLACS
Dependiente de la
plataforma
Secuencial
Direccionamiento
local
BLAS
Comunicaciones: PVM, MPI
Librería BLACS
(Basic Linear Algebra Communication
Subprograms)
4
“Basic Linear Algebra Communication
Subprograms”
Hace uso de los paquetes software de paso de
mensajes.
Proporciona facilidad de uso y portabilidad
para la comunicación en problemas de álgebra
lineal.
Librería BLACS.
Motivación
5
Hay varios paquetes que proporcionan una interfaz
de paso de mensajes que permanecen invariables a
través de varias plataformas (ej. PVM, MPI, PICL).
Pero, estos paquetes son librerías generales y sus
interfaces no son tan fáciles de usar en álgebra
lineal como sería deseable.
Librería BLACS.
Objetivos
6
Facilidad de programación
Simplifica el paso de mensajes y así reduce los
errores de programación.
Facilidad de uso
Portabilidad
Está a un nivel en el que es fácilmente utilizable
por los programadores de álgebra lineal.
Proporciona una interfaz que está soportada por
un gran abanico de computadores paralelos.
Librería BLACS.
Resultado
7
Con BLACS la interfaz y los métodos de uso de las
rutinas, han sido especializados y por tanto
simplificados.
Librería BLACS.
Ideas base
8
Comunicación de matrices
Generales
M filas por N columnas
LDA: Distancia entre dos elementos fila consecutivos
(Column-major).
Trapezoidales, definidas por
MxN, LDA
UPLO, DIAG (‘U’,’N’)
Librería BLACS.
Ideas base.
Parámetro UPLO
UPLO
M <= N
m-n+1
m
‘U’
‘L’
m
n
n-m+1
n-m+1
n
9
M>N
n
m
m
m-n+1
n
Librería BLACS.
Ideas base
10
Mapeo de los procesos en un grid
Array lineal de ID de procesos
0
1
2
...
Np-1
0
0
4
2
1
5
3
2
6
4
3
7
0
1
8 procesos mapeados en
un grid 2x4
Un conjunto de procesos 0,1,...,Np-1
se mapea como una malla de PxQ procesos,
donde PxQ = Ng <= Np
Librería BLACS.
Ideas base
11
Ámbito de una operación en una malla 2D
Ámbito
Fila
Columna
Significado
Todos los procesos de la fila participan en la
operación
Todos los procesos de la columna participan en
la operación
Todos
Todos los procesos participan en la operación
Librería BLACS.
Ideas base
12
Contextos
Cada malla lógica de procesos está contenida en
un contexto BLACS.
Los contextos permiten:
Crear grupos de procesos arbitrarios
Crear grids solapados o disjuntos
Aislar los procesos de los grids para que no interfieran
con los de otros grids.
Librería BLACS.
Rutinas
13
Comunicación
Pto. a pto.
Difusión
Reducción
Rutinas
Apoyo
Inicialización
Destrucción
Información y otras
No oficiales
Librería BLACS.
Rutinas.
Comunicación Pto a pto
14
Nomenclatura de las rutinas punto a punto y
difusión
vXXYY2D
Tipo de datos:
I (Integer), S, D, C, Z
v
Forma de la matriz:
XX
GE
TR
Tipo Comunicación:
YY
SD, RV (Send, Recieve)
BS, BR (Bcast send, recv)
Librería BLACS.
Rutinas.
Comunicación Pto a pto
15
Envío
vGESD2D(ICONTXT,M,N,A,LDA,RDEST,CDEST)
vTRSD2D(ICONTXT,UPLO,DIAG,M,N,A,LDA,RDEST,CDEST)
Recepción
vGERV2D(ICONTX,M,N,A,LDA,RSRC,CSRC)
vTRRV2D(ICONTX,UPLO,DIAG,M,N,A,LDA,RSRC,CSRC)
Librería BLACS.
Rutinas.
Difusión
16
Envío
vXXBS2D(ICONTX,SCOPE,TOP[,UPLO,DIAG],M,N,A,
LDA)
Recepción
vXXBR2D(ICONTX,SCOPE,TOP[,UPLO,DIAG],M,N,A,
LDA,RSRC,CSRC)
Librería BLACS.
Rutinas.
Difusión - Topologías
17
Basadas en anillo (pipelining)
Anillo unidireccional
Anillo dividido
Multianillo
Basadas en árboles (non-pipelining)
Hipercubo
Árbol general
General Tree Gather
Intercambio bidireccional
http://www.netlib.org/blacs/BLACS/Top.html#BSRing
Librería BLACS.
Rutinas.
Difusión
18
Máximo
vGAMX2D(ICONTX,SCOPE,TOP,M,N,A,LDA,RA,CA,RCFLAG,RD
EST,CDEST)
Mínimo
vGAMN2D(ICONTXT,SCOPE,TOP,M,N,A,LDA,RA,CA,RCFLAG,R
DEST,CDEST)
Suma
vGSUM2D(ICONTXT,SCOPE,TOP,M,N,A,LDA,RDEST,CDEST)
Librería BLACS.
Rutinas.
Apoyo
19
Inicialización
BLACS_PINFO: usada cuando se necesita alguna información
inicial del sistema. Devuelve el índice de proceso y el número de
procesos.
BLACS_SETUP: esta solo tiene sentido en PVM que permite añadir
dinámicamente procesos.
BLACS_GRIDINIT: mapea los procesos disponibles en el grid
BLACS. Devuelve el contexto.
BLACS_GRIDMAP: establece como se mapearán los procesos
coordenados BLACS respecto de la numeración nativa de la
máquina.
Librería BLACS.
Rutinas.
Apoyo
20
Destrucción
BLACS_FREEBUF: libera los buffers usados por BLACS.
BLACS_GRIDEXIT: libera un contexto BLACS.
BLACS_ABORT: utilizada para abortar un proceso,
normalmente se llama cuando ocurre un error.
BLACS_EXIT: esta rutina se debe llamar cuando un proceso
ha terminado de usar BLACS. Se puede indicar si la capa
inferior de comunicación se va a seguir usando o si se
puede liberar (pvm_exit).
Librería BLACS.
Rutinas.
Apoyo
21
Información y otras:
BLACS_GRIDINFO: devuelve información acerca de un
proceso en un determinado contexto.
BLACS_PNUM: devuelve el número de proceso del sistema
dado su posición en el grid.
BLACS_PCOORD: dado el número de proceso del sistema
devuelve sus coordenadas en el grid.
Librería BLACS.
Rutinas.
Apoyo
22
BLACS_GET: devuelve información interna de BLACS
(context handle, rango de IDs de mensajes, nivel de
depuración,...).
BLACS_SET: establece valores internos de parámetros
BLACS.
Librería BLACS.
Rutinas.
Apoyo
23
Rutinas no oficiales
No forman parte del BLACS estándar.
Pueden no estar en todas las implementaciones de BLACS.
Ejemplos:
SETPVMTIDS
DCPUTIME
DWALLTIME
Librería BLACS.
Referencias
24
BLACS:
Página principal: http://www.netlib.org/blacs/
LAPACK Working Note 94, "A User's Guide to the
BLACS v1.1", Jack J. Dongarra, R. Clint Whaley,
May 5, 1997
Librería BLACS.
Ejemplos
25
Cscala_01.c
Cscala_02.c
Librería BLACS.
Ejemplo Cscala_01.c
26
blacs_pinfo_(&iam,&nprocs);
&iam (o): quién soy yo
&nprocs (o): total de procesos disponibles, antes de
inicializar BLACS
blacs_get_(&i_cero,&i_cero,&contxt);
&i_cero (i): si estoy en un contexto ya, si no, se ignora
&i_cero (i): qué devolver en 3er argumento. =0 un handler
del contexto de sistema por defecto
&contxt (o): El handler del contexto sistema por defecto
Obtiene el handler del contexto del sistema
Librería BLACS.
Ejemplo Cscala_01.c
27
blacs_gridinit_(&contxt,"R",&nprow,&npcol);
&contxt (i/o):
(blacs_get)
input: el handler que indica el contexto del sistema
Output: el nuevo handler para el contexto de BLACS
“R” (i): row-major en el número de procesos en el grid
&nprow (i): cuántas filas de procesos en el grid
&npcol (i): cuántas columnas de procesos en el grid
Inicializa el grid de procesos
Librería BLACS.
Ejemplo Cscala_01.c
28
blacs_gridinfo_
(&contxt,&nprow,&npcol,&myprow,&mypcol);
&contxt (i): el handler del contexto
&nprow (o): número de filas de procesos en el grid
&npcol (o): número de columnas de procesos en el grid
&myprow (o): mi fila en el grid
&mypcol (o): mi columna en el grid
Obtiene informacion del grid existente
Librería BLACS.
Ejemplo Cscala_01.c
29
icaller=blacs_pnum_(&contxt,&myprow,&mypcol);
&contxt (i): handler del contexto
&myprow (i): mi número de fila
&mypcol (i): mi número de columna
Devuelve el número de proceso del sistema correspondiente
a las coordenadas que se le pasa
Librería BLACS.
Ejemplo Cscala_01.c
30
igerv2d_(&contxt,&i_uno,&i_uno,&icaller,&i_uno,&i,&j)
&contxt (i):
&i_uno (i): numero filas matriz a recibir
&i_uno (i): numero columnas matriz a recibir
&i_caller (o): matriz a recibir
&i_uno (i): lead dimension
&i (i): nº fila del proceso fuente del envio
&j (i): nº columna del proceso fuente del envio
Recibe una matriz de datos
Librería BLACS.
Ejemplo Cscala_01.c
31
blacs_pcoord_(&contxt,&icaller,&hisrow,&hiscol);
&contxt
&icaller (i): número de proceso
&hisrow (o): número de fila del proceso
&hiscol (o): número de columna del proceso
Dado un número de proceso devuelve sus coordenadas en
el grid
Librería BLACS.
Ejemplo Cscala_01.c
32
blacs_abort_(&contxt,&i_uno);
&contxt(i)
&i_uno (i): número de error por el que se detiene
Finaliza un proceso BLACS
Librería BLACS.
Ejemplo Cscala_01.c
33
igesd2d_
(&contxt,&i_uno,&i_uno,&icaller,&i_uno,&i_cero,&i_cer
o);
&contxt (i)
&i_uno: número de filas de la matriz
&i_uno: número de columnas de la matriz
&i_caller: la matriz que se envía
&i_uno: lead dimension de la matriz
&i_cero: coordenada fila de proceso destino
&i_cero: coordenada columna de proceso destino
Envía una matriz de datos a otro proceso
Librería BLACS.
Ejemplo Cscala_01.c
34
Compilación
$make Cscala_01
mpicc -O4 Cscala_01.c -o Cscala_01
/usr/lib64/libmpiblacsCinit.a
/usr/lib64/libmpiblacsF77init.a
/usr/lib64/libmpiblacs.a -lmpi -llapack -lblas -lm
Ejecución
mpirun –np num_procesos Cscala_01 num_fil num_col
Librería BLACS.
Ejemplo Cscala_01.c
[javiercm@sol ejemplos]$ mpirun -np 4 Cscala_01 2 2
35
Compilación
>>>>BLACS abierto: 4 procesos<<<<<<
$make Cscala_01
GRID INICIADA: proceso 1, fila 0, columna 1
GRID INICIADA: proceso 2, fila 1, columna 0
mpicc -O4 Cscala_01.c -o Cscala_01
GRID INICIADA: proceso 3, fila 1, columna 1
/usr/lib64/libmpiblacsCinit.a
GRID INICIADA: proceso 0, fila 0, columna 0
/usr/lib64/libmpiblacsF77init.a
yo (0,0), he recibido de proceso (0,1) el men
Comentarios de: Librerías matriciales paralelas ScaLAPACK (0)
No hay comentarios