Universidad de Murcia1 Algoritmos matriciales por bloques Multiplicación de matrices. BLAS Domingo Giménez Departamento de Informática y Sistemas Universidad de Murcia, Spain dis.um.es/~domingo
Universidad de Murcia2 Contenido Jerarquía de librerías Obteniendo información Algoritmos por bloques BLAS
Universidad de Murcia3 Jerarquía de librerías ScaLAPACK LAPACK BLAS PBLAS BLACS Comunicaciones: PVM, MPI Secuencial Paso de mensajes Dependiente de la plataforma Independiente de la plataforma Direccionamiento local Direccionamiento global
Universidad de Murcia4 Jerarquía de librerías ScaLAPACK LAPACK BLAS PBLAS BLACS Comunicaciones Inverse Eigenvalue ProblemLeast Square ProblemPDE Solver Se puede extender la jerarquía resolviendo problemas de alto coste computacional. Necesarios algoritmos eficientes en sistemas de altas prestaciones.
Universidad de Murcia5 Obteniendo información a/la-sw.html a/la-sw.html
Universidad de Murcia6 Algoritmos 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.
Universidad de Murcia7 Algoritmos por bloques Multiplicación de matrices (en SUN Ultra 1) : Método\tamaño Normal Traspuesta Bloques Bloq tras Almac blo Bl tr al bl Bloq dob
Universidad de Murcia8 Algoritmos 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 …
Universidad de Murcia9 Algoritmos 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
Universidad de Murcia10 Algoritmos por bloques multmult(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(i=0;i<fa;i++) for(j=0;j<cb;j++) { s=0.; for(k=0;k<ca;k++) s+=a[i*lda+k]*b[k*ldb+j]; c[i*ldc+j]=s; } 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.
Universidad de Murcia11 Algoritmos por bloques multbloquesmultbloques(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(i=0;i<fa;i=i+ tb) for(j=0;j<cb;j=j+ tb) { ceros(s, tb, tb, tb); for(k=0;k<ca;k=k+ tb) multsumar(&a[i*lda+k], tb, tb,lda,&b[k*ldb+j], tb, tb,ldb,s, tb, tb, tb); copiar(s, tb, tb, tb,&c[i*ldc+j], 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.
Universidad de Murcia12 Algoritmos por bloques A i k tb B k j C i j s
Universidad de Murcia13 Algoritmos por bloques multbloquesgrandesmultbloquesgrandes(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(i=0;i<fa;i=i+ tb) for(j=0;j<cb;j=j+ tb) { ceros(s, tb, tb, tb); for(k=0;k<ca;k=k+ tb) multsumarbloques(&a[i*lda+k], tb, tb,lda,&b[k*ldb+j], tb, tb,ldb,s, tb, tb, tb, tbp); copiar(s, tb, tb, tb,&c[i*ldc+j], 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.
Universidad de Murcia14 Algoritmos por bloques Almacenamiento por bloques: matriz almacenamiento posible acceso más rápido a los datos dentro de las operaciones por bloques
Universidad de Murcia15 Algoritmos por bloques Trasposición de la matriz B y multiplicación: Trasposició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(i=0;i<fa;i++) for(j=0;j<cb;j++) { s=0.; for(k=0;k<ca;k++) s+=a[i*lda+k]*b[j*ldb+k]; c[i*ldc+j]=s; }
Universidad de Murcia16 BLAS ScaLAPACK LAPACK BLAS PBLAS BLACS Comunicaciones: PVM, MPI Paso de mensajes Secuencial Dependiente de la plataforma Independiente de la plataforma Direccionamiento local Direccionamiento global Basic Linear Algebra Subprograms
Universidad de Murcia17 BLAS Conjunto de rutinas para realizar operaciones básicas sobre vectores y matrices Publications/references for the BLAS? 1. 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 ACM Trans. Math. Soft., 5 (1979) 2. 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 ACM Trans. Math. Soft., 14 (1988) 3. 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 ACM Trans. Math. Soft., 16 (1990)
Universidad de Murcia18 BLAS Hay tres niveles según el coste computacional: tipo costeaccesos operacionescomputacionalmemoria BLAS1 vector-vectorn n BLAS2 matriz-vectorn 2 n 2 BLAS3 matriz-matrizn 3 n 2
Universidad de Murcia19 BLAS 1
Universidad de Murcia20 BLAS 1 Ejemplo ddot.fddot.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 1versión con BLAS 1 Se compila con (depende del sistema) cc –O3 mb1.c –lblas -lm
Universidad de Murcia21 BLAS 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...
Universidad de Murcia22 BLAS 2
Universidad de Murcia23 BLAS 2
Universidad de Murcia24 BLAS 2 Ejemplo dgemv.fdgemv.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 2versión con BLAS 2 Se compila con cc –O3 mb2.c –lblas -lm
Universidad de Murcia25 BLAS 3
Universidad de Murcia26 BLAS 3 Ejemplo dgemm.fdgemm.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 BLASllamando directamente Se compila con icc –O3 mb3.c –lgslcblas -lm
Universidad de Murcia27 BLAS Multiplicación de matrices (en kefren, pentium 4) : Método\tamaño Normal Traspuesta Bloques Bloq dob Blas Blas Blas
Universidad de Murcia28 BLAS - 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