Sie wollen wahrscheinlich MPI_COMM_SPLIT_TYPE überprüfen. Es ermöglicht Ihnen, eine vorhandene Kommunikator auf dem split_type
basierend aufzuspalten Sie als Parameter übergeben:
int MPI_Comm_split_type(MPI_Comm comm, int split_type, int key,
MPI_Info info, MPI_Comm *newcomm)
Im Moment ist die einzige split_type MPI_COMM_TYPE_SHARED
, im Standard definiert als:
Diese Art teilt den Communicator in Subkommunikatoren auf, von denen jeder eine gemeinsam genutzte Speicherregion erstellen kann.
Dies ist normalerweise das Gleiche wie das, was Sie fragen, aber Sie müssen überprüfen, ob es auf Ihrem Computer wahr ist.
Das andere, was Sie wissen müssen, ist, dass dies eine neue Funktion in MPI-3 ist so könnte es nicht in allen Implementierungen von MPI zur Verfügung stehen. Ich weiß, dass es für MPICH und seine Derivate verfügbar ist. AFAIK, es ist nicht in der letzten Version von Open MPI verfügbar. Stellen Sie also sicher, dass Sie eine Version von MPI haben, die dies tatsächlich unterstützt.
Wesley, danke. Es ist eine Schande, dass dies für Open MPI nicht verfügbar ist. Lassen Sie mich jedoch ein Beispiel geben, um zu sehen, ob ich verstanden habe, wie dieser Split-Typ funktioniert. Supose Ich habe 32 Prozesse auf 4 8-Core-Knoten. Meine Absicht ist es, 4 Gruppen von 8 Kernen zu erstellen, die auf gemeinsamen Speicherprozessen basieren, die sich auf demselben Knoten befinden. Ich könnte MPI_Comm_split_type verwenden. Wenn ich das benutze, könnte ich zum Beispiel nicht 8 Gruppen von 4 Gruppen erstellen (2 Gruppen in jedem Knoten), könnte ich? –
Ja, das kannst du tun. Wenn Sie 8 Gruppen mit 4 Gruppen erstellen möchten, in denen jede Gruppe lokal für einen Knoten ist, müssen Sie den Schlüsselparameter verwenden, sodass die Hälfte der Prozesse einen Schlüssel und die andere Hälfte einen anderen Schlüssel beisteuern. Dies war das Verhalten des bestehenden Aufrufs MPI_COMM_SPLIT, also sollte es viele Tutorials geben, denen du folgen kannst. Sie müssen nur ein bisschen für die neuen Typ Ergänzungen hinzufügen. –
OpenMPI setzt Umgebungsvariablen OMPI_COMM_WORLD_LOCAL_RANK und OMPI_COMM_WORLD_LOCAL_SIZE, die Sie verwenden, um herauszufinden, wie viele Prozesse einen Knoten („lokale Größe“) teilen. –