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 l’argument 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:
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 l’argument 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);
}
merci d'avance