Sie sind auf Seite 1von 8

Paralelizacin de la Factorizacin LU Usando el Lenguaje ZPL

Parallelization of the LU Decomposition with the ZPL Programming Language

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)

Abstract Este documento presentamos la implementacin de


la factorizacin LU en el lenguaje de programacin
We present a concise implementation of the LU paralela ZPL. En la Seccin 1 se hace una breve
Decomposition using the High-Level Parallel introduccin a la factorizacin LU, en la Seccin 2 se
Programming Language ZPL. Our implementation presenta una breve introduccin a los algoritmos de
takes advantage of the most important features of factorizacin LU y se muestra una versin modificada
ZPL: simplicity, portability and efficient execution on del algoritmo que facilita su paralelizacin. En la
parallel environments. We describe our ZPL program Seccin 3 se presenta una introduccin al lenguaje
for the LU decomposition and compare its parallel ZPL con el objeto de facilitar la comprensin de la
performance on a Beowulf cluster versus an implementacin del algoritmo paralelo. En la Seccin
equivalent implementation with ScalaPack on C/MPI. 4 se presenta y comenta la implementacin del
We show that the ZPL source code is substantially algoritmo en el lenguaje ZPL. En la Seccin 5 se
shorter than ScalaPack code, and also exhibits presenta una versin equivalente en ScalaPack. En la
performance competitive with ScalaPack (within one Seccin 6 se discute la experimentacin realizada con
order of magnitude). ambas versiones. En la Seccin 7 se presentan los
resultados y en la Seccin 8 se discuten los mismos.
Index Terms: LU Decomposition, ZPL, Por ltimo, en la Seccin 9 se resumen las
Parallelism, ScalaPack conclusiones obtenidas y en la Seccin 10 las
recomendaciones pertinentes para futuros trabajos en
este tema.
2. La Factorizacin LU Figura 3 se muestra el cdigo de la Figura 2 usando el
vector indexado K.

2.1. Algoritmo bsico for k = 1:n-1


K = k+1:n
% escalamiento
El algoritmo clsico de factorizacin LU sigue una A(K,k) = A(K,k)/A(k,k)
secuencia de tres fases en cada paso: bsqueda del % actualizacin rango-1
A(K,K) = A(K,K) - A(K,k)* A(k,K)
pivote, intercambio de filas para traer el pivote a la end for
posicin diagonal, escalado de las entradas
subdiagonales en la columna, luego se actualiza el Fig. 3. Factorizacin LU con actualizacin rango-1
resto de la matriz. Al realizar estas operaciones usando vector indexado (K)
sobrescribiendo la matriz A se obtienen los factores L En cualquiera de las dos formas pasadas (Figura 2
y U en las partes correspondientes de A (puesto que L y Figura 3), se muestra ms claramente cules son las
es una triangular inferior unidad, no se almacena su operaciones involucradas (escalamiento y
diagonal, as que todo cabe limpiamente). El actualizacin). Cada una de las iteraciones contiene
algoritmo bsico sin pivoteo sigue una secuencia de un escalamiento del vector en la parte sub-diagonal de
dos fases en cada paso: escalado de las entradas la columna k, seguida por una actualizacin rango-1
subdiagonales en cada columna y actualizacin del de la parte restante de la matriz. En la Figura 4 se
resto de la matriz A. Usando pseudo-notacin de muestra grficamente el procedimiento con la
MATLAB el algoritmos bsico se muestra en la actualizacin del rango-1 en la factorizacin LU.
Figura 1.

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

Fig. 1. Factorizacin LU: algoritmo bsico

2.2. La Factorizacin LU con actualizacin


rango-1

Usando la notacin Matlab descrita anteriormente


[2], el algoritmo de la Figura 1 se puede indicar en
forma ms compacta como se muestra en la Figura 2,
tal como es mostrado por [2].

for k = 1:n-1 Fig. 4. Factorizacin LU con actualizacin rango-1


% Primer for (i= k+1:n) (Fuente: [2])
A(k+1:n,k) = A(k+1:n,k)/A(k,k)
% Segundo for (i= k+1:n)
A(k+1:n,k+1:n) = A(k+1:n,k+1:n) -
A(k+1:n,k)* A(k,k+1:n)
end for 2.3. Matrices de permutacin
Fig. 2. Factorizacin LU con actualizacin
rango-1 Las matrices de permutacin nunca se almacenan o
manipulan como matrices [6]. En su lugar hay dos
representaciones que utilizan solamente un vector
De hecho, podemos ajustarnos ms a la notacin de entero. Una cosa es utilizar un vector de permutacin
Matlab usando vectores indexados (K = k+1:n crea un y la otra es utilizar un vector pivote. El primero se
vector K con elementos enteros entre k+1 y n). En la almacena en P como un conjunto de nmeros enteros
pi que representan la posicin de xi en y = Px:
I : 1 2 3 4 5 6 7 8
pi : 3 7 5 8 4 1 2 6 Obsrvese en la Figura 8 que el primer paso
Fig. 5. Vector de permutacin
selecciona el elemento ms grande en la k-sima
columna entre la parte restante (no reducida) de la
matriz. Tambin, el ndice del lazo itera desde 1 hasta
La matriz de permutacin correspondiente es n, de modo que tambin ser definido piv(n) que es
entonces: por supuesto n. Tambin, obsrvese que se
intercambian las filas enteras k y p del arreglo A; esto
[0 0 1 0 0 0 0 0] tambin intercambiar las partes correspondientes de
|0 0 0 0 0 0 1 0| L y U puesto que estamos sobrescribiendo A con esos
|0 0 0 0 1 0 0 0| factores. Esta es otra caracterstica interesante de este
P= |0 0 0 0 0 0 0 1|
|0 0 0 1 0 0 0 0| procedimiento de factorizacin LU el cual hace que
|1 0 0 0 0 0 0 0| los factores salgan en el orden correcto.
|0 1 0 0 0 0 0 0|
[0 0 0 0 0 1 0 0]
y = x
for k = 1:n
Fig. 6. Matriz de permutacin intercambiar y(k) y y(piv(k)) en el
vector y
end for
y nadie claramente representara esta matriz
Fig. 8. Uso del vector pivote
usando un arreglo de n2 = 64 elementos. Tal vez
resulte conveniente para una matriz de 8x8, pero para
matrices de 2000 x 2000, no se recomienda
definitivamente. 3. Una breve introduccin a ZPL
La segunda manera de representar las matrices de
permutacin P es con vectores pivote, y es en stos ZPL es un lenguaje de programacin basado en
donde utilizamos la eliminacin Gaussiana. Este es un arreglos [6], con paralelismo de datos utilizado para
arreglo entero piv de longitud n, aplicado a un vector programar computadoras paralelas cuando se desea un
x en y = Px . alto rendimiento incluso si el tiempo de desarrollo es
limitado. Su relativa simplicidad y sensacin
2.4. La Factorizacin LU con pivoteo semejante a Pascal lo hacen fcil de leer y entender,
conservando an un modelo sofisticado de
En [4] se establece que, al usar la versin anterior paralelismo. Por estas razones y porque se han
(actualizacin rango-1) de la factorizacin LU, la implementado reducciones basadas en arreglos,
divisin por A(k,k) en la operacin del escalamiento elegimos implementar nuestro algoritmo en el
puede causar problemas si A(k,k) es un nmero contexto de ZPL. Se debe observar, sin embargo, que
pequeo en valor absoluto. Pivoteo significa traer al el algoritmo planteado es suficientemente general
elemento ms grande en esa posicin intercambiando para aplicarlo en otros lenguajes paralelos de alto
filas o columnas en la matriz. Pivoteo parcial significa nivel. En esta seccin introducimos las caractersticas
hacer solamente intercambio de filas; la factorizacin del lenguaje ZPL relevantes para este trabajo. Los
LU es "generalmente estable" cuando se utiliza el lectores interesados en profundizar pueden referirse a
pivoteo parcial. Sin embargo, hay clases de problemas la gua del usuario [5].
(algunos problemas de Ecuaciones Diferenciales
Ordinarias con dos puntos de valores de frontera son
un ejemplo) para los cuales l mtodo puede fallar. 3.1. Regiones y arreglos
Agregndole pivoteo a la versin rango-1 tenemos el
algoritmo de la Figura 7. El concepto principal de ZPL es la regin, las
for k = 1:n cuales son un conjunto de ndices sin datos asociados.
p = index del mximo elemento en
|A(k:n,k)|
Para declarar dos regiones, R y BigR, donde BigR es
piv(k) = p un conjunto de (n+2) x (n+2) ndices, mientras que R
intercambiar filas k y p de A: es un conjunto de n x n ndices que se refiere
A(k,:)<--->A(p,:)
A(k+1:n,k) = A(k+1:n,k)/A(k,k) solamente a la porcin sin bordes de BigR. Esta
A(k+1:n,k+1:n) = A(k+1:n,k+1:n) - declaracin se realiza de la siguiente manera:
A(k+1:n,k)* A(k,k+1:n)
end for region BigR = [0..n+1, 0..n+1];
Fig. 7. Versin con actualizacin rango-1 y R = [1..n, 1..n];
pivoteo parcial
Las regiones se utilizan en dos contextos. Primero
se usan para declarar arreglos paralelos. Todos los
arreglos declarados sobre regiones son paralelos y
como tales, son distribuidos sobre los procesos de
forma especificable en tiempo de ejecucin. Se var Flrows: [F] float;
declaran tres arreglos enteros A, B y C definidos Flcols: [C] float;
sobre el conjunto de ndices dado por BigR:

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

5. Algoritmo de factorizacin LU en 6.2. Plataforma Computacional


ScalaPack
Todas las pruebas se desarrollaron en el cluster
NIMBUS de la Facultad de Ingeniera de la
Para establecer una comparacin en cuanto a la
Universidad de Carabobo, el cual posee un total de 8
complejidad del cdigo y el rendimiento de ejecucin
nodos, cada uno un Procesador Intel P4 de 2.4 Ghz,
en una arquitectura paralela, se elabor un programa
1GB de RAM, con el Sistema Operativo Linux
equivalente de factorizacin LU usando la biblioteca
GNU/Debian e interconectados entre si mediante una
numrica optimizada para sistemas paralelos
red de 1 Gbit ethernet.
ScalaPack. Por razones de espacio, se omite la
presentacin del cdigo de esta versin.
6.3. Casos de Prueba
6. Experimentacin A continuacin se muestran las caractersticas
principales de las matrices empleadas en la pruebas
del algoritmo implementado. Estas matrices fueron
6.1. Datos tomadas de distintas reas y de distintas aplicaciones
con el fin de comprobar la generalidad del algoritmo
Se emplearon matrices provenientes de pruebas implementado. En total, se tomaron un total de dos
industriales y cientficas obtenidas de Matriz Market matrices, cuyas caractersticas principales se muestran
(http://math.nist.gov/MatrixMarket/), el cual es un en la siguiente tabla.
repositorio de datos para pruebas en el estudio
comparativo de algoritmos relacionados con el
lgebra lineal numrica.
Tabla 1 paralelo tal como ZPL. Tanto ScalaPack como ZPL
Matrices de prueba presentan una aceleracin a medida que aumentan el
nmero de procesadores utilizados, pero ScalaPack
Nombre Dimensin rea demuestra mejor rendimiento para cada uno de los
casos. Se observa que ZPL escala mejor para la
s1rmq4m1 5489x5489 Anlisis de Elementos
Finitos Tabla 2
dw8192 8192x8192 Guas de Onda Elctrica
Matriz dw8192 (5489x5489)

Tiempo Tiempo Aceleracin Eficiencia


Grid Procesos
ScalaPack ZPL ZPL ZPL
7. Resultados 1x1 1 73.04 341.48 1.00 1.000

En la Figura 11 se muestra una comparacin en 2x1 2 50.72 265.74 1.29 0.643


cuanto al nmero de lneas de cdigo entre el 3x1 3 35.84 243.43 1.40 0.468
algoritmo implementado en ZPL y el algoritmo 4x1 4 27.18 160.35 2.13 0.532
implementado con la biblioteca numrica ScalaPack.
5x1 5 21.27 175.68 1.94 0.389
6x1 6 17.65 174.24 1.96 0.327
7x1 7 14.89 152.31 2.24 0.320
8x1 8 13.16 94.29 3.62 0.453

Tabla 3
Matriz s1rmq4m1 (8192x8192)

Tiempo Tiempo Aceleracin Eficiencia


Grid Procesos
ScalaPack ZPL ZPL ZPL
1x1 1 201.79 1311.83 1.00 1.000
2x1 2 119.22 917.82 1.42 0.710
3x1 3 95.76 722.79 1.84 0.613
Fig. 11. Comparacin de lneas de cdigo entre el 4x1 4 70.24 547.14 2.39 0.598
algoritmo de factorizacin LU en ZPL y ScalaPack
5x1 5 57.61 494.69 2.65 0.530
6x1 6 47.06 492.91 2.79 0.465
7x1 7 41.22 435.59 3.01 0.430
En las tablas 2 y 3 podemos observar el tiempo de 8x1 8 34.18 311.85 4.20 0.525
ejecucin, medido en segundos, del algoritmo
implementado aplicado a las matrices descritas segunda matriz de mayor tamao, lo cual es
anteriormente, tomando una grid de n x 1 consistente con la reduccin del costo de
procesadores, en estas mismas tablas se puede comunicacin respecto al cmputo til del algoritmo
observar la aceleracin y la eficiencia obtenida. En las sobre una cantidad de datos mayor (ver aceleracin y
Figuras 12, 13, se grafican los resultados mostrados eficiencia de Tabla 3 respecto a Tabla 2).
de la Tabla 2. Por razones de espacio, se omiten las
grficas correspondientes la Tabla 3. Sin embargo, las Sin embargo, an as podemos cuantificar cmo el
mismas presentan un comportamiento similar a las rendimiento de ZPL siempre se mantiene debajo de
Figuras de la Tabla 2, con la salvedad que ZPL un orden de magnitud de diferencia (<10X) respecto a
mejora su rendimiento para esta matriz de mayor ScalaPack (tercera y cuarta columnas en Tablas 2 y
tamao. 3), con la ventaja que el cdigo ZPL para la
factorizacin LU es bastante compacto en
comparacin con ScalaPack, tal como revela la
8. Discusin de los resultados substancial diferencia de lneas de cdigo (Figura
11), y la total ausencia de directivas o llamadas a
Las Figuras 12 y 13 evidencian un mejor funciones de comunicacin o sincronizacin.
rendimiento de la librera ScalaPack respecto a Adicionalmente, para poder emplear la biblioteca
nuestra versin ZPL, lo cual era esperado por ScalaPack, el programador requiere de conocimientos
nosotros debido al carcter optimizado de la adicionales sobre el particionamiento de la matriz y la
biblioteca matemtica frente al caracterstico estructura de la puesta de ejecucin, sin embargo, al
overhead que presenta un lenguaje de programacin
emplear el lenguaje de programacin ZPL, estos usando un cluster propietario marca Sun basado en
detalles son ocultos para el programador. procesadores dual Opteron.
La situacin planteada anteriormente se repite para Consideramos que la implementacin cumpli el
la otra matriz de prueba (Tabla 3) aunque para este objetivo primordial de lograr reducir los tiempos de
caso, en comparacin con el primero se puede notar ejecucin al generar un cdigo paralelo sencillo y de
que el comportamiento de la implementacin con ZPL fcil ejecucin que delega al lenguaje de
es mejor, tanto en linealidad como en mayor programacin los problemas de configuracin de
eficiencia. hardware y particionamiento de datos.
Si bien el cluster Nimbus de 8 procesadores
muestra disminucin en los tiempos de ejecucin
hasta el octavo procesador, fue posible corroborar que
haba mejora en los tiempos de ejecucin usando un
mayor nmero de procesadores, lo cual muestra que
la implementacin hace un uso adecuado de la
comunicacin entre procesadores.
A medida que se aumenta el tamao de la matriz,
ZPL permite mejorar el desempeo en cuanto a
aceleracin y rendimiento, lo cual ya se coment en la
parte de resultados.

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.

Das könnte Ihnen auch gefallen