TP HPC 5
Master Informatique - 1` ere ann´ ee Ann´ ee 2021-2022
Dans ce TP, vous allez exp´erimenter les op´erations de communications collectives et point `a point de MPI, au travers d’un programme d’estimation du nombreπavec une m´ethode de Monte-Carlo.
Principe de la m´ ethode
On consid`ere que l’on dispose d’un cercle de rayonr, inscrit dans un carr´e de cˆot´e 2r(voir figure 1).
Figure 1 – Sch´ematisation de la g´eom´etrie pour les tirages al´eatoire. Le rayon du cercle est ici de 1 et le cˆot´e du carr´e de 2.
On tire un point au hasard dans le carr´e et on se pose la question de savoir quelle est la probabilit´e que ce point soit ´egalement dans le cercle. Cette probabilit´e est ´egale au rapport des surfaces des deux figures, c’est `a dire, en notantP la probabilit´e recherch´ee :
P =Aire du cercle Aire du carre = πr2
(2r)2 = π 4 On peut donc ´ecrire :π= 4×P
Tout le probl`eme si l’on cherche `a estimer π est alors de pouvoir calculer ou estimer la valeur de P. Les m´ethodes de Monte-Carlo sont des approches probabilistes qui permettent de r´esoudre ce type de probl`eme, mˆeme si elles ne sont pas toujours les plus efficaces. Dans le cadre de cet exercice, leur application sera tr`es simple :
— on tireN positions de points au hasard dans le carr´e (une valeur dexet une valeur dey, toutes deux comprises entre −1 et 1) ;
— pour chaque point, on v´erifie s’il se trouve dans le cercle, auquel cas on incr´emente un compteur de points internes au cercle ;
— `a la fin du processus, en notant I le nombre de points qui se trouvent dans le cercle, on peut
´
ecrire :P = NI et donc en d´eduire une valeur approch´ee deπ.
Exercice 1
Ecrire une version s´equentielle d’un programme implantant le processus de Monte-Carlo d´ecrit ci- dessus. On pr´ecise les ´el´ements suivants :
— la g´en´eration de nombres al´eatoires pourra ˆetre effectu´ee via la fonctionrand(), qui retourne un entier compris entre 0 et RAND MAX;
— un point est consid´er´e dans un cercle de rayon r si ses coordonn´ees (x, y) v´erifient l’´equation x2+y2< r2;
1
— l’application stoppera les calculs si l’une des deux conditions suivantes est atteinte :
— un nombre maximal de points, fix´e par une constante, a ´et´e atteint ;
— une pr´ecision suffisante sur le calcul deπa ´et´e atteinte, valeur ´egalement fix´ee par une constante.
La pr´ecision atteinte (ou l’erreur commise) sera calcul´ee comme la diff´erence entre la valeur obte- nue par l’estimation courante et une valeur fix´ee deπ. Vous pourrez prendre :
π= 3.141592653589793238462643 .
Une estimation de Monte-Carlo ´etant assez lente `a converger, il est conseill´e de fixer une pr´ecision faible pour les calculs, de l’ordre de 10−6.
Exercice 2
D´eveloppez une fonction permettant d’effectuer l’estimation deπen parall`ele avec MPI, qui n’utilisera que des communications collectives. Le principe en sera le suivant :
— Chaque processus g´en`ere it´erativements des paquets deN points et m´emorise deux quantit´es : 1. le nombre total de points tir´es al´eatoirement ;
2. le nombre total de points inscrits dans le cercle.
— `a la fin de chaque it´eration, les r´esultats sur ces deux quantit´es sont somm´es par un processus maˆıtre (par exemple le processus 0), qui determine ensuite si l’application doit stopper ou non, selon les deux conditions fix´ees `a la premi`ere question ;
— le r´esultat de cette ´evaluation est ensuite diffus´e `a tous les processus, qui peuvent alors d´eterminer s’ils doivent relancer une it´eration ou s’arrˆeter.
Remarque importante : Chaque processus devra initialiser son propre g´en´erateur de nombres al´eatoires de mani`ere diff´erente, afin de ne pas g´en´erer la mˆeme suite de nombres. Pour ce faire, vous pourrez utiliser la fonction srand()ainsi que l’identit´e du processus, afin d’obtenir une initialisation diff´erente.
Exercice 3
Dans cet exercice, vous allez d´evelopper une seconde version parall`ele de l’estimation deπ, qui permet- tra d’illustrer le fonctionnement des communications point `a point et la cr´eation de sous-communicateurs.
Principe
Dans cette version, un processus (qui sera appel´e serveur dans la suite de l’´enonc´e) sera charg´e de g´en´erer des paquets de nombres al´eatoires `a la demande et de les envoyer au processus demandeur.
Les autres processus effectueront les op´erations de g´en´eration des points `a partir des valeurs al´eatoires re¸cues du serveur et de la mise `a jour des deux variables compteurs qui leur sont associ´ees.
Lorsque le paquet aura ´et´e trait´e par chaque processus, les valeurs des compteurs seront somm´ees par l’un des processus, qui d´ecidera de la poursuite ou non de l’application et en informera les processus participant au calcul (cf exercice pr´ec´edent).
Le processus serveur : ce processus sera amen´e `a effectuer des tˆaches totalement diff´erentes des autres processus de l’application. Il sera donc n´ecessaire de cr´eer deux sous-communicateurs disjoints, l’un contenant uniquement le serveur et le second tous les autres processus. En effet, le serveur ne participant pas aux ´etapes d’´echanges collectifs qui auront lieu entre processus de calcul, votre application se bloquera si il fait partie du communicateur impliqu´e dans ces ´echanges. Notez cependant que pour les ´echanges point `a point, qui impliquent le serveuretles autres processus, c’est le communicateur global qui devra ˆ
etre utilis´e ...
Enfin, il sera n´ecessaire de pr´evoir un m´ecanisme d’arrˆet du processus serveur, par exemple en lui envoyant un message sp´ecifique lui permettant de d´eterminer que la fin de l’application est arriv´ee.
2