2017-06-16 1 views
0

La question: Est-il possible et si oui alors comment, obtenir la liste des cœurs sur lesquels mon travail mpi s'exécute à un moment donné?Est-il possible et comment obtenir une liste des cœurs sur lesquels mon travail mpi est en cours d'exécution de slurm?

Il est facile de lister les nœuds auxquels le travail a été assigné, mais après quelques heures passées à surfer sur Internet, je commence à soupçonner que slurm expose la liste des coeurs de toute façon (pourquoi pas?). Le truc, c'est que je veux vérifier si le cluster sur lequel je travaille étend vraiment les processus de mon travail à travers les nœuds, les cœurs (et si possible, les sockets) comme je le demande (appelez-moi paranoïaque si Vous serez).

S'il vous plaît noter que hwloc n'est pas une réponse à ma question, je demande s'il est possible d'obtenir cette information de slurm, pas de l'intérieur de mon programme (appelez-moi curieux si vous voulez).

étroitement lié (mais certainement pas la même chose) other similar question

Répondre

1

bien, cela dépend de votre bibliothèque MPI (basée MPICH, ouvert basé sur MPI, autre), sur la façon dont vous exécutez votre application MPI (via mpirun ou lancement direct via srun) et votre config SLURM.

Si vous lancez le lancement, SLURM est celui qui peut effectuer la liaison. srun --cpu_bind=verbose ... doit indiquer comment chaque tâche est liée.

Si vous mpirun, SLURM ne génère qu'un seul proxy sur chaque nœud. dans le cas d'Open MPI, la commande spawn est srun --cpu_bind=none orted ... donc à moins que SLURM ne soit configuré pour restreindre les cœurs disponibles (par exemple si vous avez configuré cpuset et les nœuds ne sont pas en mode exclusif), tous les cœurs peuvent être utilisés par le MPI les tâches. puis il appartient à la bibliothèque MPI de lier les tâches MPI dans les cœurs disponibles.

si vous voulez savoir ce que les noyaux disponibles sont, vous pouvez srun -N $SLURM_NNODES -n $SLURM_NNODES --cpu_bind=none grep Cpus_allowed_list /proc/self/status

si vous voulez savoir comment les tâches sont liées, vous pouvez mpirun grep Cpus_allowed_list /proc/self/status

ou vous pouvez demander MPI signaler que iirc, avec Open MPI vous pouvez mpirun --report-bindings ...

+0

Cool! Je vais tester la première chose demain matin et nous verrons. – Empischon

+0

J'étais tout à fait sûr que tout le temps que le cluster s'exécute sur MVAPICH ... s'avère, il fonctionnait sur Intel MPI! Ainsi, googler un peu avec les mots clés de votre réponse m'a donné: --print-rang-carte comme équivalent IMPI de: --report-fixations Alors, merci beaucoup! – Empischon