Documente Academic
Documente Profesional
Documente Cultură
Jorge Castellanos (*) Jos Luis Ramrez (*) Demetrio Rey (**)
(*) Facultad de Ciencias y Tecnologa. (**) Instituto de Matemticas y Clculo Aplicado,
Facultad de Ingeniera. Universidad de Carabobo. Valencia, Venezuela
jcasteld@uc.edu.ve jbarrios@uc.edu.ve drey@uc.edu.ve
1. Introduccin
Resumen
El mtodo directo comnmente utilizado para
En este trabajo se presenta una sencilla resolver sistemas de ecuaciones lineales; en trminos
implementacin de la Factorizacin LU usando el modernos se llama descomposicin LU con pivoteo,
Lenguaje de Programacin Paralela ZPL. La factorizacin LU con pivoteo, tal como lo cita [1]. En
implementacin presentada aprovecha las detalle: dada A una matriz nxn, no singular. La
caractersticas ms importantes de ZPL: simplicidad, eliminacin gaussiana con pivoteo parcial da la
portabilidad y ejecucin eficiente en ambientes factorizacin PA = LU, como es mostrado en [3],
paralelos. Se describe el programa ZPL para la donde P es una matriz de permutacin, L es una
Factorizacin LU y se compara su rendimiento matriz triangular inferior y U es una matriz triangular
paralelo en un Cluster tipo Beowulf versus una superior.
implementacin equivalente con ScalaPack sobre La solucin de Ax = b se convierte en LUx = Pb,
C/MPI. Se demuestra que el cdigo ZPL es dado que PAx = Pb. La solucin de LUx = Pb puede
sustancialmente mas corto que el de Scalapack y hacerse en tres pasos:
adems alcanza un rendimiento comparable a ste
(de menos de un orden de magnitud). 1. Establecer d = Pb, mezclando entradas de b, o
accediendo por direccionamiento indirecto un
Palabras Clave: Factorizacin LU, ZPL, vector de permutacin.
Paralelismo, Scalapack 2. Resolver Ly = d (sistema triangular inferior)
3. Resolver Ux = y (sistema triangular superior)
for k= 1:n-1
for i= k+1:n % escalado
A(i,k) = A(i,k)/A(k,k)
end for
for i= k+1:n % actualizacin
for j= k+1:n
A(i,j) = A(i,j) - A(i,k)*
A(k,j)
end for
end for
end for
var A, B, C : [BigR] integer; declara dos arreglos flood, asumiendo las regiones F y
C de las definiciones anteriores.
El segundo uso de las regiones es para sealar El concepto detrs del flood es que las dimensiones
implcitamente el clculo paralelo. Por ejemplo para especificadas, por ejemplo, las dimensiones no-floods,
sumar los valores correspondientes a la porcin sin definen el tamao de los elementos que son
bordes de la regin de los arreglos A y B, y almacenar replicados. El asterisco especificando una dimensin
el resultado en el arreglo C, se escribe la siguiente flood puede ser ledo como un nmero
lnea de cdigo: indeterminado de, tal como en El arreglo Flrows
contiene un indeterminado nmero de filas iguales de
[R] C := A + B; n elementos y el arreglo Flcols contiene un
indeterminado nmero de columnas iguales de n
Esta lnea se corresponde con un doble ciclo elementos.
anidado sobre el conjunto de ndices n x n. Obsrvese
como el operador + se aplica a cada elemento de A y A continuacin se muestra cmo efectuar la
B. De esta forma, + es un operador aritmtico replicacin de la k-sima columna de A en toda la
elemento-a-elemento, al igual que otros operadores matriz B:
tradicionales: -, *, /; que definen la resta,
multiplicacin y divisin elemento a elemento, [1..n, *] B := >>[1..n, k] A
respectivamente.
ZPL posee otros operadores de arreglos que Obsrvese como >> necesita dos regiones: una
permiten efectuar complejas operaciones sobre regin fuente [1..n, k], localizada a la derecha
vectores y matrices con un nmero reducido de del operador >>, y una regin destino [1..n,*], a
instrucciones. En esta seccin, adems de los la izquierda de la asignacin. La regin fuente
operadores bsicos elemento a elemento ya siempre tiene una dimensin colapsada (un solo
mencionados, slo nos referiremos a aquellos que ndice) y la regin destino, en la misma dimensin
fueron utilizados en la factorizacin LU: flood y colapsada de la fuente, tendr generalmente una
reduce. dimensin flood o en su defecto una especificacin de
rango a..b.
3.2. Flood (replicacin)
En la prctica, el operador >> resulta ser de
Una de las caractersticas poderosas de ZPL [7], a frecuente uso en muchos de los algoritmos tpicos
objeto de aprovechar la utilizacin de mltiples implementados en ZPL, entre ellos la factorizacin
procesadores es la habilidad de llenar una matriz con LU.
copias de una fila o columna, o ms generalmente, el
llenar un arreglo de dimensin mayor con copias de
otro arreglo de dimensin menor. Esta operacin, 3.3 Reduce (reduccin)
llamada flood en ZPL (simbolizada como >>) es
una generalizacin de la idea de la promocin escalar. Reduce (<<) puede verse en cierta manera como lo
Para describir el flood, se introducir un cierto contrario de un flood, en vez de replicar elementos
vocabulario bsico: para llenar arreglos de mayor orden, << reduce los
Dimensin flood: Una dimensin en una arreglos para obtener arreglos de menor orden, o
especificacin de regin en la cual se reemplaza el incluso escalares (de all su nombre: reducir). El
rango por un asterisco. Por ejemplo, la segunda operador << precisa de otro operador aritmtico
dimensin en la especificacin de regin C = (asociativo y conmutativo) para llevar a cabo las
[1..n,*] es una dimensin flood. reducciones. Por ejemplo, para obtener el mximo
Regin flood: Es una regin definida con uno o valor presente en un vector V de n elementos,
ms dimensiones flood. Por ejemplo, la regin F = aplicamos un max-reduce (max<<)
[*,1..n] es una regin flood con una primera
dimensin flood. [1..n] m := max<< V
Arreglo flood: es un arreglo declarado sobre una
regin flood. Por ejemplo: Donde m es un escalar al cual se le asigna el
mximo valor de V. Si necesitamos obtener la suma
total de los elementos de la matriz A de n x n, basta Codificacin del algoritmo haciendo uso de los
con aplicar un +reduce: operadores que hagan un uso ms eficiente de
la mquina paralela.
[1..n, 1..n ] suma := +<< A
4.1 Configuracin y definicin de variables y
Por su versatilidad y facilidad de uso, el operador regiones
de reduccin <<, al igual que el flood, resulta ser de
frecuente uso en muchos de los algoritmos La configuracin y definicin de variables puede
implementados en ZPL. Igualmente ste es empleado observarse en la Figura 9 y consta de tres secciones:
en la factorizacin LU. las variables de configuracin (config var), las cuales
se pueden modificar en el momento de invocar la
ejecucin del programa. Para este caso se definieron
3.4. Modelo de parelizacin y costo de como variables de configuracin: el orden la matriz
comunicacin de operadores cuadrada que se va a procesar, el nombre del archivo
que contiene a la matriz de entrada y el nombre del
ZPL paraleliza automticamente las operaciones archivo para la matriz de salida.
sobre sus arreglos. No existen llamadas a funciones o
directivas de paralelismo. La estrategia de divisin de config var
tareas del lenguaje consiste en paralelismo de datos: --Nmero de filas y columnas de la
todos los procesadores efectan la misma secuencia matriz cuadrada A n x n
n : integer = 3;
de instrucciones sobre el pedazo de arreglo asignado a
cada procesador. region
La comunicacin entre procesadores slo sucede --regin para la matriz n x n
R = [1..n,1..n];
cuando se usan ciertos operadores de ZPL. Dado que --regin flood para las filas
ZPL distribuye la superregin (la unin de todas las Rf = [*,1..n];
--regin flood para columnas
regiones) de un determinado problema en forma Rc = [1..n,*];
equitativa entre todos los procesadores, todos los
arreglos son automticamente alineados y distribuidos var
--matriz sobre R
de la misma manera. De all que en ZPL se cumpla la A : [R] float;
afirmacin mismo ndice = mismo procesador. As,
por ejemplo, el elemento A[3,2] estar en el mismo --indices de iteracin y pivoteo
k,ipiv,ipiv2 : integer;
procesador que el elemento B[3,2] o C[3,2], y asi con
cualquier arreglo del problema que est definido en la --arreglos flood para columna y fila
coordenada (3,2). Col : [Rc] float;
Fila: [Rf] float;
Este modelo de particionamiento implica que las
operaciones elemento a elemento no inducen --arreglos para intercambio de filas
comunicacin alguna, porque no producen RowSwap1, RowSwap2 : [Rf] float;
movimiento de elementos entre ndices. Mientras que -- escalares diagonal y mximo por col.
operaciones tal como flood y reduce, si provocarn diag, maximo : float;
comunicacin, dado que son operaciones globales que
requieren de datos provenientes de diversos ndices.
Fig. 9. Definicin de las variables
Este sencillo modelo de paralelizacin permite al Las regiones son uno de los ingredientes ms
programador ZPL predecir hasta cierto punto qu tan importantes en la confeccin del programa paralelo,
bien correr su algoritmo en una mquina paralela, ya que las mismas definen el nivel de paralelismo e
porque se tiene una cierta idea a priori del costo de implcitamente permiten al ZPL realizar la particin
comunicacin de cada operador y el tamao de la mas adecuada en funcin de la gris de ejecucin y el
regin sobre la cual opera. hardware subyacente. En nuestro caso particular, se
definieron tres regiones: la primera (R) conforma el
4. Algoritmo de factorizacin LU en ZPL espacio (filas y columnas) donde reside
primariamente la matriz. Aprovechando la
caracterstica de flooding (ver 3.2) que tiene ZPL para
La programacin de una aplicacin paralela en
el manejo paralelo de vectores y arreglos, se
ZPL consta de dos partes:
definieron dos secciones tipo flood, una para la
Configuracin y definicin de variables y
manipulacin de filas (Rf) y otra para el manejo de
regiones.
vectores columna (Rc). Las variables restantes hacen
uso del concepto de las regiones y de los tipos bsicos
que vienen incorporados con el lenguaje; entre ellas
se pueden destacar: la variable A de tipo flotante Procedure factorizacion();
definida en la regin R que contiene la matriz a [R] begin
for k := 1 to n-1 do
factorizar y luego en la misma queda la matriz
factorizada despus de terminar el proceso de -- busqueda del mejor pivote
factorizacin; los arreglos flood Col y Fila definidos [k..n,k] begin
maximo := max<<fabs(A);
en las regiones Rc y Rf respectivamente que permiten if( maximo=0.0 ) then
la manipulacin de vectores filas y columna durante writeln(Fracasa
el proceso de factorizacin. Factorizacin);
exit;
end;
ipiv := min<<(
4.2. Cdigo del algoritmo paralelo (fabs(A)!=maximo)*(n+1)+
(fabs(A)=maximo)*(Index1)
);
El algoritmo de factorizacin se basa end;
esencialmente en el mostrado en la Figura 8, el cual se
-- intercambio de filas
desarrolla dentro de un ciclo que se repite n-1 veces if (ipiv != k) then
y que en su interior consta de cuatro partes: [*,] RowSwap1 := >>[k,] A;
[*,] RowSwap2 := >>[ipiv,] A;
[k,] A := RowSwap2;
1. Obtencin del nuevo pivote (p), como el mximo [ipiv,] A := RowSwap1;
elemento (en valor absoluto) de la submatrix que end;
tiene por filas los ndices que van desde k hasta n
-- escalado
y por columna el ndice k. [k,k] diag := max<<A;
2. Intercambiar la fila k (actual) con la fila del [k+1..n,k] A := A/diag;
nuevo pivote (p). -- actualizacin
3. Divisin (escalado) de la submatrix que tiene por [k+1..n,*] Col := >>[k+1..n,k]A;
filas los ndices que van desde k+1 hasta n y por [*,k+1..n] Fila := >>[k,k+1..n]A;
[k+1..n,k+1..n] A := A Col * Fila;
columna el ndice k por el nuevo pivote (p). end;
4. Actualizacin (rango-1) de la submatrix definida end;
por los ndices de fila k+1:n y por los ndices de
columna k+1:n. Fig 10. Implementacin del algoritmo de
factorizacin LU
Tabla 3
Matriz s1rmq4m1 (8192x8192)
10. RECOMENDACIONES
Fig. 12: Tiempo de Ejecucin. Caso: Matriz
s1rmq4m1 Consideramos que el algoritmo de factorizacin
LU se puede mejorar agregando tcnicas como el
producto matriz-vector como lo implementan las
rutinas BLAS, slo que debe considerarse para ello la
utilizacin de operadores que tengan poca
comunicacin para no degradar el rendimiento del
algoritmo en arquitecturas multiprocesador.
Creemos que el algoritmo paralelo desarrollado
para ZPL puede probarse con otros lenguajes
paralelos como HPF (High Performance Fortran) y
evaluar el desempeo en cuanto a escalabilidad y
rendimiento.
Falta evaluar el algoritmo usando un cluster con un
mayor nmero de nodos, ya que las grficas muestran
una tendencia de incremento del rendimiento para un
mayor nmero de nodos en el caso de matrices de
Fig. 13: Factor de Aceleracin. Caso: Matriz gran tamao.
s1rmq4m1
REFERENCIAS
[1] Akai, Terrence J. Mtodos numricos aplicados a la
ingeniera. Limusa Wiley. Mxico 2004.
[2] Bramley, Ramdall. Introduction to Scientific Computing.
Class notes. Gaussian Elimination (LU Factorization) and the
BLAS. Disponible:
http://www.cs.indiana.edu/classes/p573/notes/arch/LA1.html.
9. Conclusion [3] Burden, Richard L.; Faires, J. Douglas. Numerical analysis.
6th ed. Brooks/Cole Publishing Company. 1997.
Se logr una primera versin paralela del [4] Intel Math Kernel Library Quick Referente. Document
Number: 253425-011US. Disponible:
algoritmo de factorizacin LU mediante un algoritmo
http://www.intel.com/software/products/mkl/docs/mklqref/ind
sencillo de comprender definido usando los conceptos ex.htm
clave de regiones y los operadores paralelos del [5] L. Snyder. A Programmers Guide to ZPL. The MIT Press,
lenguaje de programacin ZPL. 1999.
Si bien las curvas de aceleracin obtenidas no [6] Nakamura, Shoichiro. Anlisis numrico y visualizacin
grfica. Prentice-Hall Latinoamericana, S. A. Mxico 1996.
muestran un comportamiento lineal en el cluster [7] Steven J. Deitz, Bradford L. Chamberlain, and Lawrence
Nimbus, se realizaron pruebas (no mostradas en este Snyder. High-level language support for user-defined
trabajo) que mostraron un mejor comportamiento reductions. Journal of Supercomputing, 23(1), 2002.