Jak na paralelní výpočty? Především musíte vědět, jaký typ paralelizace jste použili:
- sdílená paměť - všechny procesy výpočtu musí přistupovat do téže paměti - všechny musí běžet na jednom fyzickém stroji. Příkladem je Open MP, doMC pro R parrallel pro R. Snadno se také poznají podle konstrukce cyklů (for, foreach), které beží na všech procesech výpočtu.
- distribuovaná paměť - každý proces má svou vlastní paměť a není možné přímo pracovat s pamětí jiného procesu. Mezi procesy je nutné komunikovat pomocí zpráv, např. pomocí MPI.
Sdílená paměť
Zde je nutné pracovat pouze s jedním fyzickým strojem. Queuing systému řekneme, že požadujeme jeden stroj (-N 1) a více jader procesorů (-c 8) na něm:
srun -N 1 -c 8 uloha
Případně můžete požádat o jeden (-N 1) celý stroj výhradně pro Vás (--exclusive):
srun -N 1 --exclusive uloha
Pak systém nalezne stroj, kde nikdo nic nepočítá a spustí tam Váš výpočet na všech jeho jádrech. A nikoho dalšího na tento stroj s žádným výpočtem nepustí.
Pokud chcete použít příkaz sbatch, tak připravte skript: spust.sh, kde použijete parametr --cpus-per-task=8. Příklad pro spuštění R-kové úlohy:
#SBATCH -p short #SBATCH --cpus-per-task=8 #SBATCH --mail-type=ALL #SBATCH --mail-user=madlik@karlin.mff.cuni.cz module load R cd priklad R --no-readline --save < priklad.R
a nyní stačí jen
sbatch spust.sh.
Distribuovaná paměť
Zde můžete pracovat s více stroji, ale potřebujete dosáhnout toho, aby se úloha spustila tolikrát, o kolik procesorů jste požádali. Pokud potřebujete např. 8 procesorů (či jader), můžete takto:
srun -n 8 uloha
Na kolika fyzickým strojích se úloha spustí je nám lhostejno, ale bude jich 8. srun zde pozná, že se jedná o MPI komunikaci a naváže příslušný MPI-ring za Vás. Pokud byste vyžadovali, aby úloha běžela na jedno stroji, použijte navíc parametr -N 1.
Pokud raději použijete příkaz sbatch, tak si připravte např. takový spouštěcí skript spust.sh:
#SBATCH --ntasks-per-node=8 #SBATCH -N 8 #SBATCH -p parallel #SBATCH --mail-type=ALL #SBATCH--mail-user=madlik@karlin.mff.cuni.cz module load openmpi cd priklad mpirun priklad
a nyní jen
sbatch spust.sh.
Úloha požáduje 8 strojů každý z nich musí mít 8 volných procesorů.