Pokud využíváte pro svou práci knihovnu PETSc, pak čtěte pozorně další řádky. Díky nasazení balíků modules není použití této obří knihovny nijak náročné.
Kompilace
Mějme následující jednoduchý příklad hw.c v adresáři ~/petsctest
static char help[] = "Simple hallo world program\n"; #include "petscksp.h" #undef __FUNCT__ #define __FUNCT__ "main" int main(int argc,char **args) { PetscMPIInt rank; /* processor rank */ PetscMPIInt size; /* size of communicator */ PetscErrorCode ierr; PetscInitialize(&argc,&args,(char *)0,help); ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRQ(ierr); ierr = MPI_Comm_size(PETSC_COMM_WORLD,&size);CHKERRQ(ierr); ierr = PetscPrintf(PETSC_COMM_SELF,"Hallo world of %d/%d\n", rank, size);CHKERRQ(ierr); ierr = PetscFinalize();CHKERRQ(ierr); return 0; }
Budeme potřebovat nahrát příslušné moduly (příkaz zadáme z příkazové řádky)
module petsc
A již můžeme kompilovat:
mpicc hw.c -o hw Modules system totiž nastavi všechny systémové proměnné tak, aby kompilátor našel všechny potřebné součásti knihovny PETSc.
Spuštění
Pro spuštení úlohy je potřeba připravit SLURM popis úlohy - job.sh (více zde). Protože náš příklad je paralelní, tak si vyžádáme spuštění pomocí mpirun podobně jako v návodu pro MPI aplikace. Jediný rozdíl je pouze v použití nástroje modules pro natažení správné knihovny module load petsc
.
#!/bin/bash #SBATCH --job-name=PETSC1 #SBATCH --output=petsc_output.txt # #SBATCH -n 16 #SBATCH -p test #SBATCH --constraint="InfiniBand" #SBATCH --mail-type=ALL #SBATCH --mail-user=madlik@karlin.mff.cuni.cz module load openmpi petsc cd ~/petsctest mpirun ./hw
Systému předáme příkezem sbatch job.sh
Výsledkem by měl být tento výpis (v souboru petsc_output.txt):
Hallo world of 0/16 Hallo world of 1/16 Hallo world of 2/16 Hallo world of 4/16 Hallo world of 6/16 Hallo world of 5/16 Hallo world of 3/16 Hallo world of 7/16 Hallo world of 8/16 Hallo world of 9/16 Hallo world of 10/16 Hallo world of 11/16 Hallo world of 12/16 Hallo world of 13/16 Hallo world of 14/16 Hallo world of 15/16