PPR 7 CALCUL DE MINIMUM PAR LES ALGORITHMES
ECHO ET PHASE
L'algorithme ECHO
Le but de ce TME est d'utilser MPI pour mettre en œuvre un calcul de minimum réparti sur une
topologie quelconquetoutes les liaisons sont bidirectionnelles. Comme pour le TME précédent, il
est nécessaire de simuler cette topologie. Le programme principal est identique à celui proposé dans le
TME précédent. La fonction simulateur correspondant à la topologie ci-dessous :
1
3
4
2
5
6
est donnée par :
#define NB_SITE 6
#define TAGINIT 0
void simulateur()
{
MPI_Status status;
/* nb_voisins[i] est le nombre de voisins du site i */
int nb_voisins[NB_SITE+1] = {-1, 3, 3, 2, 3, 5, 2};
int min_local[NB_SITE+1] = {-1, 12, 11, 8, 14, 5, 17};
/* liste des voisins */
int voisins[NB_SITE+1][5] = {{-1, -1, -1, -1, -1},
{2, 5, 3, -1, -1}, {4, 1, 5, -1, -1},
{1, 5, -1, -1, -1}, {6, 2, 5, -1, -1},
{1, 2, 6, 4, 3}, {4, 5, -1, -1, -1}};
int i;
for(i=1; i<=NB_SITE; i++){
MPI_Send(&nb_voisins[i], 1, MPI_INT, i, TAGINIT, MPI_COMM_WORLD);
MPI_Send(voisins[i], nb_voisins[i], MPI_INT, i, TAGINIT, MPI_COMM_WORLD);
MPI_Send(&min_local[i], 1, MPI_INT, i, TAGINIT, MPI_COMM_WORLD);
}
}
On veut effectuer le calcul au moyen de l'algorithme ECHO dont on rappelle le principe :
p initiateur
p non initiateur
Sp :
/* spontanément, une fois */
pour tout q Voisp faire
envoyer x à q;
/* q Voisp : Recup[q] */
envoyer x à perep;
Rp :
/* un message x arrive de q */
recevoir x ;
Recup[q] = vrai;
/* un message x arrive de q */
recevoir x ;
Recup[q] = vrai;
si (perep == nil) {
perep = q;
pour tout r Voisp \ {q} faire
envoyer x à r;
}
Dp :
/* q Voisp : Recup[q] */
décision
Les fonctions main et simulateur sont disponibles dans le fichier :
/Infos/lmd/2004/master/ue/ppr-2005fev/mpi_echo.c
1 -Implémentez sous MPI la fonction calcul_min(rang) qui réalise un calcul de minimum réparti
en appliquant l'algorithme ECHO. On supposera que l'initiateur est le site 1.
2 -Appliquez votre programme sur la topologie fournie en exemple, en exécutant tous les processus
sur des machines différentes.
L'algorithme PHASE
On veut maintenant réaliser un calcul de minimum sur un réseau orienté de topologie quelconque. On
va pour cela utiliser l'algorithme PHASE. On utilise toujours le même principe : le processus 0 envoie
aux processus 1 à n des informations sur la topologie. Comme le réseau est orienté, les informations
fournies distinguent maintenant pour chaque noeud les voisins entrants et les voisins sortants. La
fonction simulateur correspondant à la topologie ci-dessous :
1
3
4
2
5
6
1
6
9
4
7
est donnée par :
#define TAGINIT 0
#define NB_SITE 6
#define DIAMETRE /* !!!!! valeur a initialiser !!!!! */
#define DEG_IN_MAX 2 /* le max des degres entrants des noeuds */
#define DEG_OUT_MAX 2 /* le max des degres sortants des noeuds */
void simulateur()
{
MPI_Status status;
/* nb_voisins_in[i] est le nombre de voisins entrants du site i */
/* nb_voisins_out[i] est le nombre de voisins sortants du site i */
int nb_voisins_in[NB_SITE+1] = {-1, 2, 1, 1, 2, 1, 1};
int nb_voisins_out[NB_SITE+1] = {-1, 2, 1, 1, 1, 2, 1};
int min_local[NB_SITE+1] = {-1, 4, 7, 1, 6, 2, 9};
/* liste des voisins entrants */
int voisins_in[NB_SITE+1][2] = {{-1, -1},
{4, 5}, {1, -1}, {1, -1},
{3, 5}, {6, -1}, {2, -1}};
/* liste des voisins sortants */
int voisins_out[NB_SITE+1][2] = {{-1, -1},
{2, 3}, {6, -1}, {4, -1},
{1, -1}, {1, 4}, {5,-1}};
int i;
for(i=1; i<=NB_SITE; i++){
MPI_Send(&nb_voisins_in[i], 1, MPI_INT, i, TAGINIT, MPI_COMM_WORLD);
MPI_Send(&nb_voisins_out[i], 1, MPI_INT, i, TAGINIT, MPI_COMM_WORLD);
MPI_Send(voisins_in[i], nb_voisins_in[i], MPI_INT, i, TAGINIT,
MPI_COMM_WORLD);
MPI_Send(voisins_out[i], nb_voisins_out[i], MPI_INT, i, TAGINIT,
MPI_COMM_WORLD);
MPI_Send(&min_local[i], 1, MPI_INT, i, TAGINIT, MPI_COMM_WORLD);
}
}
Le programme principal est identique à celui proposé dans le TME précédent.
Les fonctions main et simulateur sont disponibles dans le fichier :
/Infos/lmd/2004/master/ue/ppr-2005fev/mpi_phase.c
1 -Implémentez sous MPI la fonction calcul_min(rang) qui réalise un calcul de minimum réparti
en appliquant l'algorithme PHASE.
2 -Appliquez votre programme sur la topologie fournie en exemple, en exécutant tous les processus
sur des machines différentes.
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !