HPC-Computing am URZ
Das Universitätsrechenzentrum hat in enger Zusammenarbeit mit dem Arbeitskreis "Wissenschaftliches Rechnen" im Rahmen eines Gro�geräteantrages ein High Performance Compute Cluster beschafft.
Wettbewerbssieger der europaweiten Ausschreibung ist die in den Niederlanden ansässige Firma ClusterVision. Es ist
der zweite Cluster dieser Firma auf unserem Campus.
Clusterbeschreibung
Software
Betriebssystem �Scientific Linux�, gegenwärtig V5.5
Verfügbare Module: Kommando �module av� (blas, lapack, mpich, openmpi, �) Compiler:
Für die Nutzung des Clusters gibt es vier Meilensteine:
Momentan sind auf dem HPC-Cluster folgende Batchklassen eingerichtet:
Zusätzlich existiert die Routing-Queue "default": Fordert ein Job keine bestimmte Queue an,
so wird der Job durch diese Queue implizit anhand der angeforderten Ressourcen einsortiert.
Die Sortierung der wartenden Jobs wird über die Priorität geregelt.
Diese berechnet sich aus den angeforderten Ressourcen, der Wartezeit und der Queue-Priorität. Die Queue "short" gibt Jobs den höchsten Prioritätsfaktor, "infinity" den niedrigsten. Eine Sonderstellung nimmt die dedizierte "fat"-Queue ein: Es werden nur Jobs angenommen, die mit "qsub -q fat" submittiert werden. Die Routing Queue "default" bezieht diese Queue im Scheduling nicht ein. Submittierte Jobs rechnen nur auf "fatnode001" und "fatnode002". Die Besonderheit dieser Nodes ist, dass sie 96GB RAM besitzen. Eine weitere Besonderheit gilt für die "amd_std"-Queue: Es werden nur Jobs angenommen, die mit "qsub -q amd_std" submittiert werden. Die Routing Queue "default" bezieht diese Queue im Scheduling nicht ein. Submittierte Jobs rechnen nur auf den Nodes "amdnode001" bis "amdnode004". Diese vier Knoten wurden projektgebunden durch das Institut für Experimentelle Physik beschafft. D.h. jeder darf diese Knoten über die Queue "amd_std" nutzen, jedoch wird ein bereits rechnender Job abgebrochen und erneut in die Queue gestellt, sobald ein exklusiver Nutzer einen Job auf diesen Knoten einstellt. Bitte tragen Sie dafür Sorge, in angemessenen Zeitabschnitten Ihre Ergebnisse zwischenzusichern (Checkpointing). Möchten Sie nicht, dass Ihr Job erneut anläuft, sobald Ressourcen auf den amd-Knoten verfügbar werden, so geben Sie PBS den Schalter "-r n" mit (rerunable no). Für die Durchführung einer Berechnung im Stapelbetrieb sind dem System zwei Dinge zu übermitteln:
Die Abgabe einer Batch-Berechnung erfolgt mit dem Kommando:
qsub [Optionen] auszuführende Datei
Die für eine Jobabgabe wichtigsten Optionen sind:
Beispiel für eine Jobabgabe
qsub -l select=1:ncpus=1:mem=4gb,walltime=10:00:00 -o job.out -e job.err programm.exe
Hier soll eine serielle Berechnung von 10 Stunden durchgeführt werden. Die Ausgabedateien sind job.out und job.err.
Die Walltime muss im Format HHH:MM:SS auch wenn Null-Werte mit angegeben sind. Die Auswertung des Strings erfolgt von rechts nach links. walltime=720:00 ergibt demzufolge nicht 720 h, sondern 12 h
um 720 h zu erhalten, muss man walltime=720:00:00 spezifizieren Aussagen über das Kommando liefert man qsub Das Batchsystem selbst kann man auch interaktiv benutzen um Code zu kompilieren, Tests laufen zu lassen, zu debuggen oder ähnliches.
Kommando: qsub -I
qstat -f $PBS_JOBID Standardwerte bei Jobabgabe
Die ausführlichen
Dokumentationen finden Sie hier: PBSProRefGuide11.1 und PBSProUserGuide11.1
PBS-Beispielskripte für Anwendungen
Beispielskript für Gaussian
Gaussian arbeitet prinzipiell auf einem Knoten. Das für MPI zuständige Softwarepaket �Linda� wurde nach Analysen der Skalierung (Benchmarking) nicht beschafft. Demzufolge können für Gaussian Jobs maximal 12 Kerne (2 CPU � 6 Kerne) reklamiert werden.
Wir unterscheiden in unserer Konfiguration zwei Anwendungsfälle:
Der Standardfall betrifft alle Module außer denen, die das Muster "*-qlc" tragen. Diese nicht *-qlc-Module sollten im Normalfall genutzt werden, da die qlogic-Module keinen PBSpro-Support liefern und das Accounting der Jobs nicht funktioniert.
Die bereitgestellte "stable version" ist "1.4.5".
Sollen in Ausnahmefällen die von qlogic gelieferten OpenMPI-Module zur Anwendung kommen, muss der Befehl "mpirun" um die Parameter "-np" (number of processes) und
"-machinefile" ergänzt werden. (siehe "man mpirun")
Beispielskript für Abaqus
Module für eigene Anwendungen bauen
Um eigene Anwendungen zu modularisieren, muss das Module "use.own" geladen werden. Dieses schafft die nötigen Vorraussetzungen in der eigenen Umgebung. Jedes Modul benötigt eine Beschreibungsdatei, ein sogenanntes Modulefile. Diese Datei muss sich unter ~/privatemodules/ befinden. Eine Ordnerstruktur in der Form ~/privatemodules/softwarename/compiler/architektur/version bietet sich an, um eine möglichst genaue Beschreibung des Modules beim ausführen von module available zu sehen. Das eigentliche Modulefile ist in diesem Fall die Version bzw. Versionsnummer. Ein Modulefile wird in der Skriptsprache "Tcl" (Tool command language) verfasst.
Folgende Aufrufe werden häufig genutzt:
Beispielskript eines Modulefiles
| Firma | ClusterVision |
| Knotenanzahl | 144 Nodes entsprechend 1728 Cores, Dell PowerEdge C6100, 24 GB RAM 2 Nodes entsprechend 24 Cores, Dell PowerEdge R610, 96 GB RAM 2 Nodes entsprechend 128 Cores, Dell PowerEdge C6145, 128 GB RAM 2 Nodes entsprechend 128 Cores, Dell PowerEdge C6145, 256 GB RAM 30 Nodes entsprechend 360 Cores, ASUS N1720-E7, 32 GB RAM |
| Bezeichnung | node001 ... node144 fatnode001 ... fatnode002 amdnode001 ... amdnode004 fknode001 ... fknode030 |
| Managementknoten | 5, DellPowerEdge R610 |
| Paralleles Filesystem | Panasas - 30 TB Arbeitsbereich der Nutzer (/panfs/$USER - über die globale Variable $PANFS zu erreichen) |
| 1) Masterknoten | |
| a) cvc1.hrz.tu-freiberg.de | |
| b) cvc2.hrz.tu-freiberg.de | |
| 2) NFS-Knoten | |
| a) cvc3.hrz.tu-freiberg.de | |
| b) cvc4.hrz.tu-freiberg.de | |
| 3) Login-Knoten96 GB RAM | |
| a) login01.hrz.tu-freiberg.de (cvc5) | |
| CPU | Westmere EP X5670, 2.93 GHz |
| Peak-Performance | 20.25 TFlop/s |
| CPU (Erweiterung) | AMD Opteron 6276, 2.3GHz |
| Peak-Performance (Erweiterung) | 2.36 TFlop/s |
| CPU (Erweiterung) | Intel Xeon IvyBridge-EP E5-2630v2, 2.6 GHz |
| Peak-Performance (Erweiterung) | 9.36 TFlop/s |
Betriebssystem �Scientific Linux�, gegenwärtig V5.5
Verfügbare Module: Kommando �module av� (blas, lapack, mpich, openmpi, �) Compiler:
- Intel C++ Compiler
- Intel Fortran Compiler
- Intel MPI Library
- Intel Trace Analyzer and Collector
- Intel Math Kernel Library
- Intel Debugger
- Intel Cluster OpenMP
- Portland Group CDK Fortran/C/C++ (2 user Network-Floating License for 16 CPUs)
- Allinea DDT for 1 user and 16 processes (Version 2.6.1)
- Vampir (Version 7.6, 8.0 und 8.1.0)
- PBSpro (gegenwärtig Version 11.1)
- Abaqus (Version 6.10-EF1)
- Ansys (Version 13.0 und 14.0)
- ESPRESSO (Version 4.2.1 und 4.3.2)
- Gaussian (Version 0.9)
- NRLMOL
- OPENFOAM (Version 2.01)
- STAR-CCM+ (Version 6.02 und 6.06)
- SIESTA/TRANSIESTA(Version 3.1 und 4.3.1)
- TURBOMOLE(Version 6.5)
- COSMOTHERM(Version 13)
- COSMOIM3D(Version 6.5)
- COMSOL (Version 4.3b)
- UINTAH (Version 1.5.0)
- gnuplot (4.6.0)
- python (2.7.3; integrierte Module: scipy, numpy, matplotlib and ooolib)
Für die Nutzung des Clusters gibt es vier Meilensteine:
- Ausfüllen des Anmeldeformulars. Dieses finden Sie hier.
- Beschreibung Ihres Projektes im PDF-Format. Bitte orientieren Sie sich an diesem Muster. Denken Sie bitte daran, dass über die Nutzung von Gro�geräten gegenüber der DFG eine Rechenschaftspflicht besteht! Daher bitten wir Sie,
- jährlich um eine Zuarbeit analog dem "Bericht zur Nutzung von Forschungsgroßgeräten in den ersten drei Jahren nach Inbetriebnahme". Das Formular finden Sie hier: Deutsch (rtf) / Englisch (pdf) oder als TeX-Vorlage Deutsch / Englisch. Wenn vorhanden, senden Sie bitte einen (bebilderten) Kurzbericht (analog dem Muster der Projektbeschreibung).
- Ihr Antrag ist bei Bedarf halbjährlich zu verlängern.
Momentan sind auf dem HPC-Cluster folgende Batchklassen eingerichtet:
| Name | Maximale Cores | Maximale Rechenzeit |
| short | 600 Cores/Job | 48h (2 Tage) |
| long | 140 Cores/Job | 168h (7 Tage) |
| infinity | 36 Cores innerhalb dieser Queue 12 Cores/Job |
1008h (6 Wochen) |
| fat | 24 Cores innerhalb dieser Queue | 1008h (6 Wochen) |
| amd_std | 256 Cores innerhalb dieser Queue | 1008h (6 Wochen) |
| sfb920_std | 360 Cores innerhalb dieser Queue | 1008h (6 Wochen) |
| test | Node140 bis Node144 (je zwei Cores je Node); jeweils maximal 2 GB RAM pro Core | 2h |
Diese berechnet sich aus den angeforderten Ressourcen, der Wartezeit und der Queue-Priorität. Die Queue "short" gibt Jobs den höchsten Prioritätsfaktor, "infinity" den niedrigsten. Eine Sonderstellung nimmt die dedizierte "fat"-Queue ein: Es werden nur Jobs angenommen, die mit "qsub -q fat" submittiert werden. Die Routing Queue "default" bezieht diese Queue im Scheduling nicht ein. Submittierte Jobs rechnen nur auf "fatnode001" und "fatnode002". Die Besonderheit dieser Nodes ist, dass sie 96GB RAM besitzen. Eine weitere Besonderheit gilt für die "amd_std"-Queue: Es werden nur Jobs angenommen, die mit "qsub -q amd_std" submittiert werden. Die Routing Queue "default" bezieht diese Queue im Scheduling nicht ein. Submittierte Jobs rechnen nur auf den Nodes "amdnode001" bis "amdnode004". Diese vier Knoten wurden projektgebunden durch das Institut für Experimentelle Physik beschafft. D.h. jeder darf diese Knoten über die Queue "amd_std" nutzen, jedoch wird ein bereits rechnender Job abgebrochen und erneut in die Queue gestellt, sobald ein exklusiver Nutzer einen Job auf diesen Knoten einstellt. Bitte tragen Sie dafür Sorge, in angemessenen Zeitabschnitten Ihre Ergebnisse zwischenzusichern (Checkpointing). Möchten Sie nicht, dass Ihr Job erneut anläuft, sobald Ressourcen auf den amd-Knoten verfügbar werden, so geben Sie PBS den Schalter "-r n" mit (rerunable no). Für die Durchführung einer Berechnung im Stapelbetrieb sind dem System zwei Dinge zu übermitteln:
-
⇒ Name des Programms, das ausgeführt werden soll und eventuell benötigte Module
⇒ Benötigte Ressourcen wie Rechenzeit, Speicherbedarf, Ein- und Ausgabedateien,...
- interaktiv über einen Kommandozeilenaufruf (qsub -I)
- mit einem Batchskript (das ist in der Regel der Normalfall)
Die Abgabe einer Batch-Berechnung erfolgt mit dem Kommando:
qsub [Optionen] auszuführende Datei
Die für eine Jobabgabe wichtigsten Optionen sind:
| PBS-Kommando | Erklärung |
| -o outfile | Standardausgabe wird in die Datei outfile umgeleitet |
| -e errfile | Standard-Fehlerausgabe wird in die Datei errfile umgeleitet |
| -j oe | Standardausgabe und Fehlerausgabe werden in die gleiche Datei umgeleitet |
| -l walltime=10:00:00 | Rechenzeit in std:min:sec |
| -l select=1:ncpus=1:mem=4gb:mpiprocs=1 | Angabe der gewünschten CPU-Ressourcen:
Anzahl der Chunks mit select=xxx CPU-Anzahl pro Chunk mit ncpus=xxx Anzahl MPI-Prozesse pro Chunk mit mpiprocs=xxx (ist gleich der Anzahl von ncpus) Hauptspeicherbedarf pro Chunk mem=xxx |
| -l place={scatter|pack|free|{:excl|shared}} | scatter ... Jeder Chunk wird auf einer anderen Node gerechnet pack ... Alles wird auf einer Node gerechnet free ... Wahllose Verteilung der Chunks excl ... Kein weiterer Job startet auf der Node, auch wenn noch Resourcen frei sind shared ... Standardverhalten; Resourcen werden mit anderen Jobs geteilt |
| -M Mailadresse | Nutzer-Mailadresse; obligatorisch, um mit dem Nutzer von Seiten des URZ Kontakt aufnehmen zu können |
| -m a|b|e|n | Batch System sendet Nachricht wenn der Job in einem der folgenden Zustände ist: aborting | beginning | ending | no mail |
| -q Batchklasse | Name der Queue, in der ein Job einsortiert wird. |
| -N cluster_pbs | Name des Batchjobs |
| -r n | �Do not rerun job if system failure occurs� |
| -W sandbox={HOME|PRIVATE} | Legt das Ausgabeverzeichnis für Out- und Error-Dateien des Jobs während der Laufzeit fest:
HOME ... Ausgaben befinden sich auf der MOM-Node in $PBS_HOME/spool/spool/JOB_ID.master.cm.cluster.{ER|OU} PRIVATE ... Ausgaben befinden sich in $HOME/STDIN.JOB_ID.master.cm.cluster.x8z/JOB_ID.master.cm.cluster.{ER|OU} Die MOM-Node ist die erste Node, die bei "qstat -n" zurückgeliefert wird. |
| -W depend={type:<JOBID>{:<JOBID>}} | Erlaubt das Angeben von Abhängigkeiten zu anderen Jobs. Erlaubte Typen sind:
after ... Job wird zum Ausführen eingeplant, sobald alle angegebenen Jobs gestartet wurden. afterok ... Job wird zum Ausführen eingeplant, sobald alle angegebenen Jobs ohne Fehler beendet wurden. afternotok ... Job wird zum Ausführen eingeplant, sobald alle angegebenen Jobs mit Fehler beendet wurden. aferany ... Job wird zum Ausführen eingeplant, sobald alle angegebenen Jobs beendet wurden. |
| -V | Alle exportierten Umgebungsvariablen werden aus der Shell übernommen, von der aus qsub aufgerufen wird. |
qsub -l select=1:ncpus=1:mem=4gb,walltime=10:00:00 -o job.out -e job.err programm.exe
Hier soll eine serielle Berechnung von 10 Stunden durchgeführt werden. Die Ausgabedateien sind job.out und job.err.
Die Walltime muss im Format HHH:MM:SS auch wenn Null-Werte mit angegeben sind. Die Auswertung des Strings erfolgt von rechts nach links. walltime=720:00 ergibt demzufolge nicht 720 h, sondern 12 h
um 720 h zu erhalten, muss man walltime=720:00:00 spezifizieren Aussagen über das Kommando liefert man qsub Das Batchsystem selbst kann man auch interaktiv benutzen um Code zu kompilieren, Tests laufen zu lassen, zu debuggen oder ähnliches.
Kommando: qsub -I
qstat -f $PBS_JOBID Standardwerte bei Jobabgabe
- -N STDIN
- -l walltime=24:00:00 (max. 1008:00:00)
- -l select=1:ncpus=1:mem=100mb
- -l place=free
- -m a
- -W sandbox=PRIVATE
- Während der Laufzeit des Jobs:
- -e $HOME/STDIN.JOB_ID.master.cm.cluster.x8z/JOB_ID.master.cm.cluster.ER
- -o $HOME/STDIN.JOB_ID.master.cm.cluster.x8z/JOB_ID.master.cm.cluster.OU
- Nach Abschluss des Jobs:
- -e $HOME/JOBNAME.eJOB_ID
- -o $HOME/JOBNAME.oJOB_ID
| qstat -Q | liefert Informationen über laufende und wartende Batch-Jobs |
| qstat -a | liefert detaillierte Informationen über alle wartenden und laufende jobs Batch-Jobs mit zugehöriger Job-ID |
| qstat -n | liefert Informationen über die verwendeten Knoten |
| qstat -f jid | liefert detailliertere Informationen über einen bestimmten Job Beispiel: qstat �f $PBS_JOBID |
| qstat -H | zeigt die Job-History |
| qalter jid | änderung der Job-Ressourcen eines wartenden Jobs |
| tracejob jid | liefert Log-Informationen über einen Job |
| qdel jid | beendet einen laufenden Job bzw. entfernt einen wartenden Job |
Beispielskript für Gaussian
Gaussian arbeitet prinzipiell auf einem Knoten. Das für MPI zuständige Softwarepaket �Linda� wurde nach Analysen der Skalierung (Benchmarking) nicht beschafft. Demzufolge können für Gaussian Jobs maximal 12 Kerne (2 CPU � 6 Kerne) reklamiert werden.
#!/bin/bash
#PBS -N gaussian
#PBS -l select=1:ncpus=12:mem=2gb
#PBS -m abe
#PBS -M Ihre.Mailadresse@tu-freiberg.de
#PBS -o gaussian_pbs.out
#PBS -e gaussian_pbs.err
. /etc/profile.d/modules.sh
module add gaussian PBS_O_WORKDIR=$PANFS/gaussian-files
cd $PBS_O_WORKDIR g09 < ./fe48a.com
Beispielskript für OpenFOAM
#PBS -N gaussian
#PBS -l select=1:ncpus=12:mem=2gb
#PBS -m abe
#PBS -M Ihre.Mailadresse@tu-freiberg.de
#PBS -o gaussian_pbs.out
#PBS -e gaussian_pbs.err
. /etc/profile.d/modules.sh
module add gaussian PBS_O_WORKDIR=$PANFS/gaussian-files
cd $PBS_O_WORKDIR g09 < ./fe48a.com
#!/bin/bash
#!/bin/bash
## options for requesting resources
## select - number of chunks (should be number of cores you want to use)
## ncpus - cores per chunk (should be 1)
## mem - requested memory per chunk
## place - how to distribute jobs across the machine (should be free or scatter)
#PBS -l select=32:ncpus=1:mem=200mb,place=free
## walltime - requested run-time of the job
#PBS -l walltime=48:00:00
## queue the job should be submitted to
## 'default' queue direct the job automatically
#PBS -q default
## Email address
#PBS -M
## Email options 'a' 'b' 'e' 'n'
#PBS -m n
## supress requeueing
#PBS -r n
## location of the output of the job files
##PBS -W sandbox=PRIVATE
## Name of the Job, name is used for the output files and the 'job name' in qstat
#PBS -N
## Job files are placed in ~/pbs.JOBID directory while job is running and copied afterwards to working directory
##PBS -e $PBS_JOBNAME_err.log
##PBS -o $PBS_JOBNAME_out.log
## load modules used by job
module add intel/compiler/64/13.1/u2
module add openmpi/intel/64/1.4.5
module add cmake/2.8.10
module add cgal/intel/4.3
module add boost/1.53
## load OpenFOAM Version
. /cm/shared/apps/OpenFOAM/OpenFOAM-2.3.x/etc/bashrc
## execute mpi job mpirun -case -parallel
Beispielskript für Ansys
#!/bin/bash
## options for requesting resources
## select - number of chunks (should be number of cores you want to use)
## ncpus - cores per chunk (should be 1)
## mem - requested memory per chunk
## place - how to distribute jobs across the machine (should be free or scatter)
#PBS -l select=32:ncpus=1:mem=200mb,place=free
## walltime - requested run-time of the job
#PBS -l walltime=48:00:00
## queue the job should be submitted to
## 'default' queue direct the job automatically
#PBS -q default
## Email address
#PBS -M
## Email options 'a' 'b' 'e' 'n'
#PBS -m n
## supress requeueing
#PBS -r n
## location of the output of the job files
##PBS -W sandbox=PRIVATE
## Name of the Job, name is used for the output files and the 'job name' in qstat
#PBS -N
## Job files are placed in ~/pbs.JOBID directory while job is running and copied afterwards to working directory
##PBS -e $PBS_JOBNAME_err.log
##PBS -o $PBS_JOBNAME_out.log
## load modules used by job
module add intel/compiler/64/13.1/u2
module add openmpi/intel/64/1.4.5
module add cmake/2.8.10
module add cgal/intel/4.3
module add boost/1.53
## load OpenFOAM Version
. /cm/shared/apps/OpenFOAM/OpenFOAM-2.3.x/etc/bashrc
## execute mpi job mpirun
#!/bin/bash
#PBS -N Ansys
#PBS -l select=12:ncpus=1:mem=2GB:mpiprocs=1
#PBS -l place=scatter
#PBS -m abe
#PBS -M Ihre.Mailadresse@tu-freiberg.de
. /etc/profile.d/modules.sh
module load ansys/130 # fluent benötigt einen abschließenden Zeilenumbruch
cp $PBS_NODEFILE nodes
echo >>nodes ANSYSLMD_LICENSE_FILE={Port}@{Lizenzserver} fluent 3ddp -pib -cnf=nodes -ssh -g -t12 < inputfile > outfile
Beispielskript für OpenMPI
#PBS -N Ansys
#PBS -l select=12:ncpus=1:mem=2GB:mpiprocs=1
#PBS -l place=scatter
#PBS -m abe
#PBS -M Ihre.Mailadresse@tu-freiberg.de
. /etc/profile.d/modules.sh
module load ansys/130 # fluent benötigt einen abschließenden Zeilenumbruch
cp $PBS_NODEFILE nodes
echo >>nodes ANSYSLMD_LICENSE_FILE={Port}@{Lizenzserver} fluent 3ddp -pib -cnf=nodes -ssh -g -t12 < inputfile > outfile
Wir unterscheiden in unserer Konfiguration zwei Anwendungsfälle:
Der Standardfall betrifft alle Module außer denen, die das Muster "*-qlc" tragen. Diese nicht *-qlc-Module sollten im Normalfall genutzt werden, da die qlogic-Module keinen PBSpro-Support liefern und das Accounting der Jobs nicht funktioniert.
Die bereitgestellte "stable version" ist "1.4.5".
-
#!/bin/bash
#PBS -N MPI
#PBS -l select=10:ncpus=1:mem=2gb:mpiprocs=1
#PBS -l walltime=24:00:00
#PBS -m abe
#PBS -M Ihre.Mailadresse@tu-freiberg.de
#PBS -o MPI-Test_pbs.out
#PBS -e MPI-Test_pbs.err
. /etc/profile.d/modules.sh
module load intel/compiler/64/12.0/191
module load openmpi/intel/64/1.4.5 PBS_O_WORKDIR=$HOME/Pfad/zum/Programm
cd $PBS_O_WORKDIR mpirun ./Programm.exe
"-machinefile" ergänzt werden. (siehe "man mpirun")
-
#!/bin/bash
#PBS -N MPI-qlc
#PBS -l select=4:ncpus=1 -l place=scatter
#PBS -m abe
#PBS -M Ihre.Mailadresse@tu-freiberg.de
#PBS -o MPI-qlc.out
#PBS -e MPI-qlc.err
. /etc/profile.d/modules.sh
module load intel/compiler/64/12.0/191
module load openmpi/intel/64/1.4.3-qlc cd $HOME/Pfad/zum/Programm
mpirun -np 4 -machinefile $PBS_NODEFILE ./example_mpi.exe
-
#!/bin/bash
#PBS -l select=2:ncpus=4:mpiprocs=4:mem=6gb,walltime=2:00:00
#PBS -r n
JOBNAME="cp0_014_5x15_N010_raster"
WORKDIR="$PANFS/$PBS_JOBID"
LINKNAME="panfs_$PBS_JOBID"
echo "ABAQUS JOB: $JOBNAME"
echo "Loading modules"
module add abaqus/6.12
NCPUSTOT=`qstat -f $PBS_JOBID | sed -n -e 's/ //g' -e 's/Resource_List.ncpus=//p'`
mkdir -v "$WORKDIR"
cd "$PBS_O_WORKDIR"
ln -v -s "$WORKDIR" "$LINKNAME"
cd "$WORKDIR"
cp -v -t ./ "$PBS_O_WORKDIR"/"$JOBNAME".inp
EXEC="abaqus interactive job=$JOBNAME cpus=$NCPUSTOT"
echo "running: $EXEC"
$EXEC
mv -v -f -t "$PBS_O_WORKDIR" "$JOBNAME".*
rm -v -f *
cd "$PBS_O_WORKDIR"
rmdir -v "$WORKDIR"
rm -v -f "$LINKNAME"
echo "finished"
Um eigene Anwendungen zu modularisieren, muss das Module "use.own" geladen werden. Dieses schafft die nötigen Vorraussetzungen in der eigenen Umgebung. Jedes Modul benötigt eine Beschreibungsdatei, ein sogenanntes Modulefile. Diese Datei muss sich unter ~/privatemodules/ befinden. Eine Ordnerstruktur in der Form ~/privatemodules/softwarename/compiler/architektur/version bietet sich an, um eine möglichst genaue Beschreibung des Modules beim ausführen von module available zu sehen. Das eigentliche Modulefile ist in diesem Fall die Version bzw. Versionsnummer. Ein Modulefile wird in der Skriptsprache "Tcl" (Tool command language) verfasst.
Folgende Aufrufe werden häufig genutzt:
| Skript Aufruf | Erklärung |
| eval set [ array get env HOME ] | Liest die Home-Variable aus den Umgebungsvariablen ein. |
| set VARIABLE1 Wert | Setzt eine lokale Variable mit einem Wert. |
| set VARIABLE2 $HOME/$VARIABLE1/Wert | Setzt eine lokale Variable unter Einbeziehung anderer Variablen. |
| unset VARIABLE | Löscht eine Variable. |
| prepend-path PATH /Pfad/zu/einem/Ordner | Erweitert die Pfadvariable am Anfang um /Pfad/zu/einem/Ordner. |
| append-path PATH /Pfad/zu/einem/Ordner | Hängt an die Pfadvariable /Pfad/zu/einem/Ordner an. |
| setenv VARIABLE3 Wert | Setzt eine Umgebungsvariable mit einem Wert. |
| set-alias lll ls -la | Setzt für ls -la Alias mit lll |
| set req "\ intel/compiler/64/12.0/191 \ openmpi/intel/64/1.4.5 \ " | Belegt eine Variable mit mehreren Werten. In diesem Falle sind es andere Module, die als Abhängigkeit mitgeladen werden sollen. |
| foreach mod $req { if [ module-info mode display ] { puts stderr "module load $mod" } if [ module-info mode load ] { if ![is-loaded $mod] { module load $mod } } if [ module-info mode remove ] { if [is-loaded $mod] { module del $mod } } } | Diese Schleife lädt bzw. entlädt Module, die als Abhängigkeit in der Variable $req definiert wurden. |
-
#%Module -*- tcl -*-
##
## modulefile
##
proc ModulesHelp { } {
puts stderr "\tAdds Software Version X.X to your environment"
}
module-whatis "adds Software Version X.X to your environment"
eval set [ array get env HOME ]
set APPROOT $HOME/apps/software
set APPPATH $APPROOT/64/1.1
set WORKDIR $APPROOT/workdir
prepend-path PATH $APPPATH
setenv WORKDIR $WORKDIR
set-alias software.exe "software.exe -w $WORKDIR"
unset APPPATH
unset APPROOT
unset WORKDIR



