2010-11-25 13 views
3

Gibt es einen Bibliotheksaufruf, der das Senden/Empfangen von Nachrichten mit variabler Größe mithilfe von MPI ermöglicht?Nachricht mit variabler Größe in MPI

Eine Umgehung würde sein, die Datengröße in der ersten Nachricht zu senden und sie mit der tatsächlichen Nutzlast zu verfolgen, aber ich fragte mich, ob es eine Konvention für das Kombinieren dieser zwei getrennten Nachrichten gab.

+0

Im allgemeinen Fall sind zwei Nachrichten mit Größe und Nutzlast die bevorzugte Methode, um eine Nachricht zu übergeben, deren Größe bis zur Laufzeit nicht bekannt ist. –

+0

Das ist die Problemumgehung, aber es ist nicht einfach, da die zwei Nachrichten ein anderes Paar in einem anderen Thread beeinträchtigen können. Douglas Gregor und andere diskutieren thread-sichere Ansätze in diesem Papier https://www.researchgate.net/publication/228737912_Dynamically-Sized_Messages_in_MPI-3 und machen den Fall für einen Standard Weg, dies zu tun. – alfC

Antwort

2

Die für MPI_Recv angegebene Anzahl ist nur eine obere Grenze. MPI_Get_count kann verwendet werden, um die genaue Anzahl der empfangenen Objekte zu finden.

Art von wie Sockets, denke ich.

+1

Die einzige Warnung ist, dass die Anzahl und die Puffergröße, die an MPI_Recv übergeben werden, in der Größe übereinstimmen sollten. Wenn eine vernünftige Beschränkung der Nachrichtengröße im Voraus getroffen werden kann, kann dies eine effektive Technik sein. Andernfalls, um den allgemeinen Fall zu berücksichtigen, wird es eine Anzahl von Puffern geben, die in der Lage sind, eine 32-Bit-Zählung von herumliegenden Datentypen zu halten. Dies kann den Speicherbedarf erheblich beeinträchtigen. –

+0

Können Sie ein Beispiel hinzufügen? Würdest du 'MPI_Get_count()' und dann etwas wie 'malloc (sizeof (char) * getCountResult)' verwenden und dann den resultierenden Puffer an 'MPI_Recv()' übergeben? – binki

2

Sie könnten auch MPI_Probe oder MPI_Iprobe anstelle einer Buchung mit MPI_Recv oder MPI_Irecv verwenden. Probe/Iprobe kann bei falscher Verwendung Leistungseinbußen aufweisen, sie sind jedoch ein gängiger Ansatz für den Umgang mit Nachrichten variabler Größe. Seien Sie auch vorsichtig in einer Multithread-Umgebung, da Probe/Iprobe in einigen Multithread-Kontexten nicht sicher sind. Eine gründliche Diskussion dieser Probleme finden Sie unter Hoefler et al. und eine Skizze des Fixes (Mprobe), das wahrscheinlich in MPI-3 enthalten sein wird.

Verwandte Themen