Vous êtes sur la page 1sur 4

1

Multiplicacion matricial paralelizada usando


Procesos e Hilos en C
Alejandro Recaman, Diego Hincapie
Universidad Nacional Bogota, Colombia
Email:jarecamang@unal.edu.co, dfhincapiem@unal.edu.co

ResumenParalelizacion de multiplicacion matricial para hacerla mas rapida utilizando metodos propios, con ayuda del
lenguaje de programacion C y el uso de Procesos e Hilos.

I.

.
I NTRODUCCI ON

La computacion paralela se define como un conjunto de


instrucciones, las cuales son ejecutadas de forma simultanea,
tomando como principio el hecho de que un problema grande
puede ser dividido en problemas mas pequenos, que pueden
ser resueltos simultaneamente. El interes en el paralelismo
ha crecido en los u ltimos anos debido a la limitacion fsica
que supone el aumento de la frecuencia del reloj en un
procesador, por lo que los procesadores multinucleo han sido
la arquitectura dominante durante los u ltimos anos. De esta
manera se plantea el problema de la multiplicacion matricial,
conocido por ser repetitivo y bastante largo en su ejecucion,
aumentando significativamente su tiempo de ejecucion si el
tamano de las matrices aumenta. Paralelizar es una gran idea
para resolver este problema de manera rapida, sin embargo,
debemos tener en cuenta diversos conceptos como la Ley de
Amdahl para saber hasta que punto es buena idea paralelizar.

Figura 1: Producto matricial


Paralelizacion del metodo de Strassen.
Para multicomputadores
Simple basado en el secuencial.
Con particionamiento en bloques.
Cannon.
Fox.
DNS
Pero no profundizaremos en ellos, pues el algoritmo usado
por nosotros es el Simple basado en el secuencial.
I-B.

I-A.

Multiplicacion Matricial

La multiplicacion o producto de matrices es la operacion de


composicion efectuada entre dos matrices, o bien la multiplicacion entre una matriz y un escalar segun unas determinadas
reglas.
Al igual que la multiplicacion aritmetica, su definicion es
instrumental, es decir, viene dada por un algoritmo capaz de
efectuarla. El algoritmo para la multiplicacion matricial es
diferente del que resuelve la multiplicacion de dos numeros.
La diferencia principal es que la multiplicacion de matrices
no cumple con la propiedad de conmutatividad.
Consiste en que el elemento en la posicion ii de la matriz C
es el resultado del producto escalar entre la fila i de la matriz
A y la columna i de la matriz B. Esto se puede ver de mejor
manera en la Figura 1.
I-A1. Metodos.: Se puede hacer de la manera comun, como se muestra en la Figura 1 o existen diferentes metodos para
realizarla de manera paralela. Existen diferentes algoritmos
para paralelizar dependiendo de la necesidad. Por ejemplo:
Para multiprocesadores
Simple basado en el secuencial.
Divide y Venceras recursivo.

Ley de Amdahl

Llamada as por el arquitecto de computadores Gene Amdahl, se utiliza para conocer el rendimiento maximo de un
sistema cuando solo una parte de e ste es paralelizado. La
mejora obtenida en el rendimiento de un sistema debido a
la alteracion de uno de sus componentes esta limitada por la
fraccion de tiempo que se utiliza dicho componente.
La formula original de la ley de Amdahl es la siguiente:
Fm
F = Fa ((1 Fm ) + A
)
m
Siendo Fm = tiempo de ejecucion mejorado y Fa =Tiempo
de ejecucion antiguo.
I-C.

Paralelismo, una breve explicacion

Las instrucciones con la que estan compuestas un programa


de computador pueden reordenarse y combinarse en grupos
que luego son ejecutadas en paralelo sin cambiar el resultado
del programa. Esto se conoce como paralelismo a nivel de instruccion. Los avances en el paralelismo a nivel de instruccion
dominaron la arquitectura de computadores desde mediados
de 1980 hasta mediados de la decada de 1990.
Por otra parte el paralelismo de tareas es un paradigma de la
programacion concurrente que basicamente consiste en asignar
distintas tareas a cada uno de los procesadores de un sistema

Figura 2: Producto matricial


de computo. El resultado es que, cada procesador efectuara su
propia secuencia de operaciones.
En su modo mas general, el paralelismo de tareas se representa mediante un grafo de tareas, el cual es subdividido en
subgrafos que son luego asignados a diferentes procesadores.
De la forma como se corte el grafo, depende la eficiencia de
paralelismo resultante.
II.

DEL ALGORITMO .
PARALELIZACI ON

El problema consiste en multiplicar dos matrices de tamano


NxN y maximizar el desempeno por medio de la paralelizacion, en nuestro caso utilizamos el metodo de multiplicacion
tradicional pero paralelizado, teniendo una seccion o un numero de filas de la matriz A, y la matriz B completa, de esta
manera podemos realizar la multiplicacion de manera paralela,
asignando a cada Hilo o Proceso una cierta cantidad de filas
de la matriz A, para que luego se opere y este resultado se
guarde en la matriz C. Su funcionamiento es mas claro viendo
la Figura 2.
Debido en que el ejercicio requera la utilizacion de matrices
de tamano 1024x1024 se requirio entonces la funcion malloc()
que nos permite hacer uso de la memoria dinamica.
III.

E XPERIMENTOS Y RESULTADOS .

Teniendo los algoritmos correctamente planteados, decidimos empezar a realizar las pruebas. El proceso que realizamos
fue utilizar el comando time de Ubuntu, que se encarga
de medir el tiempo de ejecucion de un programa, y para
tener una mayor confiabilidad, realizamos varias mediciones y
promediamos el tiempo. Podemos ver estos datos en las Tablas
1 al 4.
Podemos ver claramente que para matrices grandes, los
tiempos se reducen considerablemente mediante el uso de paralelismo, sin embargo, teniendo en cuenta la ley de Amdahl,
existe un punto en el que la paralelizacion encuentra un limite, por lo que es recomendable no seguir utilizando recursos
para intentar mejorar el tiempo, pues llega a una cota inferior
de la que no puede disminuir. Podemos verlo muy claramente
en las matrices grandes. Para el uso de procesos, podemos ver
perfectamente como el tiempo disminuye a la mitad en las
matrices mas grandes que 64*64, lo que nos da una muestra
clara de que la paralelizacion si da resultado. Por ejemplo, el
tiempo que le toma a un proceso multiplicar una matriz de
1024*1024 es de 58.648 segundos aproximadamente, pero, al
paralelizar el algoritmo, y utilizar dos procesos, este tiempo
se reduce a mas de la mitad, llegando a tener una duracion en
promedio de 26.548 segundos.
Similarmente ocurre con el uso de Hilos, en donde claramente se puede evidenciar el decrecimiento del tiempo. Si

vemos las tablas 2 a 4, podemos ver que el tiempo que le toma


a un solo hilo para evaluar el resultado de la multiplicacion es
de 49.874 segundos en promedio, pero a medida que se van
aumentando hilos, con el fin de paralelizar la multiplicacion
vemos una evidente reduccion, adicionalmente podemos observar la ley de Amdahl de manera perfecta, pues vemos que
despues de un punto, se llega a una cota inferior de duracion,
adicionalmente se puede ver como si se aumenta el numero
de hilos, el tiempo no disminuye, e incluso tiende a aumentar
por el coste de tiempo que puede generar la creacion de un
nuevo hilo.
Matriz\Procesos
4
8
16
32
64
128
256
512
1024

1
0.001
0.001
0.002
0.002
0.006
0.023
0.155
1.353
58.684

2
0.002
0.002
0.002
0.002
0.004
0.015
0.084
0.742
26.548

4
0.002
0.002
0.002
0.002
0.005
0.015
0.081
0.702
18.412

Cuadro I: Tabla tiempos Procesos

Matriz \Hilos
4
8
16
32
64
128
256
512
1024

1
0.002
0.002
0.002
0.003
0.008
0.035
0.2
1.572
49.874

2
0.002
0.002
0.003
0.003
0.007
0.027
0.101
0.831
32.427

4
0.002
0.002
0.003
0.003
0.006
0.023
0.096
0.707
22.832

8
0.002
0.003
0.003
0.006
0.023
0.104
0.704
19.916

Cuadro II: Tabla tiempos Hilos 1

Matriz \Hilos
4
8
16
32
64
128
256
512
1024

16
0.003
0.004
0.005
0.021
0.1
0.694
19.249

32
0.005
0.008
0.019
0.098
0.691
22.821

64
0.012
0.022
0.098
0.706
22.227

128
0.03
0.107
0.685
25.512

Cuadro III: Tabla tiempos Hilos 2

Matriz \Hilos
4
8
16
32
64
128
256
512
1024

256
0.123
0.706
23.523

512
0.716
21.185

1024
23.61

Cuadro IV: Tabla tiempos Hilos 3

III-A.

Consideraciones a tener en cuenta

Cabe aclarar que todos estos experimentos se realizaron


usando dos computadores con especificaciones tecnicas muy
similares, con una tarjeta RAM de 4 GB y un procesador Intel
Core i3, por lo que estos tiempos pueden variar si se utilizan
maquinas de mejores prestaciones, o de menor rendimiento.
III-B.

Donde tenemos que T (n) =tiempo de ejecucion del mejor


programa secuencial. Tp (n) = tiempo de ejecucion con P
procesadores.

Hilos
Speedup

Mediciones de rendimiento

2
0.76901964

4
0.35506087

4
2.184390329

8
2.504217714

16
2.59099174

Cuadro IX: Tabla Speedup Hilos 1

Para la medicion de rendimiento intuitivamente podemos


optar por las mediciones de tiempo que se realizan a traves
del SO como la funcion time, sin embargo existen otras
mediciones de rendimiento las cuales nos seran de utilidad
en nuestro analisis de proyecto,
Como mencionamos anteriormente la ley de Amdahl la
podemos reescribir de esta manera, lo cual nos determina el
incremento de la velocidad:
1
A = Fa ((1Fm )+F
m /Am )
Donde A es la ganancia del sistemas debido a la mejora de
los subsistemas, Fm es el tiempo de ejecucion mejorado, Fa
tiempo de ejecucion antiguo y Am es el factor de mejora que
se ha introducido en el sistema mejorado.
Otra manera de medicion es la Eficiencia:
Cp (n) = P Tp (n)
Donde tenemos que C = costo, P = numero de procesadores
y n = tamano.
Hilos
Eficiencia

2
1.538039288

8
0.14330186

Hilos
Speedup

32
2.185443232

64
2.243847573

128
1.954923173

256
2.120222761

Cuadro X: Tabla Speedup Hilos 2

Hilos
Speedup

512
2.354212886

1024
2.112409996

Cuadro XI: Tabla Speedup Hilos 3

16
0.064665696

Cuadro V: Tabla Eficiencia Hilos 1

Hilos
Eficiencia

32
0.026358671

64
0.0160425

128
0.00680650

256
0.00423654

Cuadro VI: Tabla Eficiencia Hilos 2

Se puede observar como el ndice SpeedUp tiende a un valor


como 2, se puede deducir entonces que aproximadamente el
codigo que es paralelizable correspande a 0,5 del codigo en
total.
Siendo F = 0,5, codigo No paralelizable
2 = 1/F

Hilos
Eficiencia

512
0.002168674032

1024
0.0008762590666

Cuadro VII: Tabla Eficiencia Hilos 3

Procesos
Eficiencia

2
1.105243333

4
0.7209428633

Procesos
Speedup

2
2.210486666

4
3.187269172

Cuadro XII: Tabla Speedup Procesos

Cuadro VIII: Tabla Eficiencia Procesos


Basicamente lo que estamos midiendo en eficiencia es
que tan efectivo estoy siendo al utilizar mas paralelizacion;
procesadores o hilos, mientras el ndice se acerque al 100 %
es decir al 1 idealmente estoy siendo un 100 % efectivo,
podemos observar como la maxima eficiencia la obtengo
al aumentar a 2 procesadores, sin embargo a medida que
aumento la paralelizacion es interesante observar como la
eficiencia disminuye.
Finalmente contamos con el SPeedUp:
Sp (n) = T (n)/Tp (n)

Podemos observar en las tablas V a VII como el rendimiento


aumenta considerablemente a medida que se paraleliza el
sistema, como lo demuestra el ndice SpeedUp de Hilos, donde
el valor con el uso de 2 procesadores es de 1.53, tambien
cabe resaltar el hecho de que a medida que la paralelizacion
aumenta el ndice tiende acercarse a 2, se observa el mismo
patron en la segunda tabla de procesos, a medida que se
aumenten los procesos de paralelizacion el speedup tendera a
un valor, aunque los valores de aproximacion varan en las
dos tablas, se debe a que son codigos distintos y por ello los
ndices de codigo de paralelizacion varan.

observa como el speedup tiende a un valor cercano a 2


comprobando la ley de amdhal.
En las pruebas de rendimiento encontramos resultados
de rendimiento que tienden a ser constantes conforme se
aumenta el numero de procesos paralelos, lo podemos
observar en el ndice SpeedUp y en el de Eficiencia, nos
lleva a la conclusion de que llegado cierto momento un
programa no puede ser mas paralelizable.
En la prueba de rendimiento, debido a la ley de Amdhal
se llego a la conclusion que el SpeedUp al tender un
valor cercano a 2, representa que nuestro codigo de hilos
estaba paralelizable aproximadamente un 50 %.

B IBLIOGRAFI A
Figura 3: Idea ley de Amdahl

60

Linea Procesos
Linea Hilos

Tiempo

50
40
30
20
1

1,5

2,5

3,5

Cantidad
En la grafica se puede observar una comparacion de la
duracion en tiempo de ejecucion de Procesos V S Hilos, para
matrices de tamano 1024 1024, como podemos ver, a medida
que se aumenta el numero de hilos y/o procesos, el tiempo se
reduce considerablemente hasta llegar a un lmite inferior.
La grafica 3 resume la idea conceptual de la ley de amdhal,
vemos como el aumento del procesamiento paralelo tiende a
una grafica logaritmica, debido a que se llega al punto que no
de puede paralelizar mas un algoritmo.
C ONCLUSIONES .
Se logro comprobar la interpretacion de la Ley de Amdhal; en la cual se llega a un punto en el cual no se
puede paralelizar mas un algoritmo, se observo que la
mejora del rendimiento reduca los tiempos de ejecucion
el alrededor del 50 % y a pesar de aumentar los procesos
de paralelizacion, el tiempo de ejecucion tenda a una
asntota.
Se logro observar como la paralelizacion mejora notablemente el rendimiento de los programas concretamente
en el ejercicio de hilos se alcanzo mejoras con respecto
de 1,53x de tiempo con solo 2 hilos, sin embargo se

https://es.wikipedia.org/wiki/Ley de Amdahl
https://es.wikipedia.org/wiki/Computaci %C3 %B3n paralela
https://conceptosarquitecturadecomputadoras.wordpress.com/
computacion-paralela/
Analisis de rendimiento de programas paralelos, Cesar
Pedraza Bonilla, 2015

Vous aimerez peut-être aussi