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 - !!