bonjour tous;
j'ai un code mpi ecrit en C, ce code est constitué de deux programmes un prg maitre et un autre ouvrier, j'ai essayer de l'executer avec la commande mpiexec -np 3 -max_np 7 maitre mais ça marche pas , en fait cette commande est utilisé pour un code mpi en Fortran, mais j'ai pas trouvé d'équivalent en C.
voici les deux programmes
MAITRE:
/**************************************************/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <mpi.h> #include <sys/time.h> int main(int argc, char **argv) { int nb_procs_maitres,nb_procs_ouvriers=4,nb_procs,rang,code; int inter_comm, intra_comm, rang_maitre=1; int drapeau=0; MPI_Info info; MPI_Init (&argc,&argv); MPI_Comm_size (MPI_COMM_WORLD ,&nb_procs_maitres); // Activation des processus ouvriers MPI_Comm_spawn ("ouvriers", argv, nb_procs_ouvriers,info,rang_maitre, MPI_COMM_WORLD ,&inter_comm , MPI_ERRCODES_IGNORE); // Fusion des communicateurs associ´s a inter_comm. Dans intra_comm, les rangs // des processus seront ordonn´s selon la valeur de largument drapeau MPI_Intercomm_merge (inter_comm, drapeau, &intra_comm); MPI_Comm_size (intra_comm, &nb_procs); MPI_Comm_rank (intra_comm, &rang ); printf("maitre de rang %d ,intra_comm de taille %d , mon MPI_COMM_WORLD de taille %d ", rang, nb_procs,nb_procs_maitres); MPI_Finalize (); }
OUVRIER:
merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <mpi.h> #include <sys/time.h> int main(int argc, char **argv) { int nb_procs_ouvriers,nb_procs,rang; int inter_comm, intra_comm; int drapeau=1; MPI_Info info; MPI_Init (&argc,&argv); MPI_Comm_size (MPI_COMM_WORLD ,&nb_procs_ouvriers); // Ai-je un processus maitre MPI_Comm_get_parent (&inter_comm); if(inter_comm == MPI_COMM_NULL) { printf("pas de processus maitre "); MPI_Finalize (); } /* Fusion des communicateurs associ´s a inter_comm. Dans intra_comm, les rangs*/ /* des processus seront ordonn´s selon la valeur de largument drapeau*/ MPI_Intercomm_merge (inter_comm, drapeau, &intra_comm); MPI_Comm_size (intra_comm, &nb_procs); MPI_Comm_rank (intra_comm, &rang ); printf("ouvrier de rang %d ,intra_comm de taille %d , mon MPI_COMM_WORLD de taille %d ", rang, nb_procs,nb_procs_ouvriers); MPI_Finalize (); return (0); }
Partager