wiki:IntegrationOpenMP/EnteteCommandesAda

Version 3 (modified by millour, 11 years ago) (diff)

--

Entête des jobs et commandes ada

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

Queues compil et debug

Il y a une classe de job spéciale pour les compilation (durée max. 20h), la classe "compil":

  • Entête du job
    # @ job_type = serial
    # @ class = compil
    

Un executable séquentiel

  • Entête du job
    # @ job_type = serial
    
  • Commande
    time ./create_etat0_limit.e
    

Un executable parallélisé avec OpenMP seulement

  • Entête du job
    # @ job_type = serial
    # @ parallel_threads = 4
    ### Mémoire (maximum 7.0gb par coeur; par ex. pour 4 threads on peut aller jusqu'à as_limit=28gb)
    # @ as_limit = 7.0gb
    
  • Commande
    # Penser à définir la memoire STACK max. utilisée par les variables privees de chaque thread.
    # (sinon par défaut c'est un tout petit 4M)
    #export KMP_STACKSIZE=200M
    # Il est aussi possible d'utiliser la variable d'environnement OMP_STACKSIZE
    export OMP_STACKSIZE=200M
    
    time ./gcm.e
    
  • Résultat : lance 1 tâche et 4 threads avec le programme : gcm.e

Un executable parallélisé avec MPI seulement

  • Entête du job
    # @ job_type = parallel
    # Nombre de processus demandes (ici 32)
    # @ total_tasks = 32
    
  • Commande
    poe ./gcm.e
    
  • Résultat : poe lance 32 tâches, avec toute le même programme : gcm.e
  • Remarque: La mémoire disponible est de 3.5gb par coeur (donc par tâche MPI pour un job MPI pur), on ne peut pas dépasser cette limite si on demande plus de 64 tâches. Par contre on peut demander jusqu'à 7.0gb par coeur ("# @ as_limit = 7.0gb" dans l'en-tête du job) si on utilise 64 tâches ou moins. Sinon (à tester...) il y a la possibilité comme sur Vargas de demander des "threads" fantômes pour obtenir plus de mémoire (mais attention ce sera facturé!!) en compilant en mode "MPI" seul mais en lancant un job mixte "MPI/OpenMP" suivant le modèle ci-après.
  • Attention: il n'y a que 28 noeuds sur lequels peuvent passer les travaux dits "Larges" (plus de 3.5 Go de memoire par coeur) contre 304 noeuds pour les travaux usuels, donc ne demander plus de 3.5gb par coeur que si c'est impératif (sinon ne pas s'étonner d'attendre plus longtemps que les autres pour que ses jobs passent)

Un executable parallélisé avec MPI et OpenMP

  • Entête du job
    # @ job_type = parallel
    ## nombre de processus demandées
    # @ total_tasks = 16
    ## nombre de tâches par processus
    # @ parallel_threads = 4
    ### Mémoire (si moins de 64 coeurs: maximum 7.0gb par processus MPI; par ex. pour 4 threads par processus, on peut aller jusqu'à as_limit=28gb)
    ### Mémoire (si plus de 64 coeurs: maximum 3.5gb par processus MPI; par ex. pour 4 threads par processus, on peut aller jusqu'à as_limit=14gb)
    # @ as_limit = 28gb
    
  • Commande
    # Penser à définir la memoire STACK max. utilisée par les variables privees de chaque thread.
    # (sinon par défaut c'est un tout petit 4M)
    #export KMP_STACKSIZE=200M
    # Il est aussi possible d'utiliser la variable d'environnement OMP_STACKSIZE
    export OMP_STACKSIZE=200M
    
    poe ./gcm.e
    
  • Résultat : poe lance 16 tâches, avec toute le même programme : gcm.e avec 4 threads chaque

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

A faire...

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

A faire...

Entête du couplé IPSLCM5A sur Ada

A faire...