#!/bin/bash
#SBATCH --job-name=nsight_systems   # Nom arbitraire du travail Slurm
#SBATCH --output=%x.%j.out          # Fichier de sortie standard du travail
#SBATCH --error=%x.%j.err           # Fichier d'erreur standard du travail
#SBATCH --ntasks=4                  # Nombre de processus MPI demandes
#SBATCH --ntasks-per-node=4         # nombre de tache MPI par noeud (= nombre de GPU par noeud)
#SBATCH --gres=gpu:4                # nombre de GPU par noeud
#SBATCH --cpus-per-task=10          # nombre de coeurs CPU par tache (un quart du noeud ici)
# La ligne ci-dessous peut être décommentée pour passer en mode exclusif et disposer
# d'un accès complet aux compteurs matériels (cf. les bonnes pratiques pour le profilage)
##SBATCH --exclusive -C prof
# /!\ Attention, la ligne suivante est trompeuse mais dans le vocabulaire
# de Slurm "multithread" fait bien référence à l'hyperthreading.
#SBATCH --hint=nomultithread        # 1 processus MPI par coeur physique (pas d'hyperthreading)
#SBATCH --time=00:20:00             # Temps du job hh:mm:ss (20mn ici)

# Chargement des modules de votre choix
module load ...
# Chargement de Nsight Systems
module load nvidia-nsight-systems/2021.2.1

# Echo des commandes
set -x

# Pour ne pas utiliser le /tmp
export TMPDIR=$JOBSCRATCH
# Pour contourner un bogue dans les versions actuelles de Nsight Systems
# il est également nécessaire de créer un lien symbolique permettant de
# faire pointer le répertoire /tmp/nvidia vers TMPDIR
ln -s $JOBSCRATCH /tmp/nvidia

# Profiling en mode OpenACC avec génération d'un fichier de résultats
# par processus ("report_rank0.qdrep", "report_rank1.qdrep", etc)
srun nsys profile -t openacc -o "report_rank%q{SLURM_PROCID}" ./my_bin_exe