Jak počítat/Paralelizace

From MetaCentrum
Jump to: navigation, search

(English version)

Příbuzná témata
Aplikace s MPI
Žádání zdrojů

Paralelní počítání dokáže výrazně zkrátit čas běhu vaší úlohy, protože úloha dokáže najednou využívat více zdrojů. Detailní informací si můžete přečíst zde.


MetaCentrum nabízí dva způsoby paralelního počítání – OpenMP a MPI, případně lze kombinovat oba.

OpenMP

Warning.gif Warning: Ujistěte se, že proměnná OMP_NUM_THREADS je nastavena před během úlohy

Pokud vaše aplikace dokáže používat více vláken pomocí sdílené paměti, potom si vyžádejte samostatný uzel s více procesory. Například:

qsub -l select=1:ncpus=4:mem=16gb:scratch_local=5gb -l walltime=24:00:00 skript.sh

Ujistěte se, že před během vaší úlohy je správně nastavena proměnná OMP_NUM_THREADS (měl by ji automaticky nastavovat plánovač na počet vyžádaných jader). Pokud není nastavena, úloha využije všechna dostupná jádra uzlu a negativně ovlivní ostatní běžící úlohy (a navíc vám plánovač úlohu zabije). Kontrolu provedete příkazem:

 echo $OMP_NUM_THREADS

Upozornění: odstraníte-li tuto proměnnou, velmi pravděpodobně vám úlohu zabije plánovač kvůli překročení využití povolených zdrojů.

Nastavení proměnné OMP_NUM_THREADS

Vepište následující řádku do vašeho dávkového skriptu.

  • export OMP_NUM_THREADS=$PBS_NUM_PPN #omezi pocet paralelnich procesu na pocet procesoru ziskanych od planovaciho systemu
    

MPI

ZarovkaMala.png Note: Spuštění MPI výpočtu je možné pomocí příkazu mpirun

Všechny MPI implementace, na které jsou v MetaCentru moduly, jsou zkompilované s podporou plánovače, takže u nich nemusíte, až na pár výjimek (viz dále v tabulce), používat parametr --hostfile.

Pokud vaše umožňuje komunikaci mezi více procesy promocí rozhraní předávání zpráv (přečtěte si kategorii aplikace s MPI), potom si vyžádejte určitý počet uzlů s libovolným počtem procesorů. Například:

qsub -l select=2:ncpus=2:mem=1gb:scratch_local=2gb -l walltime=1:00:00 skript.sh
  • Ujistěte se, že vhodný openmpi/mpich2/mpich3/lam modul je nahraný ve vašem protředí ještě předtím, než sputíte výpočet

Navýšení rychlosti

Můžete si také vyžádat speciální uzly, který jsou propojené pomocí nízko-latenčního InfiniBand spojení, což povede k dalšímu navýšení rychlosti vaší úlohy. Například:

qsub -l select=4:ncpus=4:mem=1gb:scratch_local=1gb -l walltime=1:00:00 -l place=group=infiniband skript.sh

Při žádosti o konkrétní hodnotu infinibandu už je třeba požádat uvnitř chunku:

qsub -l select=4:ncpus=4:infiniband=brno:mem=1gb:scratch_local=1gb -l walltime=1:00:00 skript.sh
  • InfiniBand je detekováno automaticky při spuštění MPI výpočtu, který využívá InfiniBand. Výpočet můžete začít běžným způsobem, například:
mpirun myMPIapp

Interakce MPI a OpenMP

Pokud vaše aplikace podporuje oba typy paralelizace (MPI a OpenMP), tak můžete využít jejich interakci. Ovšem je nutné výpočet spustit správně, jinak se úloha dostane do konfliktu s plánovacím systémem, který ji zabije. Příklady správného použití OpenMP knihovny:

ZarovkaMala.png Note: První dva příklady jsou zaměnitelné, ale jejich rychlost se může lišit. Zkuste oba způsoby a vyberte ten rychlejší

Žádané zdroje Příklad
1 uzel, více procesorů
export OMP_NUM_THREADS=$PBS_NUM_PPN
mpirun -n 1 /cesta/k/programu ...
1 uzel, více procesorů
export OMP_NUM_THREADS=1
mpirun /cesta/k/programu ...
2 uzly, více procesorů
cat $PBS_NODEFILE |uniq >nodes.txt
export OMP_NUM_THREADS=$PBS_NUM_PPN
mpirun -n 2 --hostfile nodes.txt /cesta/k/programi ...