2016-12-23 2 views
0

c'est le résumé des MPI_Scatterv()Pourquoi le recvcount de MPI_Scatterv est-il un int fixe et sendcount un tableau?

int MPI_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs, 
      MPI_Datatype sendtype, void *recvbuf, int recvcount, 
      MPI_Datatype recvtype, 
      int root, MPI_Comm comm) 

Je ne peux pas l'air de comprendre comment cela fonctionne. SI MPI_Scatterv() envoie différents éléments de taille de bloc qui sont stockés dans *sendcounts alors pourquoi recvcount est un entier fixe et non un tableau de tailles de segments?

et aussi puisque c'est un entier fixe, quelle devrait être la valeur. devrait-il être égal à la valeur maximale de la matrice sendcount? Par exemple, si je

int sendcount[4] = {1,5,10,8}; 

devrait recvcount être égal à 10?

+0

Peut être utile pour vous de lire à ce QA dans SO: http://stackoverflow.com/questions/23165337/mpis-scatterv-operation – fedepad

Répondre

2

sendcounts Spécifiez les tailles de segments à envoyer. recvcount spécifie la taille du tampon de réception local, par ex. recvcount=sendcounts[rank].

En détail, c'est un peu plus complexe: La taille du tampon de réception doit être au moins assez grande pour stocker le morceau pour un rang donné. Si différents types sont impliqués, les extensions de type ont aussi leur importance.