Random en paralelo y Montecarlo
Un algoritmo estocástico usa variables aleatorias: dos ejecuciones con la misma entrada pueden diferir.
| Tiempo | Resultado | |
|---|---|---|
| Monte Carlo | controlado (fijo/acotado) | puede tener error |
| Las Vegas | variable aleatoria | siempre correcto |
π por Montecarlo
Sección titulada «π por Montecarlo»puntos al azar en el cuadrado; caen en el círculo inscrito: (típicamente ).
#pragma omp parallel for reduction(+:count)for(i=0; i<num_trials; i++){ x = (double)rand()/RAND_MAX; y = (double)rand()/RAND_MAX; test = x*x + y*y; if(test <= r*r) Ncirc++;}pi = 4.0 * ((double)Ncirc/(double)num_trials);Las iteraciones son independientes ⇒ paralelización trivial con una reducción (en MPI: cada rank cuenta y MPI_Reduce(SUM)).
Generación de números aleatorios en paralelo
Sección titulada «Generación de números aleatorios en paralelo»LCG: , p. ej. , , .
| Estrategia | Idea | Trade-off |
|---|---|---|
| Centralizada | el maestro reparte los números | bajo performance (cuello de botella + comunicación) |
| Replicativa | cada proceso su semilla, mismo generador | riesgo de correlaciones |
| Distribuida | semilla basada en los random de los vecinos | eficiente pero difícil |
- Random tree: dos LCG, y , generan un árbol de semillas: streams independientes sin comunicación.
- MRG32k3a (L’Ecuyer, 1999): streams independientes, cada uno con substreams de período ; período total . Cada proceso usa su propio stream.
π en paralelo
Cada proceso genera N/p puntos en [0,1]², cuenta los que caen en el cuarto de círculo y se hace MPI_Reduce(SUM): π ≈ 4·n/N.
| rank | puntos | dentro | π local |
|---|---|---|---|
| P0 | 1024 | 803 | 3.1367 |
| P1 | 1024 | 793 | 3.0977 |
| P2 | 1024 | 795 | 3.1055 |
| P3 | 1024 | 798 | 3.1172 |
Integración numérica
Sección titulada «Integración numérica» con puntos; cada proceso cubre y se suma en el maestro. La generación aleatoria se delega a cada proceso ⇒ sin comunicación. En pi-reduce.cpp (session2) se integra con MPI_Bcast(n) + MPI_Reduce.
Ejercicio
Sección titulada «Ejercicio»¿Por qué conviene que cada proceso genere sus propios números en la integración Montecarlo, en vez de recibirlos del maestro? ¿Qué pasaría con π si necesitaras el orden en que caen los puntos?
Ver solución
Recibirlos del maestro es la estrategia centralizada: datos por la red y un cuello de botella en el maestro; generándolos localmente solo se comunica un número por proceso al final (la reducción). Si importara el orden global de los puntos, las iteraciones dejarían de ser independientes (habría dependencia secuencial) y ya no bastaría una reduction.
Autoevaluación
0/4 correctas · 0 respondidasFuente ·estudio/06_Random_Paralelo.md · U2.4-Diseño_en_paralelo-Particionamiento-Random.pdf (U2.6) · session2/pi-reduce/ejemplo03-PI-reduce.cpp · U3.2 (Ejemplo 4: π por integración)