Vous êtes ici : Accueil > Espace Utilisateurs > Utilisation du système de calcul EOS > Améliorer les performances

Améliorer les performances de vos codes

Vous trouverez dans cette rubrique différents moyens de déboguer votre application, d’améliorer les performances et d’optimiser un calcul sur le système de calcul EOS.

Déboguer

Avant d’optimiser, il faut avoir un code exempt de bogues : le débogueur totalview peut vous aider à déboguer votre code

Compiler

  • Quel compilateur utiliser, et comment faire, surtout lorsqu’on utilise mpi ? On vous dit tout ici
  • Comment compiler spécifiquement pour le nœud à grande mémoire eosmesca1 ? C’est par là

Mesurer

Le code étant débogué, un profilage lors de l’exécution sur des jeux de données tests vous permettra d’identifier les "points chauds" :

  • Pour un code openMP, on peut utiliser Vtune
  • Plusieurs outils permettent de profiler un code MPI :

Améliorer les communications mpi

si vous utilisez la version BullxMPI de la bibliothèque MPI, vous pouvez (la plupart du temps) améliorer grandement les performances de votre code en utilisant la couche MXM

Améliorer les performances grâce à la MKL

La MKL (bibliothèque d’Intel) permet souvent d’améliorer les performances. Elle comprend BLAS, LAPACK, ScaLAPACK... :

Articles

  • Options de vectorisation / compilation - Novembre 2016

    Comment activer et optimiser la vectorisation d’un code au moment de la compilation.

  • Outil EOS : placement - Janvier 2016

    placement est une commande permettant de générer les arguments de placement de processus et de threads pour les commandes srun et numactl.
    Exemple d’utilisation la commande placement avec la commande srun.
    Cas pratique : calcul Hybride MPI+OpenMP. On veut placer au niveau d’un noeud d’EOS, 4 processus MPI, chacun déployant 5 threads :
    En argument pour placement on passe d’abord le nombre de processus MPI, puis le nombre de trhreads par processus MPI. Dans le cas ci-dessous on génère par (...)

  • (EOS) Exécution Mixte (hybride) MPI et OpenMP avec attachement des processus et des threads - Octobre 2014

    A travers des exemples nous montrons le moyens d’exécuter des jobs Mixte MPI+OpenMP, en attachement explicitement les processus et les threads aux cores physiques des noeuds.

  • Vectorisation avec les compilateurs Intel(r) - Septembre 2014

  • CPU_MASK - Septembre 2014

    On peut également placer les tâches sur des cores spécifiques en utilisant CPU_MASK.
    Cette variable permet de placer les différentes tâches sur des cores spécifiques, mais pour ce faire, il faut avoir réserver l’intégralité du nœud au préalable. man srun mask_cpu : Bind by setting CPU masks on tasks as specified where is ,,.... CPU masks are always interpreted as hexadecimal values but can be preceded with an optional ’0x’. Not (...)

  • Numactl - Septembre 2014

    On peut également placer les tâches sur des cores spécifiques en utilisant numactl.
    ATTENTION avec numactl, il faut que les cores alloués soient bien dans le cpuset définit au lancement du job. Ou que l’ensemble du noeud soit réservé comme dans l’exemple ci-dessus.
    On remplace alors la commande srun par :
    numactl -i all -C 0-4,10-14 ./mon_appli.exe > output_$SLURM_JOBID.log
    L’option -C permet de spécifier les cores sur lesquels on veut placer les tâches. Dans cet exemple, on répartit 5 tâches (...)

  • Script SLURM en dépeuplé - Juillet 2014

    Pour des raisons de besoins mémoire par processus MPI ou de nombre de processus MPI égal à une puissance de 2, il peut être intéressant ou nécessaire de déployer par noeud un nombre de processus MPI inférieur à 20 (sachant que les noeuds d’EOS dispose de 20 cores physiques). Attention : la mesure des heures cpu consommées ne tient pas compte du dépeuplement. Le neoud étant alloué de manière exclusive on comptabilise l’ensemble des ressources bloquées (soit 20 cores par noeuds, fois le nombre de noeuds). (...)