2016-05-15 21 views
1

Ich würde gerne wissen, welche der beste Weg ist sicherzustellen, einen exklusiven Zugriff auf eine gemeinsame Ressource (wie Speicher-Fenster) unter n Prozesse in MPI. Ich habe versucht, MPI_Win_lock & MPI_Win_fence, aber sie scheinen nicht wie erwartet zu arbeiten, d. H .: Ich kann sehen, dass mehrere Prozesse eine kritische Region (Code zwischen MPI_Win_lock & MPI_Win_unlock, die MPI_Get und/oder MPI_Put enthält) gleichzeitig eingeben.MPI: Stellen Sie sicher, einen exklusiven Zugriff auf einen gemeinsamen Speicher (RMA)

Ich würde Ihre Vorschläge schätzen. Vielen Dank.

Antwort

1

In MPI 2 können Sie nicht wirklich atomare Operationen durchführen. Dies wird in MPI 3 unter Verwendung von MPI_Fetch_and_op eingeführt. Aus diesem Grund werden Ihre kritischen Daten geändert.

Darüber hinaus vorsichtig mit `MPI_Win_lock '. Wie beschrieben here:

Der Name dieser Routine ist irreführend. Insbesondere muss diese Routine nicht blockiert werden, außer wenn der Zielprozess der aufrufende Prozess ist.

Der eigentliche Blockprozess ist MPI_Win_unlock, dass Sie sicher sein können, erst nach dieser Prozedur zurückkehrt bedeutet, dass die Werte von put und get korrekt sind. Vielleicht ist dies besser here beschrieben:

MPI passives Ziel Operationen organisiert werden in dem Zugang Epochen, die von MPI Win Lock und MPI Win klammert werden die Anrufe entsperren. Kluge MPI-Implementierungen [10] werden alle Datenbewegungsoperationen (puts, gets und accumulate) in einer Netzwerktransaktion kombinieren, die beim Entsperren auftritt.

Das gleiche Dokument kann auch eine Lösung für Ihr Problem bieten, das heißt, dass kritische Daten nicht atomar geschrieben werden. Dies geschieht durch die Verwendung eines Mutex, ein Mechanismus, der sicherstellt, dass nur ein Prozess auf Daten zu der Zeit zugreifen kann.

Ich empfehle Ihnen, dieses Dokument zu lesen: Die Lösung, die sie vorschlagen, ist nicht schwer zu implementieren.