OpenMP

From GHER

Jump to: navigation, search

omp=openmp

Parraleliser un job avec omp consiste à partager les différentes boucles du job sur des fils d'exécution distincts, qui s'effectueront sur des processeurs distincts.

pour un faire tourner le modèle en openmp il faut

  • compiler avec les flags -mp au compileur (FFLAGS) ET au linker (LDFFLAGS)

exemple de Makefile.flags

INCLUDE=-DNETCDF -I${HOME}/Lib/netcdf-3.6.1/include -I${PVM_ROOT}/include
libnetcdf=-L${HOME}/Lib/netcdf-3.6.1/lib -lnetcdf
LIBS =-llapack -lblas -L${PVM_ROOT}/lib/${PVM_ARCH} -lfpvm3 -lgpvm3 -lpvm3 -L/u/lvandenb/Lib ${libnetcdf}
CC = cc
CFLAGS = -O
FC = pgf77
F90 = pgf90
FFLAGS = -byteswapio -Mpreprocess $(INCLUDE) \
    -Dnest -Dassim -DNestAssim \
    -DvariableTimestep -DFilterNudg -DMJD -DGridZ -DABSLight -DGZIP -mp 
F77FLAGS = -Mextend $(FFLAGS)
F90FLAGS = -O3 -Mfree $(FFLAGS)
LDFLAGS = -mp

Et s'assurer que ceci est bien lu par INITIAL.H, à savoir que les lignes

IF (ININAM .EQ. 'NCPUS')  NCPUS =NINT(INIVAL)
     if (presentInitValue(NAMEFI,'NCPUS')) then
        call getInitValue(NAMEFI,'NCPUS',NCPUS)
     endif

remplace bien les lignes


IF (ININAM .EQ. 'NCPUS')  NCPUS =NINT(INIVAL)
     if (presentInitValue(NAMEFI,'NNUDG')) then
        call getInitValue(NAMEFI,'NNUDG',NNUDG)
     endif

qui étaient présente chez moi dans INITIAL.H à la place de la version correcte (au passage la même correction est à faire pour les lignes au dessus concernant NBDOM et KNU




  • mettre dans le script d'appel: -pe smp ##NCPUS##
  • forcer le stack size ulimit -s 20000

exemple de script de soumission

 #!/bin/sh
 #$ -S /bin/sh
 #$ -N BlackM
 #$ -cwd
 #$ -l h_vmem=2400M
 #$ -l h_cpu=80:00:00
 #$ -l big=false
 #$ -pe smp 2
 #$ -j y
 ###export OMP_NUM_THREADS=$NSLOTS
 export OMP_NUM_THREADS=2
 ulimit -s 20000
 ulimit -c 1000000
 member=$1
 set -x
 date
 Dir=/home/gher/acapet/omptest2/
 OutDir=/scratch/acapet/blacksea/Out$member
 Comment=${OutDir}/COMMENT.OUT
 Initfile=${Dir}/IC/Black$member.init
 sleep 1
 Fortran/Black.a $Initfile
 date


Pour ma part je n'ai pas encore fais de test exhaustif concernant l'amlioration de la vitesse de calcul.. si qqn le fait ça m'intéresse

  • Pour tester que ça marche... on peut se connecter sur le noeuds ( sssh cd où s'effectue le job (ou devnode pour un test en interactif) et faire un
top 

puis taper 1

on devrait voir tourner plusieurs (NCPUS si tout se passe bien) CPUS

Personal tools