Je construis un serveur web distribué dans C/MPI et il semble que la communication point à point cesse complètement de fonctionner après le premier MPI_BARRIER dans mon code. Le code C standard fonctionne après la barrière, donc je sais que chacun des fils passe à travers la barrière. La communication point à point fonctionne également très bien avant la barrière. Cependant, quand je copie-colle le même code qui a travaillé la ligne avant la barrière dans la ligne après la barrière, il cesse de fonctionner entièrement. L'ENVOI attendra simplement pour toujours. Lorsque j'essaie d'utiliser un ISEND à la place, il passe à travers la ligne, mais le message n'est jamais reçu. J'ai été googling ce problème beaucoup et tout le monde qui a des problèmes avec MPI_BARRIER est dit la barrière fonctionne correctement et leur code est faux, mais je ne peux pas pour la vie de moi comprendre pourquoi mon code est faux. Qu'est-ce qui pourrait causer ce comportement?MPI_SEND cesse de fonctionner après MPI_BARRIER
Voici un programme qui illustre ceci:
#include <mpi.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
int procID;
int val;
MPI_Status status;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &procID);
MPI_Barrier(MPI_COMM_WORLD);
if (procID == 0)
{
val = 4;
printf("Before send\n");
MPI_Send(&val, 1, MPI_INT, 1, 4, MPI_COMM_WORLD);
printf("after send\n");
}
if (procID == 1)
{
val = 1;
printf("before: val = %d\n", val);
MPI_Recv(&val, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
printf("after: val = %d\n", val);
}
MPI_Finalize();
return 0;
}
Déplacer les deux if
déclarations avant la barrière provoque ce programme afin de fonctionner correctement.
EDIT - Il semble que la première communication, quel que soit le type, fonctionne et que toutes les futures communications échouent. C'est beaucoup plus général que je pensais au début. Peu importe que la première communication soit une barrière ou un autre message, aucune communication future ne fonctionne correctement.
Le code que vous avez posté me semble bien. Quelle version de MPI utilisez-vous? – suszterpatt
Avec openmpi 1.5.5 fonctionne très bien pour moi. – chemeng
Je sais que c'est openmpi, mais je n'arrive pas à comprendre quel numéro de version. Y a-t-il une commande qui vous dit? – TEOUltimus