HPC - Stima del valore di \(\pi\) con metodo Monte Carlo

Moreno Marzolla moreno.marzolla@unibo.it

Ultimo aggiornamento: 2021-10-28

Il file mpi-pi.c contiene una implementazione seriale di un algoritmo di tipo Monte Carlo per il calcolo del valore approssimato di \(\pi\). L'algoritmo è già stato descritto nella prima esercitazione OpenMP, e viene richiamato per comodità (si faccia riferimento alla Figura 1).

Figura 1: Calcolo di \pi con metodo Monte Carlo
Figura 1: Calcolo di \(\pi\) con metodo Monte Carlo

Modificare il file mpi-pi.c per parallelizzare il calcolo del valore di \(\pi\). Sono possibili diverse strategie; si consiglia di usare quella seguente che ha il vantaggio di essere abbastanza semplice da realizzare (P rappresenta il numero di processi MPI attivi):

  1. Ciascun processo ottiene il valore di \(N\) dalla riga di comando; si può inizialmente assumere che \(N\) sia multiplo di \(P\), e successivamente rilassare questo requisito per fare funzionare il programma con qualsiasi valore di \(N\).

  2. Ciascun processo \(p\), incluso il master, genera \(N/P\) punti casuali e tiene traccia del numero \(x_p\) di punti all'interno del cerchio;

  3. Ciascun processo \(p\) diverso dal master invia al master il proprio valore \(x_p\) utilizzando operazioni send/receive punto-punto.

  4. Il master riceve i valori \(x_p\) per ogni \(p = 1, \ldots, P-1\); il valore \(x_0\) già ce l'ha) e calcola la loro somma \(x\) stampando il valore approssimato di \(\pi\) come \((4x / N)\).

Realizzare il passo 3 mediante operazioni send/receive punto-punto. Questo approccio non è efficiente: vedremo nella prossima lezione come i passi 3-4 possano (debbano!) essere realizzati mediante la funzione MPI che realizza una riduzione.

Per compilare:

    mpicc -std=c99 -Wall -Wpedantic mpi-pi.c -o mpi-pi -lm

Per eseguire:

    mpirun -n P ./mpi-pi [N]

Esempio, usando 4 processi MPI:

    mpirun -n 4 ./mpi-pi 1000000

File