Navigationshilfe

Hochschulrechenzentrum

Hauptnavigation

Seiteninhalt

LoadLeveler auf dem UNIX-Cluster: Serielle und parallele Jobs starten

Ein Programm kann auf einem Prozessor laufen, dies ist ein "serieller" Job. Wenn ein Programm mehrere Threads öffnet und diese auf mehreren Prozessoren verteilt laufen, dann ist das ein "paralleler" Job.


Einen seriellen Job starten

Mit Hilfe von xloadl kann ein serieller Job erstellt werden. Alternativ kann die cmd-Datei, die submittet werden soll, auch von Hand erstellt werden. Als Vorlage kann das folgende Skript verwendet werden:

### Die kursiven Ausdrücke selber bestücken!
#!/bin/ksh
# @ job_type = serial
# @ executable = filename_of_executable
# @ arguments = parameter-list
# @ input = /dev/null
# @ output = $(Executable).$(Cluster).$(Process).out
# @ error = $(Executable).$(Cluster).$(Process).err
# @ initialdir = Wherever_My_Directory_Is
# @ notify_user = my_complete_email_adress
# @ class = c200
# @ notification = complete
# @ checkpoint = no
# @ restart = no
# @ requirements = (Arch == "R6000") && (OpSys == "AIX51")
# @ queue

Anstatt das Skript abzutippen, kann es auch als sample.cmd heruntergeladen werden.

Wenn der Speicherbedarf eines seriellen Jobs durch die konfigurierten Klassen nicht abgedeckt wird, kann die Klasse "parallel" auch für serielle Jobs verwendet werden. Wie's geht steht am Ende des nächsten Abschnitts...


Einen parallen Job starten

Da ein paralleler Job auf mehreren Prozessoren läft müssen dem LoadLeveler im Vergleich zum seriellen Job noch zusätzliche Parameter mitgegeben werden.

Grundsätzlich kann bei einem parallelen Job der Speicherbedarf und die Anzahl der zu benutzenden Prozessoren frei gewählt werden. Diese sogenannten "Consumable Resources" müssen bei parallelen Jobs immer angegeben werden.

Als Vorlage kann das folgende Skript verwendet werden:

### Die kursiven Ausdrücke selber bestücken!
#!/bin/ksh
# @ job_type = parallel
# @ executable = filename_of_executable
# @ arguments = parameter-list
# @ input = /dev/null
# @ output = $(Executable).$(Cluster).$(Process).out
# @ error = $(Executable).$(Cluster).$(Process).err
# @ initialdir = Wherever_My_Directory_Is
# @ notify_user = my_complete_email_adress
# @ class = parallel
# @ resources = ConsumableCpus(1) ConsumableMemory(2 GB)
# @ node = 1
# @ tasks_per_node = 1
# @ notification = complete
# @ checkpoint = no
# @ restart = no
# @ requirements = (Arch == "R6000") && (OpSys == "AIX51")
# @ queue

Anstatt das Skript abzutippen, kann es auch als parallel.cmd heruntergeladen werden.

Nun zu den Änderungen gegenüber einem seriellen Job im einzelnen:

  1. job_type = parallel
    Nur wenn das angegeben wird, können auch die folgenden Schlüsselwörter verwendet werden.
  2. node = 1
    Der Job soll auf einem Rechner laufen. Das Verteilen des Jobs über verschiedene Rechner macht nur in Verbindung mit einer extrem schnellen Verbindung Sinn. Diese ist momentan nicht installiert.
  3. tasks_per_node = 3
    Gibt die Anzahl der zu benutzenden Prozessoren an.
  4. resources = ConsumableCpus(1) ConsumableMemory(2 GB)
    Gibt den Verbrauch von Prozessoren und Speicher für einen Task an. Mit tasks_per_node = 3 würde der Job insgesamt 3 Prozessoren und 6 GB RAM verbrauchen.

Einen serieller Job kann auch in der Klasse "parallel" gerechnnet werden. Dies hat den Vorteil das der Speicherbedarf mit Hilfe der "Consumable Resources" sehr genau gesteuert werden kann. Folgende Veränderungen sind dann vorzunehmen:

# @ job_type = parallel
# @ resources = ConsumableCpus(1) ConsumableMemory(2 GB)
# @ node = 1
# @ tasks_per_node = 1

Der zu erwartende Speicherbedarf muß bei ConsumableMemory eingetragen werden.

 

geändert am 26. Oktober 2004  E-Mail: loadlloadl@rz.uni-frankfurt.de

|

| Zur Navigationshilfe
empty

Seitenabschlussleiste


Druckversion: 26. Oktober 2004, 09:18
http://www.uni-frankfurt.de/org/hrz/services/loadl/parallel.html