FAQs

Général

Modifier le fichier ~/.ssh/config sur votre machine pour ajouter ces lignes :

Host mesoshared.univ-fcomte.fr mesologin1.univ-fcomte.fr mesologin2.univ-fcomte.fr
        PubkeyAcceptedAlgorithms +ssh-rsa
        HostkeyAlgorithms +ssh-rsa

Se connecter sur un nœud de login, taper la commande système passwd et de suivre les instructions

Utilisation

  • Pour les applications séquentielle, tableaux de tâches et applications parallèle à mémoire partagée (OpenMP) il faut utiliser la file : all.q
  • Pour les applications parallèles MPI, il faut utiliser la file parallel.q
  • Pour les applications graphiques, interactives il faut utiliser la machine : mesoshared.univ-fcomte.fr

SGE affiche ce message d'erreur lorsque votre job demande des ressources impossibles à avoir.

Suite à une erreur dans votre script. Vérifier notamment que #!/bin/bash est en première ligne du shell, penser à passer dos2unix sur les fichiers windows.

Pour afficher le message d'erreur SGE :

qstat -j numerodujob       

Il est probable que votre script n'a pas été exécuté. Une des erreurs les plus courantes réside dans l'absence de définition de l'environnement. N'oubliez pas de définir les variables d'environnement nécessaires à l'exécution du script ou du binaire utilisé.

SGE n'arrive pas à trouver les ressources demandées, vérifiez les messages SGE par : qstat -j idJob

En utilisant l'option -l h_vmem

Par exemple :

#$ -l h_vmem=2G

Le job sera exécuté sera autorisé à allouer 2G de mémoire libre. Il sera tué par SGE si il dépasse cette valeur. Détails

En utilisant l’option -l h_rt

  • en ligne de commande :
    qsub -l h_rt=02:30:00 job.sge
  • dans le script :
    #$ -l h_rt=02:30:00

Pour faciliter la répartition des ressources par GE

Si le temps indiqué est trop court, votre job sera interrompu. S’il est trop long, vous serez pénalisé par SGE qui utilise cette information pour déterminer la priorité des jobs

Cela est possible en exécutant la commande suivante :

% qsub -N job1 [Script name]
% qsub -N job2 -hold_jid job1 [Script name]
% qsub -N job3 -hold_jid job1,job2 [Script name]

Chaque job à un nom (job1, job2 et job3). Lorsque job1 termine son exécution, job2 commence son exécution. Lorsque les deux jobs, job1 et job2, terminent leur exécution, job3 commence son exécution.

En utilisant l'environnement parallèle openmp. cf : Soumission d'un job parallèle

Exemple : exécution sur un noeuds à 8 coeurs

#$ -pe openmp 8
..
./appli params 

Exemple : exécution sur un noeuds à 12 coeurs

#$ -pe openmp 12
..
./appli params 

Voir les jobs multithreadé ci-dessus. Il faut spécifier 8 ou 12 comme valeurs, selon le type de machines, pour l'environnement openmp

Applications

  1. Il faut rajouter -l matlab=1 dans votre script, cela permet à SGE de prendre en compte les jetons.
  2. Lancer matlab : matlab -nodisplay -nodesktop -nojvm -nosplash < monprogramme.m

Voir l'exemple complet de script Applications séquentielles

Il faut rajouter -l comsol=1 dans votre script, cela permet à SGE de prendre en compte les jetons.

Si vous utilisez matlab avec comsol, il faut bien entendu rajouter -l matlab=1

Lancer comsol :

module load comsol # charge le module comsol
comsol batch -input mymodel.mph -output myresult.mph

Lancer comsol avec matlab :

module load comsol # charge le module comsol/3.5a
module load matlab # charge le module matlab
comsol matlab path -ml -nodesktop -ml -nodisplay <script_matlab.m

Comsol s'exécute uniquement sur des machines SMP (multi-coeurs). Il faut donc utiliser l'environnement parallèle openmp pour spécifier le nombre de coeurs et de lancer comsol avec l'otption -np Exemple : lancer comsol sur 8 coeurs

#$ -pe openmp 8
module load comsol # charge le module comsol
comsol batch -np 8 -input mymodel.mph -output myresult.mph

Optimisation

Nous encourageons vivement l'utilisation du compilateur Intel. Les options dépendent de la nature des programmes. Dans tous les cas, Nous conseillons d'activer la vectorisation en utilisant l'option : -axCORE-AVX2

Pour Intel MPI

On utilise la variable d'environnement I_MPI_DEVICE

Les valeurs possibles sont :

  • sock : socket
  • shm : mémoire partagée
  • ssm : socket + mémoire partagée
  • rdma : infiniband
  • rdssm : socket + mémoire partagée + rdma (la valeur par défaut)

Exemple :

Utiliser uniquement les sockets (TCP Ethernet)

mpirun -env I_MPI_DEVICE socket ..... 

Utiliser uniquement l'infiniband

mpirun -env I_MPI_DEVICE rdma  ....

Pour Open MPI c'est différent :

Open MPI will, by default, choose to use cm when the InfiniPath PSM MTL can be used. Otherwise, OB1 will be used and the corresponding BTLs will be selected. Users can force the use of ob1 or cm if desired by setting the pm MCA parameter at run-time:

- "ob1" supports a variety of networks that can be used in

   combination with each other (per OS constraints; e.g., there are
   reports that the GM and OpenFabrics kernel drivers do not operate
   well together):
   - OpenFabrics: InfiniBand and iWARP
   - Loopback (send-to-self)
   - Myrinet: GM and MX
   - Portals
   - Quadrics Elan
   - Shared memory
   - TCP
   - SCTP
   - uDAPL
  1. "cm" supports a smaller number of networks (and they cannot be

used together), but may provide better better overall MPI

   performance:
   - Myrinet MX (not GM)
   - InfiniPath PSM
   - Portals 

$ mpirun --mca pml ob1 ...
     or
$ mpirun --mca pml cm ...

So to force TCP to be used, you need to force the use of the ob1 PML and then force the use of the TCP BTL. Perhaps something like this:

$ mpirun --mca pml ob1 --mca btl tcp,sm,self ... 
  • Force InfiniBand: –mca pml ob1 –mca btl self,sm,openib
  • Force OPA: –mca pml cm –mca mtl psm2