Módosítások

NIIF szuperszámítógépek használata

5 402 bájt törölve, 2014. október 8., 13:24
SGI UV Pécs
-liomp5 -lpthread -lm -openmp
</code>
 
== SGI UV Pécs ==
A pécsi gépen csak SMP vagy MPI programok futtatása engedélyezett. Minimálisan 12 szálat lehet lefoglalni. A foglalás alapegysége a numa node, ami 2x6 processzort és 60GB memóriát tartalmaz. Érdemes 12 többszörösével számolni a lefoglalalndó szálakat, pl.: 12, 24, 48, 96... Ha 2 hatványaira van szükségünk, akkor az SGE foglalást a legközelebbi 12-es szálszámmal kérjük, és az MPI-t vagy az OMP paraméterezzük 2^n szerint.
 
Az alapértelmezett MPI könyvtár az SGI MPT.
 
=== MPI fordítási opciók ===
<code>
CFLAGS=-O2 -xSSE4.2
FFLAGS=-O2 -xSSE4.2
LDFLAGS=$(MKLROOT)/lib/intel64/libmkl_scalapack_lp64.a \
-Wl,--start-group $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a \
$(MKLROOT)/lib/intel64/libmkl_sequential.a \
$(MKLROOT)/lib/intel64/libmkl_core.a \
$(MKLROOT)/lib/intel64/libmkl_blacs_sgimpt_lp64.a -Wl,--end-group \
-lpthread -lm
</code>
 
=== MPI és OpenMP fordítási opciók ===
Ebben az esetben az MKL műveletek OpenMP szálasíthatók, a program hibrid MPI és OMP módban is tud üzemelni.
<code>
CFLAGS=-O2 -xSSE4.2 -openmp
FFLAGS=-O2 -xSSE4.2 -openmp
LDFALGS=$(MKLROOT)/lib/intel64/libmkl_scalapack_lp64.a \
-Wl,--start-group $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a \
$(MKLROOT)/lib/intel64/libmkl_intel_thread.a \
$(MKLROOT)/lib/intel64/libmkl_core.a \
$(MKLROOT)/lib/intel64/libmkl_blacs_sgimpt_lp64.a -Wl,--end-group \
-liomp5 -lpthread -lm -openmp
</code>
 
=== MPI SGE job szkript példa ===
<code>
#!/bin/bash
### SGE
#$ -N MPITEST
# 12 órás walltime limit
#$ -l h_rt=12:00:00
# 384 szál lefoglalása az
# mpi párhuzamos környezetben
#$ -pe mpi 384
# az uv.q sor használatával
#$ -q uv.q
# a standard kimenet ide íródik
#$ -o StdOut
# a hibakimenet ide íródik
#$ -e StdErr
# a jelenlegi shell környezet exportálódik
#$ -V
### NUMA
# az StdOut-ba írja a numa node információt
numactl --show
### OMP
# OMP beállítások
export OMP_NUM_THREADS=1
### MPI
# MPI beállítások
export MPI_MEMMAP_OFF=1
# saját szkript vagy az mpirun közvetlen meghívás
# 384 MPI szál fog elindulni
mpirun $NSLOTS dplace -s 1 <APP>
</code>
Az `<APP>` helyére kell írni a futtatandó programot és paramétereit. A `dplace` egy SGI előtétprogram, ami az MPI szálak ideális CPU elosztását végzi, megadása javasolt, mert általában javítja a teljesítményt.
 
=== OMP SGE job szkript példa ===
<code>
#!/bin/bash
### SGE
#$ -N OMPTEST
# 12 órás walltime limit
#$ -l h_rt=12:00:00
# 192 szál lefoglalása az
# openmp párhuzamos környezetben
#$ -pe openmp 192
# az uv.q sor használatával
#$ -q uv.q
# a standard kimenet ide íródik
#$ -o StdOut
# a hibakimenet ide íródik
#$ -e StdErr
# a jelenlegi shell környezet exportálódik
#$ -V
### NUMA
# az StdOut-ba írja a numa node információt
numactl --show
### OMP
# OMP beállítások
export OMP_NUM_THREADS=$NSLOTS
omplace <APP>
</code>
Az `omplace` egy SGI előtétprogram, ami az OpenMP szálak ideális CPU elosztását végzi, megadása javasolt, mert általában javítja a teljesítményt.
 
=== Monitorozás ===
A jobhoz rendelt cpusetet (CPU és memória szelet) a következő parancsokkal lehet megfigyelni. A grafikonokhoz <code>ssh -X</code> átirányítás szükséges. A processzorterhelés grafikonján négy adat szerepel: <span style="color:#00FF00">zöld - hasznos, felhasználói terhelés</span>, <span style="color:#FFFF00;background-color:#DDDDDD;">sárga - üresjárat</span>, <span style="color:#0000FF">kék</span> és <span style="color:#FF0000">piros - káros rendszerterhelés</span>. Egy HPC program akkor fut "jól", ha a zöld, felhasználói terhelés maximális, a többi pedig minimális. Ideális esetben a grafikonon egyenes zöld vonalak láthatók. Nem egyenes ("ugráló") grafikon a terhelés nem egyenletes elosztására utal, ezen a CPU binding (dplace, omplace parancsok használata) általában segít.
 
Processzor terhelés numa node-onként (6 core), az ideális terhelés 6-nál (600%) van:
<code>
sgemon -g -n <JOBID>
</code>
 
Processzor terhelés CPU-nként, az ideális terhelés 1-nél (100%) van:
<code>
sgemon -g -n <JOBID>
</code>
 
Memória terhelés numa node-onként, a maximális terhelés 30 GB-nál van, ami core-onként 5GB-nak felel meg:
<code>
sgemmon -g -m <JOBID>
</code>
 
 
==== Tesztelés Linpack-kal ====
A monitorozást egy Linpack teszt segítségével érdemes kipróbálni. A következő parancsokkal előkészítjünk egy Linpack teszt futást a <code>test.q</code> sorban:
<code>
cd $HOME
mkdir linpack
module load hpl/2.0.mpt
cd linpack
cp $LINPACK_HPL_HOME/bin/{xhpl.sh,HPL.dat} .
qsub xhpl.sh
</code>
A visszakapott jobid-vel hívjuk meg a monitor parancsot:
<code>
sgemon -g -n <JOBID>
sgemon -g -m <JOBID>
</code>
A képen látható ábráknak megfelelő terhelési grafikonokat kell kapnunk. A grafikonok jellege más HPC alkalmazások esetén is ilyennek kell legyen ("egyenes" zöld vonal).
<br />
[[File:Linpack_cpu.jpg|frame|left|320px|Linpack teszt processzorterhelés]]
<br />
[[File:Linpack_mem.jpg|frame|left|320px|Linpack teszt memóriaterhelés]]
214
szerkesztés

Navigációs menü