Paralelizace

Z MetaCentrum
Skočit na navigaci Skočit na vyhledávání

(English version)

Metacentrum wiki is deprecated after March 2023
Dear users, due to integration of Metacentrum into https://www.e-infra.cz/en (e-INFRA CZ service), the documentation for users will change format and site.
The current wiki pages won't be updated after end of March 2023. They will, however, be kept for a few months for backwards reference.
The new documentation resides at https://docs.metacentrum.cz.
Příbuzná témata
Aplikace s MPI [EN]

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 aplikace 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

Chcete-li si být jisti, že každý chunk bude na jiném nodu, je vhodné zařadit volbu place=scatter

 qsub -l select=2:ncpus=2:mem=1gb:scratch_local=2gb -l place=scatter -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
  • 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 ...