V několika následujících řádcích je příklad jednoduchého scriptu popis.cmd
, sloužícího ke spuštění úlohy, kterou zavedeme příkazem qsub
.
------------------------------
#!/bin/bash
#PBS -S /bin/bash
#PBS -N myjob.pbs
#PBS -j oe
#PBS -M pepa.novak@cvut.cz
#PBS -m bae
#PBS -l walltime=01:00:00
#PBS -l select=1:ncpus=32:host=altix
#PBS -l place=pack:shared
echo "Starting run at: `date`"
/home/pepa/muj_program
echo "Job finished at: `date`"
------------------------------
#PBS -S /bin/bash | Určuje typ shellu pro zpracování úlohy. Pro zpracování této úlohy bude použit shell bash. |
#PBS -N myjob.pbs | Jméno úlohy je „myjob.pbs“. Pokud vynecháme tento parametr, úloha se implicitně pojmenuje podle názvu scriptu. |
#PBS -j oe | Standardní výstup a chybový výstup bude sloučen do jednoho souboru v pracovním adresáři. Ke jménu úlohy se připojí „.onnn“, kde „nnn“ je pořadové číslo úlohy v systému PBS. |
#PBS -M pepa.novak@cvut.cz | Určuje adresu uživatele, kam budou zaslány případné zprávy. V tomto případě bude zpráva zaslána na adresu pepa.novak@cvut.cz . |
#PBS -m bae | Zpráva bude zaslána při startu úlohy (b-begin), při přerušení úlohy (a-abort) a při ukončení úlohy (e-end). |
#PBS -l | Pomocí klíčových slov zde můžeme nastavit požadavky na počet procesorů „ncpus=2“, velikost fyzické paměti „mem=1gb“ a maximální čas pro běh úlohy „walltime=1:00:00“. Dále zde specifikujete na kterém počítači má být úloha spuštěna – parametr host. Možné hodnoty jsou: altix, rex, hal, fox, ferret5, ferret6. Pokud uvádíme více parametrů na jednu řádku, musí být odděleny čárkou. |
Lze uvést více údajů oddělených mezerou na jeden řádek, který začíná #PBS .
Např.: #PBS -S /bin/csh -N pokus -m a
Hlavní příkazy pro práci s PBS:
qsub „popis_ulohy“: zadá úlohu do fronty, např.: qsub popis.cmd
Jeli v popisu úlohy chyba, úloha se nezařadí a PBS vypíše druh chyby.
qstat [-a | -s]: ukáže stav jednotlivých úloh ve frontě uživateli, který je zadal, v našem případě pouze pro uživatele „pepa“. Parametr -s vypíše o úloze více informací.
qdel „nnn“: smaže úlohu z fronty, eventuelně jí (pokud již běží) ukončí. Číslo „nnn“ je pořadové číslo úlohy v systému PBS.
Existují ještě další příkazy, které umožňují měnit status úlohy.
Podrobnější informace o jednotlivých příkazech systému PBS může uživatel získat pomocí příkazu man (např.: man qdel).
Informace o frontách:
qstat -q: ukáže časové omezení jednotlivých front a počet úloh ve frontách.
qstat -Q: ukáže počet úloh ve frontách.
qmgr: spustí qmanager.
print server: vytiskne popis k jednotlivým frontám.
quit: opustí qmanager.
Interaktivní spouštění úloh
Pro ladění úloh je výhodné si nechat vypisovat výsledky na obrazovku a tak opticky kontrolovat výpis programu nebo hodnoty některých proměnných, o kterých máme představu, jakých hodnot mají nabývat. Pro takové spouštění použijeme funkci qsub
s parametrem -I
. Úlohu tedy spustíme následovně: qsub -I pbs_skript
. Tím jsme přesměrováni na shell, ve kterém ale musíme ručně zadat veškeré uživatelské příkazy uvedené ve skriptu. Výsledky si můžeme nechat vypisovat na obrazovku a program můžeme ukončit standardně pomocí CTRL-C a PBS shell ukončíme příkazem exit
(CTRL-D). Interaktivní úloha nám poběží samozřejmě i mimo PBS, ale může dojít ke kolizi s úlohami spouštěných pomocí PBS a k problémům s během počítače kvůli špatně využitým zdrojům. Naše úloha se objeví i ve výpisu fronty úloh pomocí qstat
, nebo podrobněji qstat -f číslo_úlohy
.
Pokud bychom potřebovali ladit v grafickém režimu nějaké aplikace, použijeme taktéž qsub
. Máme například ladit na 4 jádrech po dobu 30 min na počítači rex, zadáme:
qsub -I -l select=1:ncpus=4:host=rex -l walltime=00:30:00 -v DISPLAY
Kontrolu funkčnosti grafického výstupu si provedeme např. spuštěním xterm
, xclock
nebo xeyes
a CTRL-C. Pak si nastavíme prostředí exportem potřebných proměnných a spustíme si aplikaci.
Ukázkový PBS skript využívající MPI
Skript spouští 8 vláken na počítači altix, zdrojový kód v C++ je nejprve preložen kompilátorem Intel. Dále se používá proprietární knihovna MPI, a to SGI mpt. (viz module avail)
#!/bin/bash
#PBS -S /bin/bash
#PBS -M pospisil@vc.cvut.cz
#PBS -j oe
#PBS -N run_altix
#PBS -m bae
#PBS -l walltime=01:00:00
#PBS -l select=1:ncpus=8:host=altix
#PBS -l place=pack:shared
echo "Pocitano na pocitaci `uname -a`"
echo "Pracovni adresar `echo $PBS_O_WORKDIR`"
echo "Uloha spustena z pocitace `echo $PBS_O_HOST`"
cd $PBS_O_WORKDIR
. /usr/share/modules/init/bash
module load icc-11-1
module load mpt
icpc -o PI PI.cpp -lmpi
echo "Starting run at: `date`"
mpirun -np 8 dplace -s1 -c0-7 ./PI
echo "Job finished at: `date`"
Ukázkový PBS skript využívající OpenMP
Skript spouští 8 vláken na počítači altix, zdrojový kód ve Fortranu je nejprve přeložen kompilátorem Intel verze 11.1.
#!/bin/bash
#PBS -S /bin/bash
#PBS -M pospisil@vc.cvut.cz
#PBS -j oe
#PBS -N run
#PBS -m bae
#PBS -l walltime=01:00:00
#PBS -l select=1:ncpus=8:host=altix
#PBS -l place=pack:shared
echo "Pocitano na pocitaci `uname -a`"
echo "Pracovni adresar `echo $PBS_O_WORKDIR`"
echo "Uloha spustena z pocitace `echo $PBS_O_HOST`"
cd $PBS_O_WORKDIR
. /etc/profile.d/modules.sh
# Compile and execute a program:
module load ifort-11-1
echo "Starting run at: `date`"
export KMP_AFFINITY=disabled
export OMP_NUM_THREADS=8
ifort -c -O3 -openmp main.cpp
ifort -o main.exe main.o -openmp
dplace -x2 -c0-7 main.exe
echo "Job finished at: `date`"