2011-03-01 5 views
8

Alors disons que j'ai un programme MPI avec 2 processus, rang 0 et rang 1.MPI_Recv - Comment déterminer le nombre?

int i[20], j[20], temp, size; 

En cours de rang 0, je

for(temp=0; temp<20; temp++) 
    i[temp] = temp; 
MPI_Send(i, 15, MPI_INT, 1, 1, MPI_COMM_WORLD); 

et Traitons dire avec le rang 1, alors est-ce que

// At this point, size is declared, but not assigned any value. 
MPI_Recv(j,size, MPI_INT, 0, 1, MPI_COMM_WORLD): 
cout << "I have received " << size << " elements" ; 

Ma question est, dans l'énoncé ci-dessus, est-ce que la "taille" doit être déclarée? Ou est-ce que MPI_Recv "sait" en quelque sorte qu'il reçoit 15 éléments, et définit automatiquement size = 15? Si la taille n'est pas définie, qu'arrive-t-il au code? Fondamentalement, ma question est, J'envoie un nombre différent d'éléments à des processeurs avec des rangs différents, tous les messages provenant du rang 0. Je veux savoir si je devrais d'abord envoyer la taille à travers, puis préparer les processeurs à recevoir autant d'éléments, ou si je peux simplement envoyer le tableau et les processus choisir automatiquement la taille à partir de là.

Répondre

14

Regardez la documentation MPI_Recv:

Paramètres d'entrée

nombre nombre maximum d'éléments dans le tampon de réception (entier)

Alors oui, vous avez besoin passer une valeur. Notez qu'il ne s'agit pas nécessairement du nombre réel d'éléments que vous recevez, mais seulement du nombre maximum d'éléments que votre tampon peut contenir. Dans votre cas, il vous suffit de passer 20. La section Notes mentionne également la façon de déterminer le nombre réel d'éléments qui ont été reçus:

L'argument count indique la longueur maximale d'un message; le nombre réel peut être déterminé avec MPI_Get_count.

Questions connexes