e5 pthread openmp mpi molinas luque

13
Multiplicación de Matrices con Pthreads, OpenMP y MPI  Roxana Luque Ingeniería en Informática Facultad Politécnica Universidad Nacional de Asunción San Lorenzo, Paraguay [email protected] Nelson Molinas Ingeniería en Informática Facultad Politécnica Universidad Nacional de Asunción San Lorenzo, Paraguay [email protected] RESUMEN En este trabajo, se propone la implementación de algoritmos que rea lizan la mul tip lic aci ón par alela de matrices cua dra das utili zando Pthreads, OpenMP y MPI. Así mismo, se prese ntan los resultados de algunas pruebas llevadas a cabo para analizar el rendimiento de cada algoritmo. Palabras Claves Pthread, OpenMP, MPI, matrices. 1. INTRODUCCIÓN En pr ogra mas de mput o numé ri co es muy común encontrar tareas que pueden ser realizadas en paralelo [1]. Para esto s casos resul ta muy útil lanza r threa ds y así realiz ar el  procesamiento en paralelo. En particular, se analiza el caso de un programa de mul tip lic aci ón de ma tri ces cua dra das en lenguaje C utilizando las librerías Pthread, OpenMP y MPI. Las dos primeras lib rer ía s est án bas ada s en el par adi gma de memoria compartida y la última en el p aso de mensajes. Lo s al gori tmos de mat ri ce s, y entr e el los los de mult ipli ca ci ón de ma tr ic es , ha n encont rado nume ros as aplic acio nes en la resol ución de proble mas tanto numé ricos , como aquellos que no son numéricos. La facilidad con que se  puede particionar el problema de multiplicar dos matrice s cuadradas, lo convierten en un candidato ideal para estudiar los conceptos de computación paralela, y permiten que sea fácil formular algoritmos que aprovechen los recursos de un entorno  paralelo. El docume nt o se di vide en di ve rs as se cc iones,  primerament e se da una breve introducción a las librerías, a continuac ión una compar ac ión ent re ell as y por últ imo los resul tados expe rime ntale s, concl usion es, refe renci as y como anexo los códigos fuentes. 2. PTHREADS Los hilos compa rten un espacio de me moria común y con fre cue nci a son prog ramados (sc hed ule d) dentro de un sol o  proceso, de forma que se evitan un montón de las ineficiencias de múltiples procesos [2]. Los hilos en un mismo proceso comparten: Instrucciones del proceso La mayor parte de los datos Archivos abiertos (descriptores o “descriptors”) Señales y manejadores de señales (“signal handlers”) El directorio actual de trabajo ID del usuario y del grupo Pthreads es un conjunto de interfaces para hilos desarrolladas  por el IEEE, que a cargo de la especifica ción de un sistema opera tivo porta ble (Portab le Operat ing Syst em Inte rface - POSIX). La P en Pthreads significa POSIX y, de hecho, en ocasiones a Pthreads se le llama hilos POSIX. En esencia, el comité POSIX def ine un conjunt o bás ico de funciones y estructuras de datos que se espera que sea aprobado por los numerosos vendedores para que el código de hilos pueda ser  portado fácilmente a través de los sistemas operativos. El sueño de la c omisión fue conce bido por los vendors de UNIX que en su mayoría implementaron Pthreads. (La excepción notable es Sun, que sigue prefiriendo a los hilos Solaris* como su principal API de hilos). La portabilidad de Pthreads se ha ampliado aún más por la adopción de Linux y un puerto para plataformas Windows. Pthread esta definido como un conjunto de tipos y llamados a  procedimientos del lenguaje C, implementado en el encabezado del archivo vía inc lude con pthread.h, que es la librería que nos  pone a disposición todos los tipos y procedimientos para usar hilos en un programa. 2.1 Imp leme ntación con Pthreads Para realiza r la impl eme ntaci ón con Pthreads se modif icó la funci ón que multipli ca mat rice s para que reco rra la primera ma tri z des de y has ta una s fil as pas ada s como par ámetro. También se tuvo que modificar el código que invocaba a esa función para que cree los threads invocando para cada uno de ellos a la función que realiza el producto con una parte distinta de la matriz. Se utilizó el Compilador gcc y la librería Pthreads de Linux para compilar y ejecutar el programa. 3. OPENMP Con OpenMP [4], los threads son distribuidos y ejecutados en dife rente s proce sadore s, reduc iendo el tie mpo de ejec ución haciendo que s ciclos de procesos est én dis poni ble s por unidad de tiempo. Los resultados de cada ejecución de threads  pueden luego ser combinados. Un usuario puede establecer los números de threads creados para regiones paralelas. OpenMP es una interfaz de programación de aplicaciones (API)  para la programación multiproceso de memoria compartida en múl tip les pla taf ormas. Per mit e aña dir concurrencia a los

Upload: nelson182py

Post on 13-Apr-2018

239 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: E5 Pthread OpenMP MPI Molinas Luque

7/25/2019 E5 Pthread OpenMP MPI Molinas Luque

http://slidepdf.com/reader/full/e5-pthread-openmp-mpi-molinas-luque 1/13

Multiplicación de Matrices con Pthreads, OpenMP y MPI 

Roxana LuqueIngeniería en Informática

Facultad Politécnica

Universidad Nacional de AsunciónSan Lorenzo, Paraguay

[email protected]

Nelson MolinasIngeniería en Informática

Facultad Politécnica

Universidad Nacional de AsunciónSan Lorenzo, Paraguay

[email protected]

RESUMENEn este trabajo, se propone la implementación de algoritmos que

realizan la multiplicación paralela de matrices cuadradas

utilizando Pthreads, OpenMP y MPI. As mismo, se presentan

los resultados de algunas pruebas lle!adas a cabo para analizar

el rendimiento de cada algoritmo.

Palabras ClavesPthread, OpenMP, MPI, matrices.

1. INTRODUCCIÓNEn programas de cómputo num"rico es muy com#n

encontrar tareas que pueden ser realizadas en paralelo $%&. Para

estos casos resulta muy #til lanzar threads y as realizar el

 procesamiento en paralelo. En particular, se analiza el caso de

un programa de multiplicación de matrices cuadradas en

lenguaje ' utilizando las libreras Pthread, OpenMP y MPI. (as

dos primeras libreras est)n basadas en el paradigma de

memoria compartida y la #ltima en el paso de mensajes.

(os algoritmos de matrices, y entre ellos los de

multiplicación de matrices, han encontrado numerosas

aplicaciones en la resolución de problemas tanto num"ricos,

como aquellos que no son num"ricos. (a *acilidad con que se puede particionar el problema de multiplicar dos matrices

cuadradas, lo con!ierten en un candidato ideal para estudiar los

conceptos de computación paralela, y permiten que sea *)cil

*ormular algoritmos que apro!echen los recursos de un entorno

 paralelo.

El documento se di!ide en di!ersas secciones,

 primeramente se da una bre!e introducción a las libreras, a

continuación una comparación entre ellas y por #ltimo los

resultados e+perimentales, conclusiones, re*erencias y como

ane+o los códigos *uentes.

2. PTHREADS(os hilos comparten un espacio de memoria com#n y con

*recuencia son programados scheduled- dentro de un solo

 proceso, de *orma que se e!itan un montón de las ine*iciencias

de m#ltiples procesos $&.

(os hilos en un mismo proceso comparten/

• Instrucciones del proceso

• (a mayor parte de los datos

• Archi!os abiertos descriptores o 0descriptors1-

• 2e3ales y manejadores de se3ales 0signal handlers1-

• El directorio actual de trabajo

• I4 del usuario y del grupo

Pthreads es un conjunto de inter*aces para hilos desarrolladas

 por el IEEE, que a cargo de la especi*icación de un sistema

operati!o portable Portable Operating 2ystem Inter*ace 5

PO2I6-. (a P en Pthreads signi*ica PO2I6 y, de hecho, en

ocasiones a Pthreads se le llama hilos PO2I6. En esencia, el

comit" PO2I6 de*ine un conjunto b)sico de *unciones yestructuras de datos que se espera que sea aprobado por los

numerosos !endedores para que el código de hilos pueda ser

 portado *)cilmente a tra!"s de los sistemas operati!os. El sue3o

de la comisión *ue concebido por los !endors de 78I6 que en

su mayora implementaron Pthreads. (a e+cepción notable es

2un, que sigue pre*iriendo a los hilos 2olaris9 como su principal

API de hilos-. (a portabilidad de Pthreads se ha ampliado a#n

m)s por la adopción de (inu+ y un puerto para plata*ormas

:indo;s.

Pthread esta de*inido como un conjunto de tipos y llamados a

 procedimientos del lenguaje ', implementado en el encabezado

del archi!o !a include con pthread.h, que es la librera que nos

 pone a disposición todos los tipos y procedimientos para usar

hilos en un programa.

2.1 Implementac!n c"n Pt#rea$sPara realizar la implementación con Pthreads se modi*icó la

*unción que multiplica matrices para que recorra la primera

matriz desde y hasta unas *ilas pasadas como par)metro.

<ambi"n se tu!o que modi*icar el código que in!ocaba a esa

*unción para que cree los threads in!ocando para cada uno de

ellos a la *unción que realiza el producto con una parte distinta

de la matriz.

2e utilizó el 'ompilador gcc y la librera Pthreads de (inu+ para

compilar y ejecutar el programa.

%. OPENMP'on OpenMP $=&, los threads son distribuidos y ejecutados en

di*erentes procesadores, reduciendo el tiempo de ejecución

haciendo que m)s ciclos de procesos est"n disponibles por

unidad de tiempo. (os resultados de cada ejecución de threads

 pueden luego ser combinados. 7n usuario puede establecer los

n#meros de threads creados para regiones paralelas.

OpenMP es una inter*az de programación de aplicaciones API-

 para la programación multiproceso de memoria compartida en

m#ltiples plata*ormas. Permite a3adir concurrencia a los

Page 2: E5 Pthread OpenMP MPI Molinas Luque

7/25/2019 E5 Pthread OpenMP MPI Molinas Luque

http://slidepdf.com/reader/full/e5-pthread-openmp-mpi-molinas-luque 2/13

 programas escritos en ', '>> y ?ortran sobre la base del

modelo de ejecución *or@5join. Est) disponible en muchas

arquitecturas, incluidas las plata*ormas de 7ni+ y de Microso*t

:indo;s. 2e compone de un conjunto de directi!as de

compilador, rutinas de biblioteca, y !ariables de entorno que

in*luencian el comportamiento en tiempo de ejecución.

%.1 Implementac!n c"n OpenMPPara la implementación de la multiplicación de matrices con

OpenMP se propone una estrategia que consiste en asignar un

n#mero de *ilas de la primer matriz a cada thread para que cada

uno se encargue #nicamente de ellas.

Para hacer que OpenMP distribuya el programa de

multiplicación de matrices entre multiples threads solo hace

*alta agregar justo antes del código del ciclo principal de la

multiplicación una directi!a para que el compilador se encargue

de todo. Esto *acilita muchsimo la programación, ya que no hay

que modi*icar el código para que maneje los threads, sino que

toda la preocupación esta en programar bien el algoritmo,

dejando para OpenMP el trabajo de la creación y administración

de los threads.

2e utilizó el 'ompilador gcc y la librera OpenMP de (inu+

 para compilar y ejecutar el programa.

&. MPIMPI no es un nue!o leguaje de programación, es una librera de

*unciones a la que podemos llamar desde ' ó ?ortran. Esta

 basada en paso de mensajes, la *orma m)s potente y aceptada

 para programar sistemas paralelos y permite abstraer la gran

cantidad de detalles que la programación paralela conlle!a. 2u

!entaja m)s inmediata es su implementación y portabilidad a

una gran !ariedad de sistemas/ desde m)quinas con memoria

compartida Origin- hasta una red de estaciones de trabajo

$B&.

Aunque e+isten otros en*oques de la programación en paralelodirecti!as de memoria compartida, como OpenMP-, el paso de

mensajes es considerado por algunos como el ensamblador de la

 programación paralela, por el grado de acercamiento a la

estructura paralela de nuestro programa, manteni"ndonos a sal!o

de los problemas de implementación en cada tipo de m)quina.

Ejecutando un programa en MPI, cada procesador tiene una

copia de nuestro programa. <odos los procesadores comienzan a

ejecutar el mismo listado del programa, pero cada proceso

ejecutar) distintas sentencias del programa, por bi*urcaciones

introducidas basadas en el rango del proceso el rango identi*ica

a cada proceso-. 4e esta *orma, cada procesador ejecuta el

mismo programa, pero har) di*erentes cosas dependiendo del

 procesador donde se ejecuta.

&.1 Implementac!n c"n MPIPara la implementación de multiplicación de matrices tenemos

un proceso maestro, el cual distribuye las distintas tareas al resto

de procesos y !arios procesos ;or@er quienes calculan un cierto

n#mero de *ilas de la matriz resultante y reen!a el resultado

 parcial al proceso maestro.

2e utilizó el 'ompilador gcc y la librera MPI de (inu+ para

compilar y ejecutar el programa.

'. OPENMP (ERSUS PTHREAD(ERSUS MPI2e di*erencian principalmente en el comportamiento en el ni!el

de control que se quiere sobre la paralelización. OpenMP es

 buensimo si todo lo que se necesita hacer es colocar algunas

directi!as Cpragma para tener una !ersión paralela de un código

serial r)pidamente. Ahora para realizar cosas m)s interesantescomo codi*icación de colas complejas, se puede utilizar

OpenMP pero sera m)s directa y *)cil la utilización de Pthreads

$D&.

OpenMP pro!ee caractersticas reducidas, es decir se consigue

muchas *uncionalidades con mucho menos trabajo.

OpenMP es mucho alto ni!el de Pthread. Es *)cil de usar, basta

con a3adir algunas directi!as. Por otro lado, Pthread le da m)s

control de su código y se puede aprender y entender lo que est)

sucediendo en un algoritmo paralelo.

(as directi!as Cpragma de OpenMP tienen otra !entaja cla!e/ se

 puede deshabilitar el soporte para OpenMP, el código puede ser

compilado como una aplicación serial.

Ambas API son port)tiles, pero Pthreads o*rece una gamamucho mayor de *unciones primiti!as que proporcionan un

control m)s preciso sobre las operaciones de sobre hilos.

'abe mencionar que una de las !entajas de Pthreads sobre

OpenMP es que el programador tiene un mayor control sobre la

creación, destrucción y el comportamiento de los hilos, ya que la

gestión de un hilo est) en un ni!el m)s bajo en Pthreads que en

OpenMP.

En cuanto a MPI se puede decir que necesita que su proceso

maestro haga #nicamente un trabajo espec*ico. (a razón detr)s

de esto es reducir la sobrecarga en paralelo. Por lo tanto, el

 proceso maestro puede centrarse sólo en la gestión y

distribución de datos.

A di*erencia de MPI en OpenMP y Pthreads, la gestión de

 procesos y sincronización se realiza en la misma memoria esdecir memoria compartida- y no sólo el hilo principal sino todos

los hilos tambi"n son responsables de la sincronización de

subprocesos.

Algunas !entajas podran ser que con MPI es m)s *)cil de

entender cómo se distribuye los datos y cuanto tiempo se uso y

que tiene muchas de las herramientas disponibles para ayudar al

 programador. (as des!entajas es que tiene una codi*icación

compleja de leer, escribir y mantener.

). RESU*TADOS E+PERIMENTA*ESEn la siguiente tabla se obser!a el entorno de ejecución utilizado

 para realizar las pruebas.

2e implementaron tres aplicaciones en lenguaje ', siendo el

código *uente cada una de las siguientes/ pthreadmmult.c,

Pr"cesa$"r Mem"ra Dsc" D,r" S.O.

IntelF 'oreG iD5

M=H =J

44KH

L44 DJ7buntu

%%.D'P7 , Lz, HMJ

'ache rpm

Page 3: E5 Pthread OpenMP MPI Molinas Luque

7/25/2019 E5 Pthread OpenMP MPI Molinas Luque

http://slidepdf.com/reader/full/e5-pthread-openmp-mpi-molinas-luque 3/13

ompmmult.c y mpimmult.cN con sus respecti!os ejecutables

 pthreadmmult, ompmmult y mpimmult.

(as aplicaciones se encargan de calcular la multiplicación de

dos matrices cuadradas, la primera utiliza la librera pthread.h, la

segunda omp.h. y la tercera mpi.h para calcular el desempe3o de

la multiplicación utilizando estos tres en*oques.

2e ejecutaron las aplicaciones tomando como *actores ladimensión de la matriz y la cantidad de hilos a utilizar. (os

ni!eles para estos *actores son para dimensión de matriz/

DB+DB, D%+D%, %=+%=, =+=. para cantidad de

hilos/ , =, y %B. (as pruebas se ejecutaron probando cada

ni!el de dimensión de matriz con cada ni!el de cantidad de hilo.

Es decir, se ejecutaron las aplicaciones para una dimensión de

DB+DB con hilos, con = hilos, con hilos y con %B hilos.

Esto sucesi!amente por cada ni!el del *actor dimensión de

matriz. (a m"trica utilizada es el tiempo de respuesta. En las

<abla %, y HN se puede !er el resultado de estas pruebas.

Tabla 1.Temp" $e resp,esta para Pt#rea$

  2 #l"s & #l"s - #l"s 1) #l"s

2') %=B B BD B='12 %% BB D D

12& HDB %D %BB %

2&- HHB %DH= %DHH %D=BQQ

2e puede !er que a medida que aumenta el tama3o de la matriz

aumenta el tiempo de respuesta. 'on relación a si la

 paralelización a porta o no alg#n bene*icio, se podra !er que en

algunos casos se consigue un mejor tiempo, sin embargo como

las pruebas se realizaron en una maquina de un solo procesador

estos resultados no son concisos.

En la ?igura % se obser!a los !alores obtenidos en la tabla

anterior para los distintos tama3os de matrices y cantidades dehilos con Pthreads.

PTHREADS

1

10

100

1000

10000

100000

1000000

2 hilos 4 hilos 8 hilos 16 hilos

Nro. de Hilos

   T   i  e  m  p  o   d  e  r  e  s  p  u  e  s   t  a

256

512

1024

2048

/0,ra 1. Temp" $e resp,esta en mlse0,n$"s paraPt#rea$s.

Obser!ando los resultados obtenidos con Pthreads se puede !er

que a medida que se incrementa el tama3o de las matrices

tambi"n aumenta el tiempo de ejecución, en donde se nota

mayor di*erencia es cuando se pasa de una matriz de tama3o D%

a una matriz de tama3o %=.

Tabla 2.Temp" $e resp,esta para OpenMP

  2 #l"s & #l"s - #l"s 1) #l"s

2') %= B% H

'12 %=%= BB DDQ D

12& H%=H %DQH %==D %=H%

2&- H%DHH %B%% %DHB% %DBHBB

En la ?igura se obser!a los !alores obtenidos en la tabla

anterior para los distintos tama3os de matrices y cantidades de

hilos con OpenMP.

OPENMP

1

10

100

1000

10000

100000

1000000

2 hilos 4 hilos 8 hilos 16 hilos

Nro. de Hilos

   T   i  e  m  p  o   d  e  r  e  s  p  u  e  s   t  a

256

512

1024

2048

/0,ra 2. Temp" $e resp,esta en mlse0,n$"s paraOpenMP.

Obser!ando los resultados obtenidos con OpenMP se puede !er

que son relati!amente parecidos a los obtenidos con Pthreads

 por lo cual podemos decir que se comporta de manera similar en

cuanto a tiempo de respuesta.

Tabla %. Temp" $e resp,esta para MPI

  2 #l"s & #l"s - #l"s 1) #l"s

2') = Q % =

'12 DHQ DBQ HQ%B BHB

12& %Q %%D%= %%H %HBDH

2&-  

En la ?igura H se obser!a los !alores obtenidos en la tabla

anterior para los distintos tama3os de matrices y cantidades de

hilos con MPI.

MPI

1

10

100

1000

10000

100000

1000000

2 hilos 4 hilos 8 hilos 16 hilos

Nro. de Hilos

   T   i  e  m  p  o   d  e  r  e  s  p  u  e  s   t  a

256

512

1024

2048

/0,ra %. Temp" $e resp,esta en mlse0,n$"s para MPI.

Page 4: E5 Pthread OpenMP MPI Molinas Luque

7/25/2019 E5 Pthread OpenMP MPI Molinas Luque

http://slidepdf.com/reader/full/e5-pthread-openmp-mpi-molinas-luque 4/13

Obser!ando las tablas y los gr)*icos se puede !er que el tiempo

de ejecución de OpenMP y Pthread son pr)cticamente iguales

 para un mismo tama3o de matriz, lo cual tiene sentido debido a

que se realizo el mismo particionamiento y adem)s OpenMP es

una capa que te abstrae de la necesidad de inicializar, crear,

liberar los hilos, sin embargo esta basado en Pthreads, en cuanto

a MPI podemos !er que los !alores de tiempo de ejecución son

m)s grandes que los obtenidos con OpenMP y Pthreads.

En las siguientes *iguras se muestra el tiempo de ejecución de

las aplicaciones implementadas en Pthreads, OpenMP y MPI

 para una misma dimensión de la matriz.

Multiplicación de matrices de 25!25

0

50

100

150

200

250

300

2 4 8 16

"antidad de Hilos

   T   i  e  m  p  o   d  e  r  e  s  p  u  e  s   t  a

Pthread

OpenMP

MPI

/0,ra &. Temp" $e resp,esta en mlse0,n$"s para lam,ltplcac!n $e ,na matr $e 2')2')

Para la ?igura =, se puede !er hubo una peque3a mejora con la

utilización de hilos de Pthread a OpenMP y una gran mejora

en MPI, sin embargo para y %B hubo un aumento grande de

tiempo de respuesta con MPI.

Multiplicación de matrices de 5#2!5#2

0

1000

2000

3000

4000

5000

6000

7000

2 4 8 16

"antidad de Hilos

   T   i  e  m  p  o   d  e  r  e  s  p  u  e  s   t  a

Pthread

OpenMP

MPI

 /0,ra '. Temp" $e resp,esta en mlse0,n$"s para la

m,ltplcac!n $e ,na matr $e '12'12

Para la ?igura D, de dimensión D%+D%, se puede !er que hubo

en todos los casos un gran aumento de tiempo de respuesta con

MPI para todas las cantidades de hilos, sin embargo para

Pthreads y OpenMP se obtu!ieron rendimientos similares.

Multiplicación de matrices de #$2%!#$2%

0

20000

4000060000

80000

100000

120000

140000

160000

2 4 8 16

"antidad de Hilos

   T   i  e  m  p  o

   d  e  r  e  s  p  u  e  s   t  a

Pthread

OpenMP

MPI

/0,ra ). Temp" $e resp,esta en mlse0,n$"s para lam,ltplcac!n $e ,na matr $e 12&12&

Para la ?igura B, se puede !er hubo una peque3a mejora para las

distintas cantidades de hilos , =, y %B- de OpenMP con

respecto a Pthreads. As tambi"n se obser!a que con MPI se

obtiene mayor tiempo de respuesta que los anteriores.

Multiplicación de matrices de 2$%&!2$%&

0

50000

100000

150000

200000

250000

300000

350000

2 4 8 16

"antidad de Hilos

   T   i  e  m  p  o   d  e  r  e  s  p  u  e  s   t  a

Pthread

OpenMP

MPI

 /0,ra 3. Temp" $e resp,esta en mlse0,n$"s para lam,ltplcac!n $e ,na matr $e 2&-2&-

Para la ?igura , se puede !er hubo un peque3o incremento en

el tiempo de ejecución de OpenMP con respecto a Pthreads para

y = hilos, sin embargo seg#n se puede obser!ar para y %B

hilos ambos muestran un tiempo de respuesta casi igual. Rer la

#ltima *ila de las <ablas %, y H.

3. CONC*USIONES'omo se pudo obser!ar, la di*erencia en los tiempos obtenidos

 por las implementaciones no *ue tan signi*icati!a, pero en la

mayora de los casos para este problema, Pthreads obtu!o

resultados ligeramente mejores que OpenMP, sin embargo hay

que resaltar que con MPI se obtu!ieron resultados de tiempo

muy ele!ados con respecto a los otros.

'omo las dimensiones de matrices aumentan, la di*erencia entre

el tiempo de ejecución tomada para el c)lculo de matrices con

OpenMP, P<hread y MPI aumenta signi*icati!amente. Adem)s

se puede !er que utilizando el mismo particionamiento en

OpenMP y Pthreads, estos tienen e+actamente el mismo

comportamiento teniendo as el mismo tiempo de ejecución.

OpenMP abstrae de las tareas habituales para el tratamiento de

hilos, lo que lo hace m)s *)cil de desarrollar, pero as tambi"n se

Page 5: E5 Pthread OpenMP MPI Molinas Luque

7/25/2019 E5 Pthread OpenMP MPI Molinas Luque

http://slidepdf.com/reader/full/e5-pthread-openmp-mpi-molinas-luque 5/13

tiene menos control sobre los hilos. Es decir, si se necesita un

control *ino sobre la paralelización se utilizara Pthreads y si se

necesita paralelizar lo m)s r)pido posible, por ejemplo ya se

 posee la aplicación serial, se utilizara OpenMP.

Si bien trabajar con Pthreads nos brinda mayor control respecto

de cómo asignar las partes de las matrices a cada thread, también

nos dificulta la tarea de paralelizar, teniendo que escribir mucho

código. Por otro lado OpenMP resuelve de manera simple latarea de paralelizar un código, haciendo que el programador

pueda concentrar sus energías en el algoritmo que esta

codificando y no en la creación y manipulación de threads.

-. RE/ERENCIAS$%& An Introduction to Parallel 'omputing. 2econd Edition.

Addison :esley

$& http/SS;;;.ibm.comSde!eloper;or@sSlinu+SlibrarySl5

 posi+%Sinde+.html

$H& http/SSes.;[email protected];i@iSMultiplicaci

T'HTJHndematrices

$=& http/SSes.;[email protected];i@iSOpenMP

$D& http/SSso*t;are.intel.comSen5usSarticlesSthreading5models5

*or5high5per*ormance5computing5pthreads5or5openmpS

$B& 4. an Mey, 0Matri+ multiplication using mpi.1

4. ANE+O CÓDI5OS /UENTES

4.1 Implementac!n c"n Pt#rea$s/*  ============================================================================

 NOMBRE: pthread_mmult.c

 AUTORES

  Roxana u!ue " Nel#on Mol$na#

 %ES&R'(&'ON

 Mult$pl$cac$on de matr$ce# con (thread#

 

Un$)er#$dad Nac$onal de A#unc$on " acultad (ol$tecn$ca

 &arrera: 'n+en$er$a 'n,ormat$ca

 Mater$a: Elect$)a - " Al+or$tmo# (aralelo#

 (ro,e#or: &hr$#t$an -on ucen

 Anho: 012

  ============================================================================

 */

 

3$nclude 4pthread.h5

3$nclude 4#tdl$6.h5

3$nclude 4#td$o.h5

3$nclude 4#7#/t$me6.h5

$nt h$lo#89=;<9<<1>?@ //&ant$dad de h$lo#

$nt **A< **B< **&@

$nt TAM@

#truct re+$#tro;

Page 6: E5 Pthread OpenMP MPI Molinas Luque

7/25/2019 E5 Pthread OpenMP MPI Molinas Luque

http://slidepdf.com/reader/full/e5-pthread-openmp-mpi-molinas-luque 6/13

  $nt uno@

  $nt do#@

?@

$nt **crearMatr$C ;

  $nt $@  $nt *)alore#< **temp@

  )alore# = $nt *C malloc TAM * TAM * #$eo,$ntCC@

 

temp = $nt **C malloc TAM * #$eo,$nt*CC@

  ,or$=0@ $ 4 TAM@ $DDC

  temp8$ = )alore#8$ * TAMC@

  return temp@

?

)o$d car+ar_matr$$nt **matr$< $nt TAMC

;

  $nt $< F< n = 0@

  ,or $=0@ $4TAM@ $DDC

  ,or F=0@ F4TAM@ FDDC

  matr$8$8F = $ntC randCG100@

?

)o$d* mmult )o$d* paramC;

  #truct re+$#tro *m_param=#truct re+$#tro *Cparam@

  $nt de#de = m_param"5uno * TAMC/m_param"5do#@

  $nt ha#ta = m_param"5unoD1C * TAMC/m_param"5do#@

  $nt $<F<@

  ,or $=de#de@ $4ha#ta@ $DDC

  ,or F=0@ F4TAM@ FDDC ;

  &8$8F=0@

  ,or =0@ 4TAM@ DDC

  &8$8F D= A8$8*B88F@

  ?

  return 0@

?

Page 7: E5 Pthread OpenMP MPI Molinas Luque

7/25/2019 E5 Pthread OpenMP MPI Molinas Luque

http://slidepdf.com/reader/full/e5-pthread-openmp-mpi-molinas-luque 7/13

$nt ma$n$nt ar+c< char *ar+)8C

;

  pthread_t *thread@ // puntero a un +rupo de h$lo#

  $nt $< F@

  #truct t$me6 t_$n$< t_,$n@ 

$, ar+c H= C ;

  pr$nt,IEFecutar: G# 4TAM5< donde TAM e# la d$men#$on de la matr$JnI<ar+)80C@

  ex$t1C@

  ?

 

// de,$n$endo el tamanho de la matr$

  TAM = ato$ar+)81C@

  #truct re+$#tro *dato#=#truct re+$#tro *Cmalloc#$eo,#truct re+$#troCC@  pr$nt,I"""""""""""""""""""""""""""""""""""""""""JnIC@

  pr$nt,IMult$pl$cac$on de matr$ce# de tamanho GdJnI<TAMC@

  pr$nt,I"""""""""""""""""""""""""""""""""""""""""JnIC@

  ,or F=0@ F4=K@FDDC

  ;

A = crearMatr$C@

  B = crearMatr$C@

  & = crearMatr$C@

  //&ar+ando la# matr$ce# con )alore#

  car+ar_matr$A< TAMC@

  car+ar_matr$B< TAMC@

)o$dC ,t$met_$n$C@

  thread = pthread_t *C malloch$lo#8F * #$eo,pthread_tCC@

 

,or $=0@ $4h$lo#8F@ $DDC

  ;

  dato#"5uno=$@

  dato#"5do#=h$lo#8F@

  $, pthread_create thread8$< NU< mmult< dato#C H= 0 C

  ;

perrorINo #e puede crear el h$loIC@

ex$t"1C@

  ?

 

?

Page 8: E5 Pthread OpenMP MPI Molinas Luque

7/25/2019 E5 Pthread OpenMP MPI Molinas Luque

http://slidepdf.com/reader/full/e5-pthread-openmp-mpi-molinas-luque 8/13

 

// el h$lo pr$nc$pal e#pera por lo# otro# h$lo# para completar

  ,or $=0@ $4h$lo#8F@ $DDC

;

  pthread_Fo$n thread8$< NUC@

)o$dC ,t$met_,$nC@

  //t$empo de eFecuc$Ln

  lon+ t_tot=t_,$n.t$meone*>0*1000Dt_,$n.t$me*1000Dt_,$n.m$ll$tmC"t_$n$.t$meone*>0*1000Dt_$n$.t$me*1000Dt_$n$.m$ll$tmC@

  pr$nt,IJnJnIC@

  pr$nt,IT$empo de re#pue#ta para Gd proce#o# e#: Gldm$l$#e+undo#.JnI<h$lo#8F< t_totC@

  ?

pr$nt,IJnIC@return 0@

?

4.2 Implementac!n c"n OpenMP

/*

  ============================================================================

 NOMBRE: omp_mmult.c

 AUTORES

  Roxana u!ue " Nel#on Mol$na#

 %ES&R'(&'ON

 Mult$pl$cac$on de matr$ce# con OpenM(

 

Un$)er#$dad Nac$onal de A#unc$on " acultad (ol$tecn$ca

 &arrera: 'n+en$er$a 'n,ormat$ca

 Mater$a: Elect$)a - " Al+or$tmo# (aralelo#

 (ro,e#or: &hr$#t$an -on ucen

 Anho: 012

  ============================================================================

 */3$nclude 4#td$o.h5

3$nclude 4#tdl$6.h5

3$nclude 4t$me.h5

3$nclude 4omp.h5

$nt h$lo#89=;<9<<1>?@ //&ant$dad de h$lo#

$nt **A< **B< **&@

Page 9: E5 Pthread OpenMP MPI Molinas Luque

7/25/2019 E5 Pthread OpenMP MPI Molinas Luque

http://slidepdf.com/reader/full/e5-pthread-openmp-mpi-molinas-luque 9/13

$nt TAM@

$nt **crearMatr$C ;

  $nt $@

  $nt *)alore#< **temp@

  )alore# = $nt *C malloc TAM * TAM * #$eo,$ntCC@

 

temp = $nt **C malloc TAM * #$eo,$nt*CC@

  ,or$=0@ $ 4 TAM@ $DDC

  temp8$ = )alore#8$ * TAMC@

  return temp@

?

)o$d car+ar_matr$$nt **matr$< $nt TAMC

;

  $nt $< F< n = 0@

  ,or $=0@ $4TAM@ $DDC

  ,or F=0@ F4TAM@ FDDC

  matr$8$8F = $ntC randCG100@

?

$nt ma$n$nt ar+c< char *ar+)8C

;  $nt t$d< nthread#< $<F<< l@

  dou6le $n$< ,$n@

$, ar+c H= C ;

  pr$nt,IEFecutar: G# 4TAM5< donde TAM e# la d$men#$on de la matr$JnI<ar+)80C@

  ex$t1C@

  ?

 

// de,$n$endo el tamanho de la matr$

  TAM = ato$ar+)81C@

pr$nt,I"""""""""""""""""""""""""""""""""""""""""JnIC@

  pr$nt,IMult$pl$cac$on de matr$ce# de tamanho GdJnI<TAMC@

  pr$nt,I"""""""""""""""""""""""""""""""""""""""""JnIC@

,or l=0@ l4=K@lDDC

;

Page 10: E5 Pthread OpenMP MPI Molinas Luque

7/25/2019 E5 Pthread OpenMP MPI Molinas Luque

http://slidepdf.com/reader/full/e5-pthread-openmp-mpi-molinas-luque 10/13

3pra+ma omp parallel #haredA<B<&<nthread#C pr$)ate$<F<<t$dCnum_thread#h$lo#8lC

;

t$d = omp_+et_thread_numC@

$, t$d == 0C ;

nthread# = omp_+et_num_thread#C@

?

A = crearMatr$C@

  B = crearMatr$C@

  & = crearMatr$C@

  //&ar+ando la# matr$ce# con )alore#

  car+ar_matr$A< TAMC@

  car+ar_matr$B< TAMC@

$, t$d == 0C

$n$ = omp_+et_t$meC@

//Mult$pl$cac$on

3pra+ma omp ,or #chedule#tat$c< TAM/h$lo#8lC

 

,or $=0@ $4TAM@ $DDC

,or F=0@ F4TAM@ FDDC ;

&8$8F=0@

,or =0@ 4TAM@ DDC

&8$8F D= A8$8*B88F@

?

$, t$d == 0C ;

,$n = omp_+et_t$meC@

pr$nt,IJnJnIC@

pr$nt,I T$empo de re#pue#ta para Gd h$lo#: G,m$l$#e+undo#.JnI< h$lo#8l< ,$n"$n$C*1000C@

?

?

?

pr$nt,IJnIC@

return 0@

?

4.% Implementac!n c"n MPI

/*

  ============================================================================

 NOMBRE: mp$_mmult.c

Page 11: E5 Pthread OpenMP MPI Molinas Luque

7/25/2019 E5 Pthread OpenMP MPI Molinas Luque

http://slidepdf.com/reader/full/e5-pthread-openmp-mpi-molinas-luque 11/13

 AUTOR

  Roxana u!ue " Nel#on Mol$na#

 %ES&R'(&'ON

 Mult$pl$cac$on de matr$ce# con M('

 Un$)er#$dad Nac$onal de A#unc$on " acultad (ol$tecn$ca

 &arrera: 'n+en$er$a 'n,ormat$ca

 Mater$a: Elect$)a - " Al+or$tmo# (aralelo#

 (ro,e#or: &hr$#t$an -on ucen

 Anho: 012

  ============================================================================

 */

3$nclude 4mp$.h5

3$nclude 4#td$o.h5

3$nclude 4math.h5

3$nclude 4t$me.h5

3$nclude 4un$#td.h5

3$nclude 4#tdl$6.h5

3de,$ne TAM 2> /* Tamanho de la# matr$ce# */

$nt A8TAM8TAM< B8TAM8TAM< &8TAM8TAM@

/* Se car+a la matr$ con )alore# de#de 0 ha#ta TAM*TAM */

)o$d car+ar_matr$$nt m8TAM8TAMC;

  #tat$c $nt n=0@

  $nt $< F@

  ,or $=0@ $4TAM@ $DDC

  ,or F=0@ F4TAM@ FDDC

  m8$8F = nDD@

?

$nt ma$n$nt ar+c< char *ar+)8C

;

  $nt proc< nroproc< $< F< < #um = 0@

  dou6le t_$n$=0< t_,$n=0@

M('_Statu# #tatu#@

  M('_'n$t ar+c< ar+)C@

/* Numero de proce#o# !ue pertenecen al comun$cador */

Page 12: E5 Pthread OpenMP MPI Molinas Luque

7/25/2019 E5 Pthread OpenMP MPI Molinas Luque

http://slidepdf.com/reader/full/e5-pthread-openmp-mpi-molinas-luque 12/13

  M('_&omm_#$eM('_&OMM_OR%< nroprocC@

  /* Se e#ta6lece el $dent$,$cador del proce#o llamador en el comun$cador */

  M('_&omm_ranM('_&OMM_OR%< procC@

/* El proce#o mae#tro car+a la# matr$ce# A 7 B */

  $, proc==0C ;pr$nt,I"""""""""""""""""""""""""""""""""""""""""JnIC@

pr$nt,IMult$pl$cac$on de matr$ce# de tamanho GdJnI<TAMC@

pr$nt,I"""""""""""""""""""""""""""""""""""""""""JnIC@

  car+ar_matr$AC@

  car+ar_matr$BC@

?

 

M('_Barr$erM('_&OMM_OR%C@

 

$, proc==0C ;

 t_$n$ = M('_t$meC@

?

  /* M('_Scatter en)$a parte# d$,erente# de A del proce#o ,uente< a cada proce#o$nclu7endo#e el m$#mo */

  M('_Scatter A< TAM*TAM/nroproc< M('_'NT< A< TAM*TAM/nroproc< M('_'NT< 0<M('_&OMM_OR%C@

 

/* M('_Bca#t en)$a B del proce#o mae#tro a todo# lo# proce#o# */

  M('_Bca#t B< TAM*TAM< M('_'NT< 0< M('_&OMM_OR%C@

/* Se real$a el computo local en cada proce#o */

,or $ = 0@$4nroproc@ $DDC

;

$, proc == $C

;

,or $ = proc*TAM/nroprocC@ $ 4 proc*TAM/nroprocCDTAM/nroprocCC@ $DDC

;

,or F = proc*TAM/nroprocC@ F 4 proc*TAM/nroprocCDTAM/nroprocCC@ FDDC

;

,or = proc*TAM@ 4 proc*TAMDTAM@ DDC

;

#um = #um D A8$8 * B88F@

?

&8$8F = #um@

#um = 0@

?

Page 13: E5 Pthread OpenMP MPI Molinas Luque

7/25/2019 E5 Pthread OpenMP MPI Molinas Luque

http://slidepdf.com/reader/full/e5-pthread-openmp-mpi-molinas-luque 13/13

?

?

?

  M('_ather &< TAM*TAM/nroproc< M('_'NT< &< TAM*TAM/nroproc< M('_'NT< 0<M('_&OMM_OR%C@

  /* El proce#o mae#tro de)uel)e el t$empo de eFecuc$on*/

  $, proc==0C ;

t_,$n = M('_t$meC@

pr$nt, IJnIC@

pr$nt,IT$empo de re#pue#ta para Gd h$lo#: G, m$l$#e+undo#.JnI< nroproc<t_,$n"t_$n$C*1000C@

pr$nt, IJnIC@

  ?

/* Real$a tarea# de l$mp$ea para ,$nal$ar el entorno de eFecuc$on */M('_$nal$eC@

return 0@

 

?