-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSkeletonMPIProgram.cpp
More file actions
executable file
·39 lines (36 loc) · 1.69 KB
/
SkeletonMPIProgram.cpp
File metadata and controls
executable file
·39 lines (36 loc) · 1.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# include <mpi.h>
# include <cstdlib>
int main( int nargs, char* argv[] )
{
// On initialise le contexte MPI qui va s'occuper :
// 1. Créer un communicateur global, COMM_WORLD qui permet de gérer
// et assurer la cohésion de l'ensemble des processus créés par MPI;
// 2. d'attribuer à chaque processus un identifiant ( entier ) unique pour
// le communicateur COMM_WORLD
// 3. etc...
MPI_Init( &nargs, &argv );
// Pour des raisons de portabilité qui débordent largement du cadre
// de ce cours, on préfère toujours cloner le communicateur global
// MPI_COMM_WORLD qui gère l'ensemble des processus lancés par MPI.
MPI_Comm globComm;
MPI_Comm_dup(MPI_COMM_WORLD, &globComm);
// On interroge le communicateur global pour connaître le nombre de processus
// qui ont été lancés par l'utilisateur :
int nbp;
MPI_Comm_size(globComm, &nbp);
// On interroge le communicateur global pour connaître l'identifiant qui
// m'a été attribué ( en tant que processus ). Cet identifiant est compris
// entre 0 et nbp-1 ( nbp étant le nombre de processus qui ont été lancés par
// l'utilisateur )
int rank;
MPI_Comm_rank(globComm, &rank);
// On peut maintenant commencer à écrire notre programme parallèle en utilisant les
// services offerts par MPI.
std::cout << "Hello World, I'm processus " << rank << " on " << nbp << " processes.\n";
// A la fin du programme, on doit synchroniser une dernière fois tous les processus
// afin qu'aucun processus ne se termine pendant que d'autres processus continue à
// tourner. Si on oublie cet instruction, on aura une plantage assuré des processus
// qui ne seront pas encore terminés.
MPI_Finalize();
return EXIT_SUCCESS;
}