nvcc pour créer l'exécutable add
.
$ nvcc add.cu -o add
===Soumission de tâches===
Pour exécuter le programme, créez le script Slurm ci-dessous. Assurez-vous de remplacer def-someuser
par votre nom de compte (voir [[Running_jobs/fr#Comptes_et_projets|Comptes et projets]]). Pour les détails sur l'ordonnancement, consultez [[Using GPUs with Slurm/fr|Ordonnancement Slurm des tâches avec GPU]].
{{File
|name=gpu_job.sh
|lang="sh"
|contents=
#!/bin/bash
#SBATCH --account=def-someuser
#SBATCH --gres=gpu:1 # Number of GPUs (per node)
#SBATCH --mem=400M # memory (per node)
#SBATCH --time=0-00:10 # time (DD-HH:MM)
./add #name of your program
}}
Soumettez la tâche à l'ordonnanceur.
$ sbatch gpu_job.sh
Submitted batch job 3127733
Pour plus d'information sur la commande sbatch
, l'exécution et le suivi des tâches, consultez [[Running jobs/fr|Exécuter des tâches]].
Le fichier en sortie sera semblable à ceci ː
$ cat slurm-3127733.out
2+7=9
Sans GPU, le résultat serait semblable à 2+7=0
.
=== Lier des bibliothèques ===
Si votre programme doit établir des liens avec des bibliothèques incluses avec CUDA, par exemple [https://developer.nvidia.com/cublas cuBLAS], compilez avec ces indicateurs :
nvcc -lcublas -Xlinker=-rpath,$CUDA_PATH/lib64
Voyez le [[CUDA tutorial/fr|Tutoriel CUDA]] pour plus de détails sur cet exemple et pour savoir comment utiliser le parallélisme avec les GPU.
== Dépannage ==
=== Attribut compute capability ===
NVIDIA utilise le terme compute capability pour désigner un des attributs des dispositifs GPU.
Parfois nommé SM version (SM pour Streaming Multiprocessor), il s'agit d'un numéro de version qui identifie certaines fonctionnalités d'un GPU. Cet attribut est utilisé à l'exécution d'une application pour déterminer les caractéristiques matérielles et/ou les instructions disponibles pour un GPU particulier; pour plus d'information, voir [https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#compute-capability CUDA Toolkit Documentation, section 2.6].
Les messages d’erreur suivants sont causés par un problème en rapport avec cet attribut.
nvcc fatal : Unsupported gpu architecture 'compute_XX'
no kernel image is available for execution on the device (209)
L'ajout d'un indicateur dans l'appel nvcc
pourrait résoudre ces problèmes.
-gencode arch=compute_XX,code=[sm_XX,compute_XX]
Si vous utilisez cmake
, l'indicateur serait
cmake .. -DCMAKE_CUDA_ARCHITECTURES=XX
où XX est la valeur de compute capability pour le GPU NVIDIA qui sera utilisé pour exécuter votre application. Pour connaître ces valeurs, voyez le [[Using GPUs with Slurm/fr#GPU_disponibles | tableau GPU disponibles]].
Par exemple, si votre code sera exécuté sur un nœud A100 de Narval, compute capability a la valeur de 80 et l'indicateur à utiliser lors de la compilation avec nvcc
est
-gencode arch=compute_80,code=[sm_80,compute_80]
L'indicateur pour cmake
est
cmake .. -DCMAKE_CUDA_ARCHITECTURES=80