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