2010-11-25 6 views
3

Existe-t-il un appel de bibliothèque permettant l'envoi/la réception de messages de taille variable à l'aide de MPI? Un travail autour serait d'envoyer la taille des données dans le premier message et le suivre avec la charge utile réelle, mais je me demandais s'il y avait une convention pour combiner ces deux messages distincts.Message de taille variable en MPI

+0

Dans le cas général, deux messages avec taille et charge utile sont la méthode préférée pour passer un message dont la taille n'est pas connue avant l'exécution. –

+0

C'est la solution de contournement, mais ce n'est pas simple car les deux messages peuvent interférer avec une autre paire dans un thread différent. Douglas Gregor et d'autres discutent des approches thread-safe dans ce document https://www.researchgate.net/publication/228737912_Dynamically-Sized_Messages_in_MPI-3 et plaident pour une façon standard de le faire. – alfC

Répondre

2

Le nombre fourni à MPI_Recv est uniquement une limite supérieure. MPI_Get_count peut être utilisé pour trouver le nombre exact d'éléments reçus.

Sorte de douilles similaires je suppose.

+1

La seule mise en garde est que le nombre et la taille du tampon transmis à MPI_Recv doivent correspondre à la taille. Si une limite raisonnable sur la taille du message peut être faite à l'avance, cela peut être une technique efficace. Sinon, pour s'adapter au cas général, il y aura un certain nombre de tampons capables de contenir un nombre de 32 bits de types de données. Cela peut sérieusement gonfler l'empreinte mémoire. –

+0

Pouvez-vous ajouter un exemple? Souhaitez-vous utiliser 'MPI_Get_count()', puis quelque chose comme 'malloc (sizeof (char) * getCountResult)', puis passer le tampon résultant à 'MPI_Recv()'? – binki

2

Vous pouvez également utiliser MPI_Probe ou MPI_Iprobe au lieu d'afficher une réception avec MPI_Recv ou MPI_Irecv. Probe/Iprobe peut présenter des désavantages en termes de performances s'il est utilisé de manière incorrecte, mais il s'agit d'une approche courante pour traiter les messages de taille variable. De même, soyez prudent dans un environnement multithread car Probe/Iprobe n'est pas sûr dans certains contextes multithread. Voir Hoefler et al. pour une discussion approfondie de ces problèmes et un croquis du correctif (Mprobe) susceptible d'être inclus dans MPI-3.