Este documento presenta el método de Monte Carlo para calcular el número pi. Describe tres versiones secuenciales del algoritmo con diferentes condiciones de terminación: 1) Fijando el número de iteraciones, 2) Terminando cuando el error respecto a pi sea menor que un umbral, 3) Iterando hasta que dos valores consecutivos de pi difieran en menos de un umbral. Se analizan los tiempos de ejecución de cada versión y se introducen conceptos como la superaceleración para la paralelización eficiente del algoritmo.
0 calificaciones0% encontró este documento útil (0 votos)
50 vistas22 páginas
Este documento presenta el método de Monte Carlo para calcular el número pi. Describe tres versiones secuenciales del algoritmo con diferentes condiciones de terminación: 1) Fijando el número de iteraciones, 2) Terminando cuando el error respecto a pi sea menor que un umbral, 3) Iterando hasta que dos valores consecutivos de pi difieran en menos de un umbral. Se analizan los tiempos de ejecución de cada versión y se introducen conceptos como la superaceleración para la paralelización eficiente del algoritmo.
Este documento presenta el método de Monte Carlo para calcular el número pi. Describe tres versiones secuenciales del algoritmo con diferentes condiciones de terminación: 1) Fijando el número de iteraciones, 2) Terminando cuando el error respecto a pi sea menor que un umbral, 3) Iterando hasta que dos valores consecutivos de pi difieran en menos de un umbral. Se analizan los tiempos de ejecución de cada versión y se introducen conceptos como la superaceleración para la paralelización eficiente del algoritmo.
Este documento presenta el método de Monte Carlo para calcular el número pi. Describe tres versiones secuenciales del algoritmo con diferentes condiciones de terminación: 1) Fijando el número de iteraciones, 2) Terminando cuando el error respecto a pi sea menor que un umbral, 3) Iterando hasta que dos valores consecutivos de pi difieran en menos de un umbral. Se analizan los tiempos de ejecución de cada versión y se introducen conceptos como la superaceleración para la paralelización eficiente del algoritmo.
Descargue como DOC, PDF, TXT o lea en línea desde Scribd
Descargar como doc, pdf o txt
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 - !!