Title: Algoritmos matriciales por bloques Multiplicacin de matrices' BLAS
1Algoritmos matriciales por bloquesMultiplicación
de matrices. BLAS
- Domingo Giménez
- Departamento de Informática y Sistemas
- Universidad de Murcia, Spain
- dis.um.es/domingo
2Contenido
- Jerarquía de librerías
- Obteniendo información
- Algoritmos por bloques
- BLAS
3Jerarquía de librerías
ScaLAPACK
Paso de mensajes
Direccionamiento global
PBLAS
Independiente de la plataforma
Dependiente de la plataforma
LAPACK
BLACS
Secuencial
Direccionamiento local
BLAS
Comunicaciones PVM, MPI
4Jerarquía de librerías
Inverse Eigenvalue Problem
Least Square Problem
PDE Solver
Se puede extender la jerarquía resolviendo problem
as de alto coste computacional.
Necesarios algoritmos eficientes en sistemas de
altas prestaciones.
ScaLAPACK
PBLAS
LAPACK
BLACS
BLAS
Comunicaciones
5Obteniendo información
- www.netlib.org/liblist.html
- www.netlib.org/utk/people/JackDongarra/la-sw.html
-
-
6Algoritmos por bloques
- En vez de realizar operaciones elemento a
elemento realizarlas con bloques de elementos
menos accesos a memoria para el mismo volumen de
computación ? menor tiempo de ejecución. - Técnica utilizada desde los años 80. Se utiliza
en LAPACK para obtener rutinas eficientes
independientemente del sistema donde se ejecuten.
7Algoritmos por bloques
- Multiplicación de matrices (en SUN Ultra 1)
- Método\tamaño 200 400 800
- Normal 0.2179 13.4601 217.5464
- Traspuesta 0.2013 3.3653 27.9945
- Bloques 10 0.2880 2.5901 21.9029
- 25 0.2192 1.8347 14.9642
- 50 0.2161 1.7709 14.2502
- Bloq tras 10 0.2937 2.5026 20.4405
- 25 0.2195 1.8009 14.6415
- 50 0.2152 1.7628 14.1806
- Almac blo 10 0.2949 2.5122 20.3762
- 25 0.2277 1.8490 14.8625
- 50 0.2296 1.8429 14.7314
- Bl tr al bl 10 0.2925 2.4985 20.1975
- 25 0.2244 1.8082 14.5282
- 50 0.2231 1.7147 13.6553
- Bloq dob 20 5 0.6105 4.9363 39.9594
- 20 10 0.3206 2.6669 19.7044
- 50 10 0.3039 2.4542 19.7044
8Algoritmos por bloques
- Las prestaciones de los distintos algoritmos
varían con - Tamaño del problema
- Parámetros del algoritmo
- Sistema en que se ejecuta
- Forma de la matriz
-
9Algoritmos por bloques
- Necesario
- Aprender a usar librerías eficientes
- Aprender a desarrollar algoritmos por bloques
- Desarrollar técnicas de autooptimización, que
seleccionen el algoritmo y los parámetros a usar,
para obtener buenas prestaciones independiente
de - El sistema donde se ejecuta
- Las condiciones actuales del sistema
- Los conocimientos del usuario
10Algoritmos por bloques
- mult(a,fa,ca,lda,b,fb,cb,ldb,c,fc,cc,ldc)
- double a int fa,ca,lda double b int
fb,cb,ldb double c int fc,cc,ldc -
- int i,j,k double s
- for(i0iltfai)
- for(j0jltcbj)
- s0.
- for(k0kltcak)
- saildakbkldbj
- cildcjs
-
-
Algoritmo sin bloques (normal). Acceso elemento a
elemento. Problemas pequeños buenas prestaciones
pues caben en memoria de niveles bajos de la
jerarquía. Problemas grandes peores prestaciones.
11Algoritmos por bloques
- multbloques(a,fa,ca,lda,b,fb,cb,ldb,c,fc,cc,ldc,tb
) - double a int fa,ca,lda double b int
fb,cb,ldb double c int fc,cc,ldc, tb -
- int i,j,k double s
- s(double ) malloc(sizeof(double) tb tb)
- for(i0iltfaii tb)
- for(j0jltcbjj tb)
- ceros(s, tb, tb, tb)
- for(k0kltcakk tb)
- multsumar(aildak, tb, tb,lda,bkldbj,
tb, tb,ldb,s, tb, tb, tb) - copiar(s, tb, tb, tb,cildcj, tb,
tb,ldc) -
- free(s)
-
Algoritmo por bloques. Acceso y operaciones
por bloques . Buenas prestaciones independiente
del tamaño. El tamaño de bloque es parámetro a
determinar.
12Algoritmos por bloques
tb
tb
C
B
i
s
13Algoritmos por bloques
- multbloquesgrandes(a,fa,ca,lda,b,fb,cb,ldb,c,fc,cc
,ldc,tb,tbp) - double a int fa,ca,lda double b int
fb,cb,ldb double c int fc,cc,ldc, tb, tbp -
- int i,j,k double s
- s(double ) malloc(sizeof(double) tb tb)
- for(i0iltfaii tb)
- for(j0jltcbjj tb)
- ceros(s, tb, tb, tb)
- for(k0kltcakk tb)
- multsumarbloques(aildak, tb,
tb,lda,bkldbj, tb, tb,ldb,s, tb, tb, tb,
tbp) - copiar(s, tb, tb, tb,cildcj, tb,
tb,ldc) -
- free(s)
-
Algoritmo por bloques dobles. La operación sobre
bloques no es la multiplicación directa, sino por
bloques. Tenemos dos tamaños de bloque.
14Algoritmos por bloques
Almacenamiento por bloques
almacenamiento 0 1 4 5 2 3
6 7 8 9 12 13 10 11 14 15
matriz 0 1 2 3 4 5 6
7 8 9 10 11 12 13 14 15
posible acceso más rápido a los datos dentro de
las operaciones por bloques
15Algoritmos por bloques
- Trasposición de la matriz B y multiplicación
- mult(a,fa,ca,lda,b,fb,cb,ldb,c,fc,cc,ldc)
- double a int fa,ca,lda double b int
fb,cb,ldb double c int fc,cc,ldc -
- int i,j,k double s
- for(i0iltfai)
- for(j0jltcbj)
- s0.
- for(k0kltcak)
- saildakbjldbk
- cildcjs
-
-
-
16BLAS
ScaLAPACK
Paso de mensajes
Direccionamiento global
PBLAS
Independiente de la plataforma
Dependiente de la plataforma
LAPACK
BLACS
Basic Linear Algebra Subprograms
Direccionamiento local
Secuencial
BLAS
Comunicaciones PVM, MPI
17BLAS
- Conjunto de rutinas para realizar operaciones
básicas sobre vectores y matrices - Publications/references for the BLAS?
- C. L. Lawson, R. J. Hanson, D. Kincaid, and F. T.
Krogh, Basic Linear Algebra Subprograms for
FORTRAN usage, ACM Trans. Math. Soft., 5 (1979),
pp. 308--323. - J. J. Dongarra, J. Du Croz, S. Hammarling, and R.
J. Hanson, An extended set of FORTRAN Basic
Linear Algebra Subprograms, ACM Trans. Math.
Soft., 14 (1988), pp. 1--17. - J. J. Dongarra, J. Du Croz, I. S. Duff, and S.
Hammarling, A set of Level 3 Basic Linear Algebra
Subprograms, ACM Trans. Math. Soft., 16 (1990),
pp. 1--17. -
18BLAS
- Hay tres niveles según el coste computacional
- tipo coste accesos
- operaciones computacional memoria
- BLAS1 vector-vector n n
- BLAS2 matriz-vector n2 n2
- BLAS3 matriz-matriz n3 n2
19BLAS 1
20BLAS 1
- Ejemplo ddot.f
- Calcula el producto escalar de dos vectores
- Se puede usar en el bucle más interno de la
multiplicación de matrices, dando lugar a una
versión con BLAS 1 - Se compila con (depende del sistema)
- cc O3 mb1.c lblas -lm
21BLAS
- Formato de las funciones (niveles 2 y 3) XYYZZZ
- X Tipo de datos
- S REAL
- D DOUBLE PRECISION
- C COMPLEX
- Z DOUBLE COMPLEX
- YY Tipo de matriz
- GE, GB, HE, HP, HB, SY, SP, TR, TP, TB
- ZZZ Operación
- MV productor matriz vector
- MM producto matriz matriz
- SV sistema de ecuaciones ...
22BLAS 2
23BLAS 2
24BLAS 2
- Ejemplo dgemv.f
- Calcula el producto de una matriz por un vector
- Se puede usar en el segundo bucle en la
multiplicación de matrices, dando lugar a una
versión con BLAS 2 - Se compila con
- cc O3 mb2.c lblas -lm
25BLAS 3
26BLAS 3
- Ejemplo dgemm.f
- Calcula el producto de una matriz por un vector
- Se puede hacer la multiplicación de matrices
llamando directamente a la rutina correspondiente
de BLAS - Se compila con
- icc O3 mb3.c lgslcblas -lm
27BLAS
- Multiplicación de matrices (en kefren, pentium
4) - Método\tamaño 200 400 800
- Normal 0.0463 0.7854 7.9686
- Traspuesta 0.0231 0.2875 2.3190
- Bloques 10 0.0255 0.2493 2.0327
- 25 0.0265 0.2033 1.6928
- 50 0.0219 0.1785 1.6594
- Bloq dob 20 5 0.0393 0.3669 3.4955
- 20 10 0.0269 0.3090 2.4424
- 50 10 0.0316 0.2232 2.2768
- 50 25 0.0215 0.1755 1.4726
- Blas 1 0.0536 0.8190 8.2311
- Blas 2 0.0501 0.5861 5.9997
- Blas 3 0.0429 0.6115 4.7252
28BLAS - Práctica
- Probar las prestaciones de
- La multiplicación de matrices por bloques y sin
bloques - Variando el tamaño de las matrices
- Y determinar el tamaño de bloque óptimo
- Comparar con las prestaciones obtenidas usando
BLAS en sus tres niveles