Está en la página 1de 22

E.U. de Informtica-U.P.M.

Procesamiento Paralelo Curso 10/11


Prctica 2
Mtodo de Monte Carlo y
Superaceleracin
Septiembre 2010
E.U. de Informtica-U.P.M. Procesamiento Paralelo Curso 10/11
NDIC
1 Objetivos................................................................................................................................................................
! El m"todo de Monte Carlo a#licado al clculo de PI.............................................................................................
!.1 El m"todo........................................................................................................................................................
!.! $res versiones secuenciales.............................................................................................................................%
!. Un modelo #aralelo.........................................................................................................................................&
!.% $ablas de tiem#os..........................................................................................................................................10
'ivide ( vencers con su#eraceleraci)n..............................................................................................................11
.1 Problemtica de medici)n de tiem#os en sistemas multin*cleo...................................................................11
.! Com#robando los efectos del o#timi+ador de c)di,o...................................................................................1!
. Com#robando los efectos de las t"cnicas de -#refetc./................................................................................1
.% 0nlisis del sistema de cac.es ( el conjunto de trabajo de los #rocesos......................................................1&
.1 Ejem#lo del uso de las #rimitivas scatter ( reduce.......................................................................................1&
% 02E3O4..............................................................................................................................................................15
%.1 6ic.ero Ma7efile...........................................................................................................................................15
%.! 6ic.eros ocu#ar ( ocu#ar2ucleo.c................................................................................................................!0
%. 6ic.ero cuentaPar!.c.....................................................................................................................................!1
Prctica !8 M"todo de Monte Carlo ( su#eraceleraci)n P,ina - !
E.U. de Informtica-U.P.M. Procesamiento Paralelo Curso 10/11
1 Objetivos
Com#render el modelo de Monte Carlo a#licado al clculo del n*mero PI
Problemtica de #araleli+ar basndose en ,eneraci)n de n*meros aleatorios
Primeros #roblemas #ara determinar la condici)n de terminaci)n
Problemtica de la medici)n de tiem#os8 o#timi+ador de c)di,o9 t"cnicas de #refetc. (
#lanificaci)n de #rocesos en sistemas multin*cleo
Ejem#lo del modelo divide ( vencers :ue evidencia su#eraceleraci)n
Uso de #rimitivas de comunicaci)n colectiva8 scatter ( reduce
2 El mtodo de Monte Carlo aplicado al clculo de PI
2.1 El mtodo
'e los dos m"todos e;#licados en las clases de teor<a9 vamos a se,uir el #rimero9 cu(a
re#resentaci)n ,rfica es la si,uiente8
'ado :ue el rea del c<rculo es ( el rea del cuadrado :ue lo
circunscribe es %9 la relaci)n entre ambas reas es /%.
Esta relaci)n de reas es la misma en el cuadrante su#erior
derec.a9 donde #odemos ima,inar unos ejes cartesianos con
ori,en en el centro del c<rculo ( am#litud 1 en cada eje.
El m"todo consiste en ele,ir al a+ar #untos del cuadrante =con
coordenadas ;9( com#rendidas entre 0 ( 1>9 de tal forma :ue
contabili+aremos los #untos :ue caen dentro del semic<rculo.
4i el m"todo de ele,ir n*meros al a+ar es bueno ( #robamos suficientes veces9 sea M9 la
relaci)n entre #untos :ue nos .an ca<do dentro del semic<rculo ( #untos totales esco,idos9
debe ser una a#ro;imaci)n a /%.
El esbo+o de #ro,rama secuencial :ue calcular<a PI de esta forma es el si,uiente8
enCirculo = 0;
for (i=1; i<=M; i++) {
x = aleatorio(0.0, 1.0);
y = aleatorio(0.0, 1.0);
if ((x*x + y*y)<=1.0) enCirculo++;
}
PI = (.0 * enCirculo) ! ("ou#le) M;
Prctica !8 M"todo de Monte Carlo ( su#eraceleraci)n P,ina -
!
!
1
E.U. de Informtica-U.P.M. Procesamiento Paralelo Curso 10/11
2.2 Tres versiones secuenciales
En este a#artado se va a #robar la ejecuci)n del al,oritmo bsico contado en el a#artado
anterior9 #ero con tres variantes :ue tienen :ue ver con la condici)n de terminaci)n del
clculo.
0ntes de nada9 al i,ual :ue en la #rimera #rctica9 situarse en el directorio asociado a
esta se,unda #rctica denominado -?@OME/p2/ ( co#iarse todos los fic.eros :ue
residan en el corres#ondiente directorio del usuario -propar00/9 entre los :ue se
encuentran pi!no"c9 piDos"c ( pi#res"c :ue tienen el c)di,o com#leto de las tres
versiones :ue se van a #robar.
Aa #rimera versi)n del #ro,rama es como el esbo+o #resentado en la secci)n anterior. El
c)m#uto termina tras un bucle :ue se ejecuta un cierto n*mero de veces9 cu(o valor se fija
con un #armetro en la l<nea de comandos al invocar el ejecutable. El c)di,o es el si,uiente8
!! PCM. Proce$a%iento Paralelo Cur$o 0&!0' ()I 10!0*!0' +
!! +
!! piUno.c, Pro-ra%a .ue calcula el nu%ero PI %e"iante el %eto"o +
!! "e Monte Carlo #a$a"o en circulo "e ra"io 1 in$crito en +
!! cua"ra"o "e la"o /. +
!! 0er%inacion controla"a 1or, Numero de iteraciones +
2inclu"e <a$$ert.34
2inclu"e <%at3.34
2inclu"e <$t"li#.34
2inclu"e <$t"io.34
2inclu"e <$y$!ti%e.34
!!55555555555555555555555555555555555555555555555555555555555555555555
int %ain( int ar-c, c3ar *ar-678 ) {
int i, iteracione$, enCirculo=0;
"ou#le x, y, 1i;
$truct ti%e6al t0, t1, t;
!! Control 1ara%etro =4 9u%ero "e iteracione$
if (ar-c := /) {
1rintf (;)$o, 1i)no nu%Iteracione$ <n;);
exit(0);
}
iteracione$ = atoi(ar-6718);
a$$ert (-etti%eof"ay (=t0, 9)>>) == 0);
for (i=1; i<=iteracione$; i++) {
x = ("ou#le) ran"o%() ! ("ou#le) ?@9ABM@C;
y = ("ou#le) ran"o%() ! ("ou#le) ?@9ABM@C;
if ((x*x + y*y) <= 1.0) enCirculo++;
}
a$$ert (-etti%eof"ay (=t1, 9)>>) == 0);
ti%er$u#(=t1, =t0, =t);
1i = (.0 * enCirculo) ! ("ou#le) i;
1rintf (;Dalor "e PI = E.'lf<n;, 1i);
1rintf (;(rror = E.'lf<n;, fa#$(1i5MBPI));
1rintf (;0ie%1o = El",El"($e-,%$e-)<n;, t.t6B$ec, t.t6Bu$ec!1000);
Prctica !8 M"todo de Monte Carlo ( su#eraceleraci)n P,ina - %
E.U. de Informtica-U.P.M. Procesamiento Paralelo Curso 10/11
return 0;
}
Benerar el ejecutable de #iUno.c tecleando8 ma$e pi!no. Este comando ejecuta la
com#ilaci)n tal ( como est definida en el fic.ero Ma$e%ile.
Ejecutar varias veces este comando con distintos valores de iteraciones ( rellenar la
$abla-1 de tiem#os.
Cefle;ionar sobre las ,anancias o #"rdidas de #recisi)n del clculo de PI se,*n .emos
ido aumentando el n*mero de iteraciones.
0.ora vamos a su#oner :ue conocemos el valor real del n*mero PI =constante M&PI definida
en la biblioteca matemtica mat'"'>. Podemos cambiar el modelo de nuestro #ro,rama #ara
:ue .a,a iteraciones .asta :ue com#ute un valor de PI con un error res#ecto del PI real9
menor :ue un #armetro determinado.
Precisamente esto es lo :ue .ace el #ro,rama piDos"c cu(o c)di,o es el si,uiente8
!! PCM. Proce$a%iento Paralelo Cur$o 0&!0' ()I 10!0*!0' +
!! +
!! piDos.c, Pro-ra%a .ue calcula el nu%ero PI %e"iante el %eto"o +
!! "e Monte Carlo #a$a"o en circulo "e ra"io 1 in$crito en +
!! cua"ra"o "e la"o /. +
!! 0er%inacion controla"a 1or, Error respecto de M_PI +
2inclu"e <a$$ert.34
2inclu"e <%at3.34
2inclu"e <$t"li#.34
2inclu"e <$t"io.34
2inclu"e <$y$!ti%e.34
2"efine M@CBI0(? 1000000000
int %ain( int ar-c, c3ar *ar-678 ) {
int i, enCirculo=0;
"ou#le x, y, 1i, cota(rror;
$truct ti%e6al t0, t1, t;
!! Control 1ara%etro =4 Cota "el error
if (ar-c := /) {
1rintf (;)$o, 1iAo$ cota(rror <n;);
exit(0);
}
cota(rror = atof(ar-6718);
a$$ert (-etti%eof"ay (=t0, 9)>>) == 0);
for (i=1; i<=M@CBI0(?; i++) {
x = ("ou#le) ran"o%() ! ("ou#le) ?@9ABM@C;
y = ("ou#le) ran"o%() ! ("ou#le) ?@9ABM@C;
if ((x*x + y*y) <= 1.0) enCirculo++;
1i = (.0 * enCirculo) ! ("ou#le) i;
if (fa#$(1i 5 MBPI) < cota(rror) #reaF;
}
a$$ert (-etti%eof"ay (=t1, 9)>>) == 0);
ti%er$u#(=t1, =t0, =t);
1rintf (;Dalor "e PI = E.10lf en iteracion = E"<n;, 1i, i);
Prctica !8 M"todo de Monte Carlo ( su#eraceleraci)n P,ina - 1
E.U. de Informtica-U.P.M. Procesamiento Paralelo Curso 10/11
1rintf (;0ie%1o = El",El"($e-,%$e-)<n;, t.t6B$ec, t.t6Bu$ec!1000);
return 0;
}
Benerar el ejecutable de #i'os.c tecleando8 ma$e piDos.
Ejecutar varias veces este comando con distintos valores de cota del error ( rellenar la
$abla-! de tiem#os.
Com#arar los resultados obtenidos en esta #rueba =#i'os> res#ecto de la anterior
=#iUno>.
6inalmente9 vamos a ado#tar otro modelo de terminaci)n :ue #ersi,ue acotar el error9 #ero sin
conocer el valor real de PI. Una forma de .acerlo es iterar .asta :ue se consi,an dos valores
consecutivos de PI :ue se diferencien en menos de una cota de error fijada como #armetro.
Esto es lo :ue .ace el #ro,rama #i$res.c cu(o c)di,o es el si,uiente8
!! PCM. Proce$a%iento Paralelo Cur$o 0&!0' ()I 10!0*!0' +
!! +
!! piTres.c, Pro-ra%a .ue calcula el nu%ero PI %e"iante el %eto"o +
!! "e Monte Carlo #a$a"o en circulo "e ra"io 1 in$crito en +
!! cua"ra"o "e la"o /. +
!! 0er%inacion controla"a 1or, Error respecto piAnterior +
2inclu"e <a$$ert.34
2inclu"e <%at3.34
2inclu"e <$t"li#.34
2inclu"e <$t"io.34
2inclu"e <$y$!ti%e.34
2"efine M@CBI0(? 1000000000
!!55555555555555555555555555555555555555555555555555555555555555555555
int %ain( int ar-c, c3ar *ar-678 ) {
int i, enCirculo=0;
"ou#le x, y, 1i@ctual, 1i@nterior=*.0, cota(rror, el(rror;
$truct ti%e6al t0, t1, t;
!! Control 1ara%etro =4 (rror re$1ecto 1i@nterior
if (ar-c := /) {
1rintf (;)$o, 1i0re$ cota(rror <n;);
exit(0);
}
cota(rror = atof(ar-6718);
a$$ert (-etti%eof"ay (=t0, 9)>>) == 0);
for (i=1; i<=M@CBI0(?; i++) {
x = ("ou#le) ran"o%() ! ("ou#le) ?@9ABM@C;
y = ("ou#le) ran"o%() ! ("ou#le) ?@9ABM@C;
if ((x*x + y*y) <= 1.0) enCirculo++;
1i@ctual = (.0 * enCirculo) ! ("ou#le) i;
el(rror = fa#$(1i@ctual 5 1i@nterior);
if ((el(rror 4 0.0) == (el(rror < cota(rror)) #reaF;
1i@nterior = 1i@ctual;
}
a$$ert (-etti%eof"ay (=t1, 9)>>) == 0);
ti%er$u#(=t1, =t0, =t);
1rintf (;Dalor "e PI = E.'lf en iteracion = E"<n;, 1i@ctual, i);
Prctica !8 M"todo de Monte Carlo ( su#eraceleraci)n P,ina - D
E.U. de Informtica-U.P.M. Procesamiento Paralelo Curso 10/11
1rintf (;(rror = E.'lf<n;, fa#$(1i@ctual 5 MBPI));
1rintf (;0ie%1o = El",El"($e-,%$e-)<n;, t.t6B$ec, t.t6Bu$ec!1000);
return 0;
}
Benerar el ejecutable de #i$res.c tecleando8 ma$e pi#res.
Ejecutar varias veces este comando con distintos valores #ara la cota del error (
rellenar la $abla- de tiem#os.
Com#arar los resultados obtenidos en esta #rueba =#i$res> res#ecto de las anteriores
=#iUno ( #i'os>.
2.3 n modelo paralelo
El #roblema ms serio a la .ora de #araleli+ar el clculo de PI a #artir de los ejem#los
secuenciales9 es la ,esti)n de n*meros aleatorios. @acer :ue un maestro re#arta n*meros
aleatorios a los esclavos es mu( ineficiente en nuestro ti#o de m:uina9 as< :ue o#taremos #or
una soluci)n consistente en :ue cada esclavo inicialice su serie de n*meros aleatorios
=funci)n srandom> a #artir de su identificador de #roceso.
En cuanto al modelo de control de terminaci)n del c)m#uto9 descartaremos la versi)n de
piDos9 (a :ue no #arece mu( realista conocer #reviamente el valor :ue se est com#utando9
as< :ue o#taremos #or ada#tar la versi)n de piTres (a :ue #arece ofrecer cierta consistencia en
el sentido de obtener mejores #recisiones se,*n aumentamos la #recisi)n del error entre
clculos consecutivos de PI.
El #ro,rama ser ti#o 4PM' ( se denominar piPar"c9 de .ec.o9 se suministra un es:ueleto
del mismo. Aa idea es :ue todos los #rocesos :ue se creen Enosotros #robaremos s)lo con
dos-9 reali+arn los clculos se,*n el modelo de piTres9 es decir9 .asta conse,uir una
diferencia9 entre dos c)m#utos se,uidos9 menor de una cota de error fijada como #armetro de
la l<nea de comando.
'e todos los #rocesos9 uno de ellos Eel 0- se com#ortar como maestro ( el resto como
esclavos. El maestro recibir los resultados de los esclavos =iteraciones totales ( cuntas veces
ca() en c<rculo> ( los com#ondr Econ los resultados :ue "l obtuvo- #ara dar el resultado
definitivo de PI ( el error cometido.
El es:ueleto del #ro,rama #iPar.c es el si,uiente8
!! PCM. Proce$a%iento Paralelo Cur$o 0&!0' ()I 10!0*!0' +
!! +
!! piPar.c, Pro-ra%a .ue calcula el nu%ero PI %e"iante el %eto"o +
!! "e Monte Carlo #a$a"o en circulo "e ra"io 1 in$crito en +
!! cua"ra"o "e la"o /. Der$ion 1aralela. (ESQUELETO) +
2inclu"e <a$$ert.34
2inclu"e <%at3.34
2inclu"e <$t"li#.34
2inclu"e <$t"io.34
2inclu"e <$y$!ti%e.34
#include mpi.!
Prctica !8 M"todo de Monte Carlo ( su#eraceleraci)n P,ina - &
E.U. de Informtica-U.P.M. Procesamiento Paralelo Curso 10/11
2"efine M@CBP?GC(HGH 1'
2"efine M@CBI0(? 1000000000
"" #ontinua en la p$%ina si%uiente
!!55555555555555555555555555555555555555555555555555555555555555555555
6oi" co%1utar(int yo, "ou#le cota(rror, int *nu%Dece$, int *"entro) {
int i, enCirculo=0;
"ou#le x, y, el(rror, 1i@nterior=*.0, 1i@ctual;
!! (6itar %i$%a $ecuencia "e nu%ero$ aleatorio$
$ran"o%((un$i-ne" int) yo+1);
for (i=1; i<=M@CBI0(?; i++) {
x = ("ou#le) ran"o%() ! ("ou#le) ?@9ABM@C;
y = ("ou#le) ran"o%() ! ("ou#le) ?@9ABM@C;
if ((x*x + y*y) <= 1.0) enCirculo++;
1i@ctual = ("ou#le) (.0 * enCirculo) ! ("ou#le) i;
el(rror = fa#$(1i@ctual 5 1i@nterior);
if ((el(rror 4 0.0) == (el(rror < cota(rror)) #reaF;
1i@nterior = 1i@ctual;
}
1rintf (;E" %ue$tra$ to%a"a$ 1or E"<n;, i, yo);
*nu%Dece$ = i;
*"entro = enCirculo;
}
!!55555555555555555555555555555555555555555555555555555555555555555555
6oi" e$cla6o(int yo, "ou#le cota(rror) {
!! Incluir el co"i-o "el e$cla6o
}
!!55555555555555555555555555555555555555555555555555555555555555555555
6oi" %ae$tro("ou#le cota(rror, int nu%($cla6o$) {
int %ue$tra$;
"ou#le 1i;
$truct ti%e6al t0, t1, t;
a$$ert (-etti%eof"ay (=t0, 9)>>) == 0);
!! Incluir el co"i-o "el %ae$tro, .ue ta%#ien realiIara co%1uto$

a$$ert (-etti%eof"ay (=t1, 9)>>) == 0);
ti%er$u#(=t1, =t0, =t);
1rintf (;Dalor "e PI = E.'lf en E" %ue$tra$<n;, 1i, %ue$tra$);
1rintf (;(rror real = E.'lf<n;, MBPI 5 1i);
1rintf (;0ie%1o = El",El"($e-,%$e-)<n;, t.t6B$ec, t.t6Bu$ec!1000);
}
!!55555555555555555555555555555555555555555555555555555555555555555555
int %ain(int ar-c, c3ar *ar-678) {
int yo, nu%Proce$o$;
"ou#le cota(rror;
$et#uf ($t"out, 9)>>);
Prctica !8 M"todo de Monte Carlo ( su#eraceleraci)n P,ina - F
E.U. de Informtica-U.P.M. Procesamiento Paralelo Curso 10/11
MPI_Init (=ar-c, =ar-6);
MPI_#omm_ran& (MPIBCGMMBJG?>A, =yo);
MPI_#omm_si'e (MPIBCGMMBJG?>A, =nu%Proce$o$);
!! Control "el nu%ero "e 1roce$o$
if ((nu%Proce$o$ < /) ++ (nu%Proce$o$ 4 M@CBP?GC(HGH)) {
if (yo == 0) 1rintf (;9u%ero "e 1roce$o$ incorrecto<n;);
MPI_(inali'e();
exit(0);
}
!! Control "el nu%ero "e 1ara%etro$
if (ar-c := /) {
if (yo == 0) 1rintf (;)$o, 1iPar cota(rror <n;);
MPI_(inali'e();
exit(0);
}
cota(rror = atof(ar-6718);
if (yo == 0) %ae$tro(cota(rror, nu%Proce$o$51);
el$e e$cla6o(yo, cota(rror);
MPI_(inali'e();
return 0;
}
Benerar el ejecutable de #iPar.c tecleando8 ma$e piPar.
Ejecutar varias veces este comando con dos procesos Emaestro ( un esclavo- =utili+ar
la o#ci)n (np 2> ( distintos valores #ara la cota del error ( rellenar la $abla-% de
tiem#os. 4e utili+ar9 #or lo tanto9 un *nico PC.
Com#robar :ue el #ro,rama funciona correctamente si se utili+an tres procesos.
Probar con una cota de error de 090000001.
Prctica !8 M"todo de Monte Carlo ( su#eraceleraci)n P,ina - 5
E.U. de Informtica-U.P.M. Procesamiento Paralelo Curso 10/11
2.! Tablas de tiempos
#abla(1" #iempos de la )ersin pi!no *+iteraciones,
+ Iteraciones PI rror #iempo *se-.mse-,
100.000 91%1 G G G 09000 G G G 8
1.000.000 91%1 G G G 09000 G G G 8
10.000.000 91%1 G G G 09000 G G G 8
100.000.000 91%1 G G G 09000 G G G 8
1.000.000.000 91%1 G G G 09000 G G G 8
#abla(2" #iempos de la )ersin piDos *error respecto de PI / 0"111232420230,
+ Iteraciones PI Cota del rror #iempo *se-.mse-,
91%115 G G G G G 0.000001 8
91%115 G G G G G 0.0000001 8
91%115 G G G G G 0.00000001 8
91%115 G G G G G 0.000000001 8
91%115 G G G G G 0.0000000001 8
#abla(0" #iempos de la )ersin pi#res *error respecto de pi5nterior,
+ Iteraciones PI rror Cota del rror #" *se-.mse-,
91F G G G 0900! G G G 0.00001 8
91%1 G G G 09000 G G G 0.000001 8
91%1 G G G 09000 G G G 0.0000001 8
91%1 G G G 09000 G G G 0.00000001 8
91%1 G G G 09000 G G G 0.000000001 8
#abla(1" #iempos de la )ersin piPar *Con 2 procesos y un 6nico PC,
+ Iteraciones PI rror Cota del rror #" *se-.mse-,
91G G G G G 0900G G G G 0.00001 8
91%G G G G 0900G G G G 0.000001 8
91%1 G G G 09000 G G G 0.0000001 8
91%1 G G G 09000 G G G 0.00000001 8
91%1 G G G 09000 G G G 0.000000001 8
Prctica !8 M"todo de Monte Carlo ( su#eraceleraci)n P,ina - 10
E.U. de Informtica-U.P.M. Procesamiento Paralelo Curso 10/11
3 "ivide # vencers con superaceleraci$n
En este *ltimo a#artado vamos a #araleli+ar un al,oritmo secuencial :ue cuenta el n*mero de
a#ariciones de un n*mero en un arra( mu( ,rande.
4i .ici"semos una #rueba con un arra( de 100 millones de enteros Ecu(a ocu#aci)n es de casi
medio ,i,a-9 ver<amos :ue nuestro e:ui#o ejecutar<a la versi)n secuencial en #oco ms de 100
milise,undos. Para obtener tiem#os su#eriores al se,undo9 tendr<amos :ue tener un arra( ms
,rande :ue toda la memoria dis#onible -%Bb-9 as< :ue nos vamos a conformar con un arra( de
un tamaHo m;imo de F.000.000 de elementos. Para simular una b*s:ueda en un arra( ma(or
E( as< tener tiem#os ra+onablemente altos-9 lo :ue .aremos es buscar muc.as veces
=2UMGIEC$OCE4> en el mismo arra(.
3.1 Problemtica de medici$n de tiempos en sistemas multin%cleo
Aa #rimera versi)n del #ro,rama secuencial -cuentaSecSimple.c/ es la si,uiente8
2inclu"e <$t"io.34
2inclu"e <$t"li#.34
2inclu"e <$y$!ti%e.34
2inclu"e <a$$ert.34
2"efine M@CBC@?AI9@>IA@A K000000 !! (6ita 1a$ar$e "e li%ite$
2"efine 9)MBD(C0G?(H 10000 !! Hi%ula un 6ector to"a6ia %ayor
2"efine M@CB(90(?G 1000
2"efine 9)MBL)HC@AG &
int %ain (int ar-c, c3ar *ar-678){
$truct ti%e6al t0, tf, t;
int i, M, laCar"inali"a", nu%Dece$, *6ector;
!! Control 1ara%etro =4 Car"inali"a" "el 6ector
if (ar-c := /) {
1rintf (;)$o, cuentaHecHi%1le car"inali"a"<n;);
return 0;
}
laCar"inali"a" = atoi(ar-6718);
a$$ert (laCar"inali"a" 4 0);
a$$ert (laCar"inali"a" <= M@CBC@?AI9@>IA@A);
!! He 1i"e %e%oria e inicialiIa el 6ector
6ector = %alloc (laCar"inali"a" * );
for (i=0; i<laCar"inali"a"; i++)
6ector7i8 = ran"o%() E M@CB(90(?G;
!! He conta#iliIan la$ a1aricione$ "el nu%ero #u$ca"o
a$$ert (-etti%eof"ay (=t0, 9)>>) == 0);
nu%Dece$ = 0;
for (i=0; i<9)MBD(C0G?(H; i++)
for (M=0; M<laCar"inali"a"; M++)
if (6ector7M8 == 9)MBL)HC@AG) nu%Dece$++;
a$$ert (-etti%eof"ay (=tf, 9)>>) == 0);
ti%er$u# (=tf, =t0, =t);
1rintf (;Dece$ .ue a1arece el E" = E"<n;, 9)MBL)HC@AG, nu%Dece$);
1rintf (;0ie%1o, El",E*l"($e-,%$e-)<n;, t.t6B$ec, t.t6Bu$ec!1000);
return 0;
}
Prctica !8 M"todo de Monte Carlo ( su#eraceleraci)n P,ina - 11
E.U. de Informtica-U.P.M. Procesamiento Paralelo Curso 10/11
Benerar el ejecutable de cuenta4ec4im#le.c tecleando8 ma$e cuentaSecSimple
Ejecutar cuatro veces este #ro,rama con un #armetro de entrada de %00.000 ( anotar
los tiem#os obtenidos en la $abla-1. Puede observarse :ue el tiem#o de ejecuci)n
var<a sensiblemente. Aa e;#licaci)n tiene :ue ver con la #lanificaci)n de #rocesos. 0l
e;istir cuatro n*cleos9 cuando se ejecuta la #ol<tica de #lanificaci)n ti#o RoundRobin9
es #osible :ue si el #roceso estaba ejecutndose -#or ejem#lo- en el n*cleo 19 tras el
fin de rodaja se re#lanifi:ue el #roceso en el n*cleo . Este cambio de n*cleo #uede
#rovocar :ue los datos :ue estaban en la cac.e del n*cleo 1 a.ora no est"n accesibles
desde el n*cleo 9 ,enerndose muc.as faltas de cac.e.
Para evitar este #roblema9 vamos a lan+ar cuatro ejecuciones :uasi simultaneas del
mismo #ro,rama con el mismo #armetro de entrada con el objetivo de :ue la
#robabilidad de :ue un #roceso se re#lanifi:ue en otro n*cleo sea #rcticamente
des#reciable. Para ello9 teclear lo si,uiente lo ms rpido 7ue se pueda8
./cuenta4ec4im#le %00000 J
./cuenta4ec4im#le %00000 J
./cuenta4ec4im#le %00000 J
./cuenta4ec4im#le %00000 J
0notar el tiem#o ms bajo obtenido9 :ue ser un tiem#o consistente #ara lue,o #oder
reali+ar com#araciones con otras soluciones #ara este mismo #roblema.
Otra forma de conse,uir lo mismo9 un #oco ms ,en"rico ( *til #ara el resto de esta #rctica (
las si,uientes9 es tener un comando :ue #ermita ocu#ar el n*mero de n*cleos :ue uno desee
durante el n*mero de se,undos :ue nos interese. Este comando se suministra escrito ( se
denomina -ocupar/ ( se a#o(a en el #ro,rama -ocuparNucleo/ =#ueden consultarse en los
ane;os>.

Benerar el ejecutable de ocu#a2ucleo.c tecleando8 ma$e ocuparNucleo
Aan+ar a.ora la #rueba de cuenta4ec4im#le con el comando si,uiente8
./ocu#ar 1 J ./cuenta4ec4im#le %00000
Com#robaremos :ue nos sale un tiem#o similar al tomado anteriormente.
3.2 Comprobando los e&ectos del optimi'ador de c$di(o
0.ora vamos a com#robar el e%ecto de la optimi8acin de cdi-o #or #arte del com#ilador.
Para ello9 vamos a ,enerar este mismo ejecutable #ero com#ilando con la o#ci)n 9:0 del -cc
:ue su#one el ma(or nivel de o#timi+aci)n. @acer lo si,uiente8
Benerar el ejecutable de cuenta4ec4im#le.c tecleando8 ma$e cuentaSecSimple:0.
6ijarse :ue en la l<nea de com#ilaci)n a#arece la o#ci)n EO.
Ejecutar cuentaSecSimpleO3 con la misma cardinalidad de antes =%00.000> ( anotar en
la $abla-D el nuevo tiem#o de ejecuci)n. Aa mejora tan sensible de tiem#os se
consi,ue en la o#timi+aci)n del doble bucle for cu(o cuer#o #rinci#al es un if.
Prctica !8 M"todo de Monte Carlo ( su#eraceleraci)n P,ina - 1!
E.U. de Informtica-U.P.M. Procesamiento Paralelo Curso 10/11
3.3 Comprobando los e&ectos de las tcnicas de )prefetch*
Para #oder mostrar el efecto de su#eraceleraci)n9 vamos a recorrer el arra( de una forma
#eculiar. En ve+ de recorrer desde el #rimer elemento .asta el *ltimo si,uiendo un #atr)n
#uramente secuencial -#revisible #or los #rocesadores actuales :ue utili+an t"cnicas de
prefetch avan+adas-9 lo :ue .aremos es recorrerlo un #oco a trom#icones. Aa idea es ir
recorriendo el arra( en tro+os de 1.000 elementos =AO2BGP0$CO2>9 si,uiendo un #atr)n de
acceso aleatorio dentro de cada tro+o.
Un ejem#lo de este #ro,rama en versi)n secuencial es el si,uiente8
!! PCM. Proce$a%iento Paralelo Cur$o 0N!0K ()I 0N!0*!0K +
!! +
!! cuentaHec.c, Cuenta el nu%ero "e 6ece$ .ue a1arece un nu%ero en +
!! un 6ector %uy -ran"e. +
2inclu"e <$t"io.34
2inclu"e <$t"li#.34
2inclu"e <$y$!ti%e.34
2inclu"e <a$$ert.34
2"efine M@CBC@?AI9@>IA@A K000000 !! (6ita 1a$ar$e "e li%ite$
2"efine M@CB(90(?G 1000
2"efine 9)MBD(C0G?(H 10000 !! Hi%ula 6ector to"a6ia %ayor
2"efine 9)MBL)HC@AG &
2"efine >G9OBP@0?G9 1000 !! Patron "e acce$o a %e%oria
!! 1ara anular tecnica 1refetc3
int %ain (int ar-c, c3ar *ar-678)
{
$truct ti%e6al t0, tf, t;
int i, M, F, laCar"inali"a", nu%Dece$, *6ector;
int 1atron@cce$o7>G9OBP@0?G98, $tri"e(le-i"o$7>G9OBP@0?G98;
!! Control 1ara%etro =4 Car"inali"a" "el 6ector
if (ar-c := /) {
1rintf (;)$o, cuentaHec car"inali"a"<n;);
return 0;
}
laCar"inali"a" = atoi(ar-6718);
a$$ert (laCar"inali"a" 4 0);
a$$ert (laCar"inali"a" <= M@CBC@?AI9@>IA@A);
!! He for%a el 1atron "e acce$o a %e%oria
for (i=0; i<>G9OBP@0?G9; i++) $tri"e(le-i"o$7i8 = 0;
for (i=0; i<>G9OBP@0?G9; i++) {
"o
M = ran"o%() E >G9OBP@0?G9;
P3ile ($tri"e(le-i"o$7M8 == 1);
1atron@cce$o7i8 = M;
$tri"e(le-i"o$7M8 = 1;
}
!! He inicialiIa el 6ector
6ector = %alloc (laCar"inali"a" * );
for (i=0; i<laCar"inali"a"; i++)
6ector7i8 = ran"o%() E M@CB(90(?G;
Prctica !8 M"todo de Monte Carlo ( su#eraceleraci)n P,ina - 1
E.U. de Informtica-U.P.M. Procesamiento Paralelo Curso 10/11
!! He conta#iliIan la$ a1aricione$ "el nu%ero #u$ca"o
a$$ert (-etti%eof"ay (=t0, 9)>>) == 0);
nu%Dece$ = 0;
for (i=0; i<9)MBD(C0G?(H; i++)
for (M=0; M<laCar"inali"a"; M+=>G9OBP@0?G9)
for (F=0; F<>G9OBP@0?G9; F++)
if (6ector7M+1atron@cce$o7F88 == 9)MBL)HC@AG) nu%Dece$++;
a$$ert (-etti%eof"ay (=tf, 9)>>) == 0);
ti%er$u# (=tf, =t0, =t);
1rintf (;Dece$ .ue a1arece el E" = E"<n;, 9)MBL)HC@AG, nu%Dece$);
1rintf (;0ie%1o, El",E*l"($e-,%$e-)<n;, t.t6B$ec, t.t6Bu$ec!1000);
return 0;
}
4i nos fijamos9 el #ro,rama debe invocarse con un #armetro -cardinalidad/ :ue determina el
tamaHo del arra( donde se busca ( :ue est limitado #recisamente a F.000.000 tal ( como se
indica en la constante M03GC0C'I20AI'0'. 4i fijamos una cardinalidad de !00.0009
tendremos un arra( de ese tamaHo9 donde se meten n*meros al a+ar com#rendidos entre 0 (
1.000 =M03GE2$ECO> ( en "l se busca =10.000 veces> el n*mero indicado en la constante
2UMGKU4C0'O.
0ntes de #araleli+ar este #ro,rama9 vamos a com#robar c)mo se com#orta res#ecto del
#ro,rama cuentaSecSimpleO3 ( as< evidenciar el efecto del prefetch. Para ello8
Benerar el ejecutable de cuenta4ec.c tecleando8 ma$e cuentaSec.
Ejecutar cuentaSecSimple:0 ( cuentaSec #ara un tamaHo de 1.D00.000 anotando los
tiem#os obtenidos en la $abla-&. Podremos com#robar :ue .a( muc.a diferencia ( la
,anancia se debe9 #recisamente9 a la t"cnica de prefetch :ue consi,ue ocultar bastante
la latencia de los fallos de cac.e.
0.ora se trata de ,enerar una versi)n #aralela sencilla de este #ro,rama =(a utili+ando el
mismo nivel de o#timi+aci)n>9 en la :ue el maestro re#arta el trabajo entre s< mismo ( el resto
de #rocesos =sin usar scatter ni reduce>. El re#arto consistir en dividir el arra( en tantos
tro+os como #rocesos. Un es:ueleto de este #ro,rama9 al :ue denominaremos cuentaPar1"c;
es el si,uiente8
!! cuentaPar1.c, Cuenta a1aracione$ "e un nu%ero en un 6ector %uy +
!! -ran"e. Der$ion 1aralela $i%1le ("i6i$ion entre +
!! e$cla6o$ "e for%a 1lana) "el 1ro-ra%a cuentaHec +
!! (HQ)(>(0G +
2inclu"e <a$$ert.34
2inclu"e <$y$!ti%e.34
2inclu"e <$t"li#.34
2inclu"e <$t"io.34
#include mpi.!
2"efine M@CBC@?AI9@>IA@A K000000 !! (6ita 1a$ar$e "e li%ite$
2"efine M@CB(90(?G 1000
2"efine 9)MBD(C0G?(H 10000 !! Hi%ula 6ector to"a6ia %ayor
2"efine 9)MBL)HC@AG &
2"efine >G9OBP@0?G9 1000 !! Patron "e acce$o a %e%oria
!! 1ara e6itar tecnica 1refetc3
"" SI)UE EN LA P*)INA SI)UIENTE
Prctica !8 M"todo de Monte Carlo ( su#eraceleraci)n P,ina - 1%
E.U. de Informtica-U.P.M. Procesamiento Paralelo Curso 10/11
!! D@?I@L>(H O>GL@>(H
$tatic int *6ector; !! Dector 1ara el %ae$tro y ro"aMa
!! 1ara el e$cla6o
$tatic int lon-Dector; !! >on-itu" "el 6ector
$tatic int lon-?o"aMa; !! >on-itu" "e la$ ro"aMa$
$tatic int 1atron@cce$o7>G9OBP@0?G98; !! (l 1atron "e acce$o
!!55555555555555555555555555555555555555555555555555555555555555555555
!! InicialiIa "e for%a aleatoria el 1atron "e acce$o a la$ ro"aMa$
!!55555555555555555555555555555555555555555555555555555555555555555555
6oi" for%arPatronAe@cce$o( 6oi" ) {
int i, M, $tri"e(le-i"o$7>G9OBP@0?G98;
for (i=0; i<>G9OBP@0?G9; i++) $tri"e(le-i"o$7i8 = 0;
for (i=0; i<>G9OBP@0?G9; i++) {
"o
M = ran"o%() E >G9OBP@0?G9;
P3ile ($tri"e(le-i"o$7M8 == 1);
1atron@cce$o7i8 = M;
$tri"e(le-i"o$7M8 = 1;
}
}
!!55555555555555555555555555555555555555555555555555555555555555555555
!! Calcula el nu%ero "e 6ece$ .ue a1arece ;9)MBL)HC@AG; en la ro"aMa
!! "e ta%anio ;lon-?o"aMa; a1unta"a 1or ;6ector;
!!55555555555555555555555555555555555555555555555555555555555555555555
int 6ece$Que@1arece (6oi") {
int i, M, F, nu%Dece$;
nu%Dece$ = 0;
for (i=0; i<9)MBD(C0G?(H; i++)
for (M=0; M<lon-?o"aMa; M+=>G9OBP@0?G9)
for (F=0; F<>G9OBP@0?G9; F++)
if (6ector7M+1atron@cce$o7F88 == 9)MBL)HC@AG) nu%Dece$++;
return nu%Dece$;
}
!!55555555555555555555555555555555555555555555555555555555555555555555
6oi" e$cla6o (6oi") {
!! Ror%ar el 1atron "e acce$o y 1e"ir %e%oria 1ara el 6ector
for%arPatronAe@cce$o();
6ector = %alloc (lon-?o"aMa * );
!! ?eci#ir %i troIo
!! Co%1utar %i troIo
!! (n6iar %i re$ulta"o
}
"" SI)UE EN LA P*)INA SI)UIENTE
Prctica !8 M"todo de Monte Carlo ( su#eraceleraci)n P,ina - 11
E.U. de Informtica-U.P.M. Procesamiento Paralelo Curso 10/11
!!55555555555555555555555555555555555555555555555555555555555555555555
6oi" %ae$tro (int nu%Proce$o$) {
int i, M, total9u%Dece$, nu%Dece$;
$truct ti%e6al t0, tf, t;
!! Ror%ar el 1atron "e acce$o e inicialiIar el 6ector
for%arPatronAe@cce$o();
6ector = %alloc (lon-Dector * );
for (i=0; i<lon-Dector; i++)
6ector7i8 = ran"o%() E M@CB(90(?G;
a$$ert (-etti%eof"ay (=t0, 9)>>) == 0);
!! ?e1artir tra#aMo
!! Co%1utar %i troIo
!! ?eco-er re$ulta"o$
a$$ert (-etti%eof"ay (=tf, 9)>>) == 0);
ti%er$u#(=tf, =t0, =t);
1rintf (;9u%ero "e 6ece$ .ue a1arece el E" = E"<n;,
9)MBL)HC@AG, total9u%Dece$);
1rintf (;tie%1o = El",E*l"<n;, t.t6B$ec, t.t6Bu$ec!1000);
}
!!55555555555555555555555555555555555555555555555555555555555555555555
int %ain( int ar-c, c3ar *ar-678 ) {
int yo, nu%Proce$o$;
$et#uf ($t"out, 9)>>);
MPI_Init +,ar%c- ,ar%./0
MPI_#omm_ran& +MPI_#OMM_1O2LD- ,3o/0
MPI_#omm_si'e +MPI_#OMM_1O2LD- ,numProcesos/0
!! Control 1ara%etro =4 Car"inali"a" "el 6ector
if (ar-c := /) {
if (yo == 0) 1rintf (;)$o, cuentaPar1 car"inali"a"<n;);
MPI_(inali'e+/0
return 0;
}
lon-Dector = atoi(ar-6718);
lon-?o"aMa = lon-Dector ! nu%Proce$o$;
if (yo == 0) %ae$tro(nu%Proce$o$);
el$e e$cla6o();
MPI_(inali'e+/0
return 0;
}
Com#letar el c)di,o del #ro,rama cuentaPar1.c < Sin utili8ar scatter ni reduce =
Benerar el ejecutable de cuentaPar1.c tecleando8 ma$e cuentaPar1.
Ejecutar el #ro,rama =utili+ar la o#ci)n (np 1> con una cardinalidad de 1.D00.0009 (
anotar en la $abla-F el tiem#o de ejecuci)n. Ejecutarlo tres veces ( tomar el menor de
los tiem#os.
Calcular la aceleraci)n obtenida res#ecto de la versi)n secuencial =cuentaSec> (
anali+ar el resultado. < Da una aceleracin mayor de 1 <
Prctica !8 M"todo de Monte Carlo ( su#eraceleraci)n P,ina - 1D
E.U. de Informtica-U.P.M. Procesamiento Paralelo Curso 10/11
3.! +nlisis del sistema de cac,es # el conjunto de trabajo de los procesos
Para acabar de entender :u" es lo :ue #asa8
Ejecutar el #ro,rama cuentaSec con los valores indicados en la $abla-5 ( anotar los
tiem#os obtenidos
Calcular la columna de ratio de aumento de tiem#o al aumentar el tamaHo del
#roblema al doble ( tras#asar estos datos a la Brfica-1. Intentar e;#licar lo :ue #asa (
comentarlo con el #rofesor.
Brfica-18 Efecto del sistema de cac.es en la ejecuci)n de los #rocesos
3.- Ejemplo del uso de las primitivas scatter # reduce
4e suministra otra versi)n de este mismo #ro,rama #aralelo utili+ando las #rimitivas de
comunicaci)n colectiva. El #ro,rama se da com#letamente #ro,ramado ( a#arece en los
ane;os.
4i sobra tiem#o9 #uede com#ilarse el #ro,rama cuentaPar2 ( com#arar los resultados
obtenidos con los corres#ondientes a cuentaPar1.
Prctica !8 M"todo de Monte Carlo ( su#eraceleraci)n P,ina - 1&
E.U. de Informtica-U.P.M. Procesamiento Paralelo Curso 10/11
#abla(2" Problemtica para la medicin de tiempos
Comando #1 #2 #0 #1
">cuentaSecSimple 100000 ?1 )eces@
">cuentaSecSimple 100000 A ?1 )eces@
">ocupar 0 10 A ">cuentaSecSimple 100000
#abla(4" %ecto del optimi8ador de cdi-o
Comando #iempo
">ocupar 0 10 A ">cuentaSecSimple:0 100000
#abla(B" %ecto de la tcnica de prefetch
Comando #iempo
">ocupar 0 00 A ">cuentaSecSimple:0 1400000
">ocupar 0 20 A ">cuentaSec 1400000
#abla(C" %ecto de superaceleracin
Comando #iempo 5celeracin %iciencia
mpirun (np 1 cuentaPar1 1400000
#abla(3" 5nlisis cac'es y conDunto de trabaDo
Comando. ">ocupar 0 n A ">cuentaSec N
#iempo
Eatio
#
iF1
>#
i n N
2 20"000
2 100"000
2 200"000
10 100"000
20 C00"000
20 1"400"000
100 0"200"000
200 4"100"000
Prctica !8 M"todo de Monte Carlo ( su#eraceleraci)n P,ina - 1F
E.U. de Informtica-U.P.M. Procesamiento Paralelo Curso 10/11
! +.E/O0
!.1 1ic,ero Ma2e&ile
25555555555555555555555555555555555555555555555555555555555555555552
2 PCM. Proce$a%iento Paralelo Cur$o 0N!0K ()I 0'!0*!0K 2
2 2
2 MaFefile 1ara el "e$arrollo "e la$ 1rue#a$ "e lo$ 1ro-ra%a$ 2
2 relaciona"o$ con la 1ractica / "e MPI. 2
25555555555555555555555555555555555555555555555555555555555555555552
CC = !u$r!local!%1ic351./.N!#in!%1icc
to"o, 1i)no 1iAo$ 1i0re$ 1iPar cuentaHecHi%1le cuentaHec <
cuentaHecHi%1leG* cuentaPar1 cuentaPar/ ocu1ar9ucleo
1i)no, 1i)no.c
-cc 5Jall 5--"# 1i)no.c 5o 1i)no
1iAo$, 1iAo$.c
-cc 5Jall 5--"# 1iAo$.c 5o 1iAo$
1i0re$, 1i0re$.c
-cc 5Jall 5--"# 1i0re$.c 5o 1i0re$
1iPar, 1iPar.c
S(CC) 5Jall 5--"# 1iPar.c 5o 1iPar
cuentaHecHi%1le, cuentaHecHi%1le.c
-cc 5Jall 5--"# cuentaHecHi%1le.c 5o cuentaHecHi%1le
cuentaHecHi%1leG*, cuentaHecHi%1le.c
-cc 5Jall 5--"# 5G* cuentaHecHi%1le.c 5o cuentaHecHi%1leG*
ocu1ar9ucleo, ocu1ar9ucleo.c
-cc 5Jall 5--"# ocu1ar9ucleo.c 5o ocu1ar9ucleo
cuentaHec, cuentaHec.c
-cc 5Jall 5--"# 5G* cuentaHec.c 5o cuentaHec
cuentaPar1, cuentaPar1.c
S(CC) 5Jall 5--"# 5G* cuentaPar1.c 5o cuentaPar1
cuentaPar/, cuentaPar/.c
S(CC) 5Jall 5--"# 5G* cuentaPar/.c 5o cuentaPar/
#orrar,
r% *.o 1i)no 1iAo$ 1i0re$ 1iPar cuentaHecHi%1le <
cuentaHecHi%1leG* ocu1ar9ucleo cuentaHec cuentaPar1 cuentaPar/
Prctica !8 M"todo de Monte Carlo ( su#eraceleraci)n P,ina - 15
E.U. de Informtica-U.P.M. Procesamiento Paralelo Curso 10/11
!.2 1ic,eros ocupar # ocupar.ucleo.c
ocupar
2 !etc!#a$3rc
for ((i=0; i<S1; i++)); "o .!ocu1ar9ucleo S/ = "one
ocuparNucleo
!!555555555555555555555555555555555555555555555555555555555555555555+
!! PCM. Proce$a%iento Paralelo Cur$o 0N!0K ()I 0!0*!0K +
!! +
!! ocu1ar9ucleo.c, Pro-ra%a .ue ca1tura el u$o "e un nucleo +
!!555555555555555555555555555555555555555555555555555555555555555555+
2inclu"e <$t"li#.34
2inclu"e <$t"io.34
2inclu"e <$y$!ti%e.34
2"efine I0(?@CIG9(H 1000000
!!55555555555555555555555555555555555555555555555555555555555555555555
int %ain( int ar-c, c3ar *ar-678 ) {
int i, $e-un"o$, uno=1, "o$=/, tre$;
$truct ti%e6al t0, t1, t;
!! Control 1ara%etro =4 9u%ero "e $e-un"o$
if (ar-c := /) {
1rintf (;)$o, ocu1a9ucleo $e-un"o$ <n;);
exit(0);
}
$e-un"o$ = atoi(ar-6718);
-etti%eof"ay (=t0, 9)>>);
"o {
for (i=1; i<I0(?@CIG9(H; i++) tre$ = "o$ + uno;
-etti%eof"ay (=t1, 9)>>);
ti%er$u#(=t1, =t0, =t);
} P3ile (t.t6B$ec < $e-un"o$);
return 0;
}
Prctica !8 M"todo de Monte Carlo ( su#eraceleraci)n P,ina - !0
E.U. de Informtica-U.P.M. Procesamiento Paralelo Curso 10/11
!.3 1ic,ero cuentaPar2.c
!!555555555555555555555555555555555555555555555555555555555555555555+
!! PCM. Proce$a%iento Paralelo Cur$o 0N!0K ()I 0N!0*!0K +
!! +
!! cuentaPar/.c, Cuenta a1aracione$ "e un nu%ero en un 6ector %uy +
!! -ran"e. Der$ion 1aralela .ue utiliIa la$ funcione$ +
!! $catter y re"uce. +
!!555555555555555555555555555555555555555555555555555555555555555555+
2inclu"e <a$$ert.34
2inclu"e <$y$!ti%e.34
2inclu"e <$t"li#.34
2inclu"e <$t"io.34
#include mpi.!
2"efine M@CBC@?AI9@>IA@A K000000 !! (6ita 1a$ar$e "e li%ite$
2"efine M@CB(90(?G 1000
2"efine 9)MBD(C0G?(H 10000
2"efine 9)MBL)HC@AG &
2"efine >G9OBP@0?G9 1000 !! Patron "e acce$o a %e%oria
!! 1ara anular tecnica 1refetc3
!!55555555555555555555555555555555555555555555555555555555555555555555
int %ain( int ar-c, c3ar *ar-678 ) {
int i, M, F, nu%Dece$, yo, nu%Proce$o$, nu%Dece$0otal;
int 1atron@cce$o7>G9OBP@0?G98, $tri"e(le-i"o$7>G9OBP@0?G98;
int *6ector;
int lon-Dector, lon-?o"aMa;
$truct ti%e6al t0, tf, t;
$et#uf($t"out, 9)>>);
MPI_Init +,ar%c- ,ar%./0
MPI_#omm_ran& +MPI_#OMM_1O2LD- ,3o/0
MPI_#omm_si'e +MPI_#OMM_1O2LD- ,numProcesos/0
!! Control 1ara%etro =4 Car"inali"a" "el 6ector
if (ar-c := /) {
if (yo == 0) 1rintf (;)$o, cuentaPar/ car"inali"a"<n;);
MPIBRinaliIe();
return 0;
}
lon-Dector = atoi(ar-6718);
lon-?o"aMa = lon-Dector ! nu%Proce$o$;
!! He for%a el 1atron "e acce$o a %e%oria
for (i=0; i<>G9OBP@0?G9; i++) $tri"e(le-i"o$7i8 = 0;
for (i=0; i<>G9OBP@0?G9; i++) {
"o
M = ran"o%() E >G9OBP@0?G9;
P3ile ($tri"e(le-i"o$7M8 == 1);
1atron@cce$o7i8 = M;
$tri"e(le-i"o$7M8 = 1;
}

Prctica !8 M"todo de Monte Carlo ( su#eraceleraci)n P,ina - !1
E.U. de Informtica-U.P.M. Procesamiento Paralelo Curso 10/11
!! He 1i"e %e%oria e inicialiIa el 6ector
if (yo == 0) {
6ector = %alloc (lon-Dector * );
for (i=0; i<lon-Dector; i++)
6ector7i8 = ran"o%() E M@CB(90(?G;
a$$ert (-etti%eof"ay (=t0, 9)>>) == 0);
} el$e
6ector = %alloc (lon-?o"aMa * );
!! He re1arte, co%1uta y recolectan re$ulta"o$
MPI_Scatter +.ector- lon%2oda4a- MPI_INT-
.ector- lon%2oda4a- MPI_INT- 5- MPI_#OMM_1O2LD/0
nu%Dece$ = 0;
for (i=0; i<9)MBD(C0G?(H; i++)
for (M=0; M<lon-?o"aMa; M+=>G9OBP@0?G9)
for (F=0; F<>G9OBP@0?G9; F++)
if (6ector7M+1atron@cce$o7F88 == 9)MBL)HC@AG) nu%Dece$++;
MPI_2educe +,num6eces- ,num6ecesTotal- 7- MPI_INT-
MPI_SUM- 5- MPI_#OMM_1O2LD/0

if (yo == 0) {
a$$ert (-etti%eof"ay (=tf, 9)>>) == 0);
ti%er$u#(=tf, =t0, =t);
1rintf (;9u%ero "e 6ece$ .ue a1arece el E" = E"<n;,
9)MBL)HC@AG, nu%Dece$0otal);
1rintf (;tie%1o = El",E*l"<n;, t.t6B$ec, t.t6Bu$ec!1000);
}
MPI_(inali'e+/0
return 0;
}
Prctica !8 M"todo de Monte Carlo ( su#eraceleraci)n P,ina - !!

También podría gustarte