MPI fonctionne correctement par ce que vous avez dit - au lieu de vos hypothèses sont incorrectes. Dans chaque implémentation MPI (que j'ai utilisé de toute façon), le programme entier est exécuté du début à la fin sur chaque processus. Les fonctions MPI_Init et MPI_Finalize sont requises pour configurer et démonter les structures MPI pour chaque processus, mais elles ne spécifient pas le début et la fin de l'exécution parallèle . Le début de la section parallèle est la première instruction dans main, et la fin est le retour final.
Un bon programme « modèle » pour ce qu'il semble que vous voulez serait (également répondu à How to speed up this problem by MPI):
int main(int argc, char *argv[]) {
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
if (myid == 0) { // Do the serial part on a single MPI thread
printf("Performing serial computation on cpu %d\n", myid);
PreParallelWork();
}
ParallelWork(); // Every MPI thread will run the parallel work
if (myid == 0) { // Do the final serial part on a single MPI thread
printf("Performing the final serial computation on cpu %d\n", myid);
PostParallelWork();
}
MPI_Finalize();
return 0;
}
De plus, si vous postez en fait un code source, peut-être nous pourrions aider davantage à la façon dont se votre programme MPI pour fonctionner correctement. Sur la base de votre très brève description, vous essayez peut-être d'utiliser la mémoire partagée pour communiquer (ce qui ne fonctionne pas, par définition, dans MPI). –