wiki:IntegrationOpenMP/EnteteCommandesCurie

Version 12 (modified by mafoipsl, 7 years ago) (diff)

--

Entête des jobs et commandes curie

Cette page décrit les entêtes des jobs sur curie ainsi que les commandes à lancer pour avoir un exécutable simple ou un couplé.

Un executable séquentiel

  • Entête du job
    #MSUB -n 1 
    
  • Commande
    time ccc_mprun ./create_etat0_limit.e
    

Un executable parallélisé avec OpenMP seulement

  • Entête du job
    #MSUB -n 1
    #MSUB -c 16
    
  • Commande
    export OMP_NUM_THREADS=16
    time ccc_mprun ./gcm.e
    
  • Résultat : 4 threads seront lancés sur 1 processus gcm.e A noter : on peut réserver un noeud entier pour soi tout seul :
    #MSUB -x 
    

Un executable parallélisé avec MPI seulement

  • Entête du job
    #MSUB -n 32
    BATCH_NUM_PROC_TOT=32
    
  • Commande
    time ccc_mprun ./gcm.e
    time ccc_mprun -n 32 ./gcm.e
    time ccc_mprun -n ${BRIDGE_MSUB_NPROC} ./gcm.e
    time ccc_mprun -n ${BATCH_NUM_PROC_TOT} ./gcm.e # A valider?
    
  • Résultat : ccc_mprun lance 32 processus gcm.e

Un executable parallélisé avec MPI et OpenMP

  • Méthode 1 sur un seul noeud :
    • Entête du job
      #MSUB -n 8 # Reservation de 8 processus MPI
      #MSUB -c 4  # Chaque tâche MPI lance 4 threads            
      
    • Commande
      export KMP_STACKSIZE=2g
      export KMP_LIBRARY=turnaround
      export MKL_SERIAL=YES
      export OMP_NUM_THREADS=4    # Utilisation de 4 threads OpenMP par processus MPI
      time ccc_mprun ./gcm.e
      
    • Résultat : ccc_mprun lance 8 tâches MPI gcm.e sur 4 threads chacun
  • Méthode 2 sur un seul noeud :
    • Entête du job
      #MSUB -n 32 # Reservation de 32 procs            
      
      • Commande
        export OMP_NUM_THREADS=4    # Utilisation de 4 threads OpenMP par processus MPI
        time ccc_mprun -n 8 -c 4 ./gcm.e
        
      • Résultat : ccc_mprun lance 8 tâches MPI gcm.e sur 4 threads chacun
  • Méthode pour plusieurs noeuds :
    • Entête du job
      #MSUB -N 4  # 4 noeuds 
      #MSUB -n 4  # 4 tâches MPI
      #MSUB -c 16  # Chaque tâche MPI lance 16 threads            
      
    • Commande
      export OMP_NUM_THREADS=16    # Utilisation de 16 threads OpenMP par processus MPI
      time ccc_mprun ./gcm.e
      
    • Résultat : ccc_mprun lance 4 tâches MPI gcm.e sur 4 noeuds différents, chacune avec 16 threads OpenMP

LMDZ en OpenMP/MPI avec sorties différentes par tâche MPI

#!/usr/bin/ksh
######################
## CURIE   TGCC/CEA ##
######################
#MSUB -r NEWCON32CM6       # nom de la requete
#MSUB -o Script_Output_NEWCON32CM6.000001    # nom du fichier de sortie
#MSUB -e Script_Output_NEWCON32CM6.000001    # nom du fichier de sortie
#MSUB -eo
#MSUB -c 8
#MSUB -n 4
#MSUB -q standard  # noeuds fins 
#MSUB -x
#MSUB -T 3600             # Limite temps (en secondes)
##MSUB -p XXXXXXX
BATCH_NUM_PROC_TOT=32
    cat <<-EOF > script_lmdz.x.ksh
#!/bin/ksh
export KMP_STACKSIZE=3g
export KMP_LIBRARY=turnaround
export MKL_SERIAL=YES
export OMP_NUM_THREADS=8
./lmdz.x > out_lmdz.x.out.\${SLURM_PROCID} 2>out_lmdz.x.err.\${SLURM_PROCID}
EOF
 chmod +x script_lmdz.x.ksh
 /usr/bin/time ccc_mprun -n 4 ./script_lmdz.x.ksh  >> ${Exe_Output} 2>&1
  • Résultat : mpirun lance 4 processus gcm.e avec 8 threads chacun et sur 2 noeuds (de 2 processeurs octocoeurs)
  • 308 s (run.card, NEWTON, 96x71x19)
  • config.card : ATM= (gcm.e, lmdz.x, 4MPI, 8OMP)
  • Comment surveiller les threads :
    • top avec f puis j pour avoir le numero du coeur utilise
    • 1 pour voir les %cpu
    • H pour voir les threads

Un couplé avec Oasis sur 1 proc, NEMO sur 5 procs et LMDZ sur 26 procs, MPI seul

  • Entête du job
    #MSUB -n 32
    BATCH_NUM_PROC_TOT=$BRIDGE_MSUB_NPROC
    
  • Commande
     time ccc_mprun -f ./run_file 
    
    • avec run_file contenant, oasis en premier obligatoirement:
      1 ./oasis
      26 ./lmdz.x
      5 ./opa.xx
      
  • Résultat : mpirun lance 32 processus : 1 oasis, 26 lmdz et 5 opa

Un executable avec l'IOServer débranché

  • Entête :
    #MSUB -n 32     # Total number of core to use
    #MSUB -N 4     # number of nodes
    
  • Commande :
    cat > run_file << END 
    123 ./nemo.exe # 123 par exemple
    5 ./xios_server.exe # 5 par exemple pour en avoir 128=4x32 en tout
    END
    time ccc_mprun -f run_file
    

Un couplé avec Oasis sur 1 proc, NEMO sur 5 procs et LMDZ sur 13 procs MPI et 2 tâches OpenMP

  • Entête du job :
    #MSUB -n 19                 #  !! A verifier si necessaire : reservation de 19 processus MPI
    #MSUB -N 1                  # Curie noeuds larges = 32 coeurs/noeud
    
  • Commande :
    time mpirun -hostfile hosts -H curie30 -np 1 ./script_oasis.ksh : -H curie30 -np 5 ./script_opa.xx.ksh : -H curie30 -np 13 ./script_lmdz.x.ksh 
    
    • avec hosts contenant le noms des noeuds (recuperes via la commande mpirun hostname)
      curie30 slots=32 max_slots=32  #  ici pour curie noeuds larges avec 32 cores par noeud
      
    • avec par exemple script_lmdz.x.ksh contenant :
      #!/bin/ksh
      OMP_NUM_THREADS=2
      (( MYMPIRANK = OMPI_COMM_WORLD_RANK - 6)) 
      ./lmdz.x > out_lmdz.x.out.${MYMPIRANK} 2>out_lmdz.x.err.${MYMPIRANK}
      

MPMD MPI/OpenMP recommandé février 2017

#MSUB -n 28 # Réservation du nombre total de processus/threads
#MSUB -Q test
#MSUB -t 1800
#MSUB -q standard

export BRIDGE_HETEROGENEOUS_MPMD=1
export OMPI_MCA_ess=pmi # Nécessaire pour bullxmpi

ccc_mprun -f app.conf

Avec app.conf:

1-14 env OMP_NUM_THREADS=14 ./a.out
2-4 env OMP_NUM_THREADS=4 ./a.out

Dans l'exemple ci-dessus, on lance 1 processus MPI avec 14 threads OpenMP et 2 processus MPI avec 4 threads OpenMP.

Les configurations v6

Pour les configurations v6 il faut se reporter à la page suivante