Ich habe eine 3D kartesische Topologie von nx
von ny
durch nz
Prozesse. Es gibt mathematische Berechnungen, die gleichzeitig nur "Stifte" von Prozessoren beinhalten. Im Falle eines 3
durch 3
durch 3
Matrix von Prozessen rangierte von 0
bis 26
, Prozess 4
ist in drei Operationen beteiligt: Collective Kommunikation entlang Richtungen in MPI kartesischer Topologie
- mit Prozessen
13
und22
entlang der ersten Richtung - mit Prozessen
1
und7
entlang der zweiten Richtung - mit Prozessen
3
5
und entlang der dritten Richtung
Diese mathematischen Operationen erfordern sowohl Point-to-Point als auch kollektive Kommunikation zwischen Prozessen, die zum selben Stift gehören.
Für was Punkt zu Punkt Kommunikation betrifft, habe ich MPI_CART_SHIFT
verwendet, um jeden Prozess die Ränge der benachbarten Prozesse kennen zu lassen. (Dann werde ich MPI_SENDRECV
verwenden.)
Für was kollektive Kommunikation betrifft, wie man solche Kommunikationen durchführt? Ich denke, eine Lösung könnte sein, "Stift" Kommunikatoren zu definieren, die in der Anzahl von nx*ny + nx*nz + ny*nz
(diese Anzahl von Kommunikatoren erforderlich ist asymptotisch klein in Bezug auf die Anzahl der Prozesse, wie die Anzahl der Prozesse pro Richtung wächst).
Wäre das der einzige Weg? Gibt es keine Standardunterroutine, die sich auf den kartesischen Kommunikator stützt, um eine solche kollektive Kommunikation durchzuführen?