scatter in mpi

Voici le code de mpi scatter:

#include  #include  int a[10]={1,2,3,4,5,6,7,8,9,10}; int b[1]; int main(int argc, char *argv[]) { int rank; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Barrier(MPI_COMM_WORLD); if(rank ==0){ MPI_Scatter(a,1,MPI_INT,b,1,MPI_INT,0,MPI_COMM_WORLD); } MPI_Barrier(MPI_COMM_WORLD); printf("\n%d from rank=%d\n",b[0],rank); MPI_Finalize(); return 0; } 

Je veux une sortie comme suit:

1 de rang 0
2 de rang 1
3 de rang 2

Mais j’obtiens

1 de rang 0
0 de rang 1
0 de rang 2
0 de rang 3
0 de rang 4

MPI_Scatter() est une opération collective et doit donc être appelée par tous les membres du communicateur.

débarrassez-vous du if (rank == 0) et tout ira bien.

Notez que dans votre exemple, le tampon d’envoi est suffisamment petit et ne provoque aucun blocage.