Více-procesorové úlohy na clusteru

Programy paralelizované pomocí OpenMP (shared memory) mohou běžet na clusteru, pokud při spouštění úlohy přidáte k příkazu qsub parametr

-pe threaded no_slots
-pe threaded min_slots-max_slots

kde no_slots nebo interval min_slots  a  max_slots je požadovný počet slotů, tj. procesorů na kterých má být úloha počítána. Toto je příklad odeslání víceprocesorové úlohy, která má bežet na dvou až čtyřech procesorech (podle aktuální dostupnosti slotů na clusteru)

$ qsub -pe threaded 2-4 myscript.sh

Alternativně je možné uvést příslušný parametr do souboru myscript.sh

#! /bin/sh
#$ -pe threaded 2-4
echo "Hello, I am $HOSTNAME"
echo "and will run your job on ${OMP_NUM_THREADS} processors."
./myprogram.exe

a skript odeslat příkazem qsub již bez parametrů. Protože paralelizace OpenMP je tzv. multi-threaded nebo shared memory, všechny procesory musí být na jednom počítači.

Update 20.1.2014

Při spouštění víceprocesorových úloh zatím nepoužívejte jméno počítače v seznamu požadavků (hard-request). Úloha potom zůstane viset ve frontě se zprávou cannot run in PE "threaded" because it only offers 0 slots. Někde je asi chyba v nastavení, kterou se mi bohužel zatím nepodařilo najít.

Pro účely  stanovení, které úlohy ve frontě se spustí dříve, nerozhoduje počet běžících úloh, ale počet využívaných procesorů (slotů).

Zde je ukázka kódu ve Fortranu paralelizovaného pomocí OpenMP

  program helloworld
  implicit none
  integer OMP_GET_THREAD_NUM
  integer OMP_GET_NUM_THREADS, npp
 
!$OMP PARALLEL DEFAULT (NONE) PRIVATE (npp)
  npp = OMP_GET_NUM_THREADS()
!$OMP CRITICAL
  print *,'Hello from thread number',OMP_GET_THREAD_NUM(), npp
!$OMP END CRITICAL
!$OMP END PARALLEL
 
  end program helloworld

Program uložený v souboru hello.f90 se zkompiluje se zapnutou podporou OpenMP například:

ifort -o myprogram.exe -openmp hello.f90

Nakonec technickou poznámku: v souvislostí s přidáním podpory pro paralelní úlohy jsem pozměnil nastavení clusteru z posix-compliant na unix-behavior. Mělo by to znamenat, že při spouštění úlohy se použije shell, který je uveden na prvním řádku skriptu (#! /bin/sh) a není nutné zadávat parametr -S při spouštění úlohy. Pro většinu uživatelů by se nemělo nic změnit, ale kdyby náhodou po této změně něco přestalo fungovat, tak se ozvěte…

Published by

Zdenek Grof

I am administrator of this site.

Leave a Reply

Your email address will not be published. Required fields are marked *