Der Zugang zu unserem leistungsfähigsten System erfolgt über ssh zum Headnode iapetos, ein entsprechendes Passwort vergeben die Admins.
$ ssh name@iapetos
Von iapetos ist die komplette Rechenleistung über das Queuing-System abrufbar. Ein direktes login auf die Rechenknoten beo-01 bis beo-34 ist normalerweise nicht erforderlich. Einen Überblick zu Auslastung und Status des Systems bietet Ganglia*.
Auf iapetos sind folgende Compiler installiert:
Die Intel-Compiler bieten spezielle Optionen zur prozessor-spezifischen Optimierung, erlaubt sind:
Ein auf beiden Prozessoren lauffähiges Programm erhält man also z.B. mit:
$ icc -O3 -xO -axT programm.c -o programm
Alle 34 Rechenknoten haben 8 Cores mit gemeinsamen 16 GB Speicher. Sie bieten sich also für Programme an, die mit OpenMP parallelisiert sind. Aktiviert wird OpenMP mit folgenden Compiler-Optionen:
Sowohl die 24 Xeon-Knoten als auch die 10 Opteron-Knoten sind untereinander mit InfiniBand vernetzt und eignen sich deshalb für massiv parallele Programme. Als Message Passing Interface ist Open MPI 1.2.4 installiert. Ein Modul-System erlaubt die Übersetzung von MPI-Programmen mit GNU oder Intel-Compilern. Folgender Befehl listet alle verfügbaren Module auf:
$ module avail
----------------------- /etc/ql/beobox/modules/versions ------------------------
3.2.3
------------------------ /usr/Modules/3.2.3/modulefiles ------------------------
dot module-cvs module-info modules null use.own
---------------------- /etc/ql/beobox/modules/modulefiles ----------------------
intel-mkl/10.0.2.018 intel-mkl/9.0.018 openmpi-gcc/1.2.4
intel-mkl/8.1 intel-mkl/9.1.023 openmpi-icc/1.2.4
Wird Open MPI mit Intel-Compilern gewünscht, wählt man:
$ module load openmpi-icc/1.2.4
Nun können MPI Programme mit Hilfe der mpi... Scripts übersetzt werden, z.B.:
$ mpicc mpi_hello.c -o mpi_hello.x
Die dabei verwendeten Compiler- und Linker-Optionen können mit folgenden Befehlen abgefragt werden:
$ mpicc --show-libs
$ mpicc --show-compile
Dies ist z.B. nützlich, wenn MPI-Programme mit anderen Compilern (pgi) bzw. Compiler-Versionen übersetzt werden sollen.
MPI-Programme müssen grundsätzlich über das Queuing-System gestartet werden. Weitere Details dazu folgen im nächsten Abschnitt.
Die Verwaltung der Rechenzeit übernimmt das Queuing-System Torque, d.h. alle Rechnungen müssen mit einem Jobscript gestartet werden. Eine Übersicht über alle Queues und ihre Limits liefert der Befehl:
$ qstat -q
Die aktuelle Auslastung sieht man mit:
$ qstat -a
Ein typisches Jobfile (mit MPI) sieht folgendermaßen aus:
#!/bin/bash
#PBS -l nodes=4:ppn=8:ib
#PBS -q work
#PBS -r n
#PBS -j oe
cd $PBS_O_WORKDIR
mpirun -n 32 ./mpi_hello
Bei seriellen oder OpenMP Programmen entfällt der Befehl mpirun. Stattdessen wird man die Zahl der OpenMP-Threads mit
export OMP_NUM_THREADS=...
beeinflussen. Man beachte auch die im Jobfile verwendete Option ...:ib, die die Jobausführung auf die Xeon-Knoten beo-01 bis beo-24 beschränkt. Werden die Opteron-Knoten beo-25 bis beo-34 gewünscht, verwendet man ...:ge. Fehlt die Angabe ganz, wird das Programm auf einem beliebigen Knoten gestartet. Bei MPI-Jobs sollte eine Mischung verschiedenartiger Knoten vermieden werden, da zwischen Opterons und Xeons nur eine Ethernet-Verbindung besteht. Die vollständige Hilfe zu Torque findet sich im Netz.
An das Queuing-System übergeben wird das Jobfile mit:
$ qsub jobfile
Auf iapetos sind folgende Bibliotheken installiert (z.T. im Verzeichnis /apps/prod/):
Beim compilieren entsprechender Programme müssen gegebenenfalls die vollen Pfade angegeben werden. Bsp. MKL:
$ icc -I/apps/prod/math-lib/mkl/10.0.2.018/include programm.c -L/apps/prod/math-lib/mkl/10.0.2.018/lib/em64t -lmkl -lmkl_lapack -liomp5 -lpthread -Xlinker -rpath -Xlinker /apps/prod/math-lib/mkl/10.0.2.018/lib/em64t -o programm.x
Als Debugger sind installiert:
Letzterer dient zur Analyse paralleler Programme (MPI).
*Zugriff auf Ganglia ist nur vom uni-internen Netz möglich.