![Kombination von GNU Parallel und Mpirun: Wie kann die maximale Anzahl an Kernen berücksichtigt werden?](https://rvso.com/image/164740/Kombination%20von%20GNU%20Parallel%20und%20Mpirun%3A%20Wie%20kann%20die%20maximale%20Anzahl%20an%20Kernen%20ber%C3%BCcksichtigt%20werden%3F.png)
Ich habe eine Maschine mit 32 Kernen, auf der ich einige MPI-Jobs mit einer variablen Anzahl von Kernen ausführen möchte (das liegt daran, dass das Problem dies erfordert). Gibt es eine Möglichkeit, GNU Parallel die Anzahl der MPI-Jobs bekannt zu machen, um zu verwalten, wann jeder Job gestartet werden soll?
Beispiel: Angenommen, ich muss viele (200) Jobs mit der folgenden Anzahl von MPI-Jobs starten:
NMPI=(2 2 2 4 4 4 4 6 7 10 12 24 32)
Daher möchte ich zunächst nur die ersten 8 Elemente des Arrays ausführen (da ihre Gesamtsumme kleiner ist als die Gesamtzahl der Kerne, 32) und dann nacheinander alle anderen Jobs nach und nach ausführen, sobald die ersten abgeschlossen sind, ohne das Limit von insgesamt 32 gleichzeitigen MPI-Jobs zu überschreiten. Nehmen wir beispielsweise an, dass die ersten 8 Prozesse ausgeführt wurden und der erste gerade beendet wurde (für den ersten NMPI[0] == 2). Dann sollte parallel nichts Neues ausgeführt werden, bis genügend Prozessoren frei sind, da der nächste Job NMPI[8]==7 hat und daher das maximale Limit von 32 Kernen überschreiten wird. Oder gibt es eine Möglichkeit, das Starten von Jobs parallel zu verbessern, z. B. indem zuerst der letzte MPI-Job (32 Kerne) gestartet wird, dann der letzte minus eins plus die ersten drei und so weiter?
Vielen Dank im Voraus für Ihre Anleitung
Antwort1
Kehren Sie die Reihenfolge des Arrays um, sodass Sie mit dem größten Job beginnen.
Vielleicht können Sie es verwenden --load 100%
und --delay 10s
so sicher sein, dass der Job alle Kerne verwendet, bevor Sie mit dem nächsten beginnen?