(en construction)
Placement des tâches
Cpu binding
Article mis en ligne le 9 juillet 2014
dernière modification le 7 avril 2017
logo imprimer

L’architecture d’EOS, avec ses cœurs physiques et ses cœurs logiques, peut impliquer de devoir placer vos tâches mpi et/ou vos threads OpenMP de manière spécifique afin d’optimiser votre calcul.


Lorsque vous lancez une requête, vous pouvez voir sur quels nœuds elle se lance avec la commande : squeue -u $USER. La dernière colonne du tableau obtenu correspond à la liste des nœuds réservés pour votre job.

Connectez-vous sur un de ces nœuds avec la commande : ssh node_number (par exemple ssh eoscomp606), puis regardez ce qui se passe sur ce nœud avec la commande top (plus d’informations sur cette commande ici, ou avec la commande man top). La colonne "P" renvoie le numéro du cœur (ou cpu) sur lequel est lancée chaque tâche, avec la nomenclature ci-dessous, pour chaque nœud :
PNG
ASTUCE : Lorsque vous lancez la commande top, tapez "F" pour trier les colonnes, puis "j+entrer" pour que ce tri se fasse par la colonne "numéro du core".


1. Placement par défaut

Par défaut, si vous avez bien placé en en-tête de votre script SLURM la ligne #SBATCH --ntasks-per-core=1 , SLURM ne devrait pas lancer de tâches sur le core logique associé à un core physique déjà occupé par une tâche.

2. Placement sur les cores physiques

Sauf dans le cas particulier de l’hyperthreading, il est préférable de ne pas utiliser les cores logiques (cores n°20 à 39), et donc de positionner les tâches directement sur les cores physiques.

3. Placement sur les cores physiques en dépeuplé

Dans l’exemple ci-dessous, on se place dans un cas de figure où on a réservé 2 nœuds complets (i.e. un total de 40 cores), et qu’on souhaite lancer 16 processus MPI par nœud, de manière équilibrée.

L’option -n 32 dans l’extrait de code qui suit vient donc de (2 nœuds * 16 processus), et est a adapté à votre propre code.
P.S. :

Cette page est rédigée de manière générale, les [options_srun] dépendent du MPI que vous utilisez : IntelMPI ou BullxMPI. N’oubliez ni de spécifier à chaque fois les variables d’environnement spécifiques à l’un ou à l’autre, ni de charger le module correspondant. Plus d’informations à ce sujet ici.



Site réalisé sous SPIP
avec le squelette ESCAL-V3
Version : 3.86.44
Hébergeur : INP Toulouse