2017-10-12 10 views
0

Je suis un nouvel utilisateur de nvprof et j'ai eu une erreur lorsque j'ai essayé d'utiliser nvprof pour profiler mon code. J'ai ajouté des directives OpenACC à mon code. La boîte à outils cuda que j'ai utilisée est Cuda8.0. Mon code est écrit en fortran90 + OpenMPI. J'ai utilisé 16 cœurs pour le calcul parallèle. Voici le script que je l'habitude de soumettre le code:Nvidia Visual profiler Erreur: Impossible de créer le fichier de profilage

#!/bin/bash -l 
# 
#SBATCH --nodes=1 
#SBATCH --ntasks=16 
#SBATCH --ntasks-per-node=24 
#SBATCH --ntasks-per-core=2 
#SBATCH --cpus-per-task=1 
#SBATCH --constraint=gpu 
#SBATCH --time=24:00:00 
#SBATCH --account=s807 

export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK 
export CRAY_CUDA_MPS=1 
export TMPDIR=/scratch/snx3000/guow/Incompact3d_GPU/test1 
export PGI_ACC_TIME=1 

set -ex 

# set some parameters 
OUT=log.txt 
#WMIN=1400 
NP=16 


# tasks: $SLURM_NTASKS 
# tasks-per-node: $SLURM_NTASKS_PER_NODE 
# cpus-per-task: $SLURM_CPUS_PER_TASK 
srun nvprof -o nvprof.out ./incompact3d $WMIN >> $OUT 

Le travail est terminé après plusieurs secondes et je reçu le message d'erreur suivant:

+ OUT=log.txt 
+ NP=16 
+ srun nvprof -o nvprof.out ./incompact3d 
==20144== NVPROF is profiling process 20144, command: ./incompact3d 
==20148== NVPROF is profiling process 20148, command: ./incompact3d 
==20140== NVPROF is profiling process 20140, command: ./incompact3d 
==20133== NVPROF is profiling process 20133, command: ./incompact3d 
==20134== NVPROF is profiling process 20134, command: ./incompact3d 
==20150== NVPROF is profiling process 20150, command: ./incompact3d 
==20146== NVPROF is profiling process 20146, command: ./incompact3d 
==20128== NVPROF is profiling process 20128, command: ./incompact3d 
==20154== NVPROF is profiling process 20154, command: ./incompact3d 
==20156== NVPROF is profiling process 20156, command: ./incompact3d 
==20152== NVPROF is profiling process 20152, command: ./incompact3d 
==20136== NVPROF is profiling process 20136, command: ./incompact3d 
==20130== NVPROF is profiling process 20130, command: ./incompact3d 
==20158== NVPROF is profiling process 20158, command: ./incompact3d 
==20138== NVPROF is profiling process 20138, command: ./incompact3d 
==20142== NVPROF is profiling process 20142, command: ./incompact3d 
==20146== Error: Cannot create profiling file: /scratch/snx3000/guow/Incompact3d_GPU/test2_OpenAcc/nvprof.out 
==20142== Error: Cannot create profiling file: /scratch/snx3000/guow/Incompact3d_GPU/test2_OpenAcc/nvprof.out 
==20138== Error: Cannot create profiling file: /scratch/snx3000/guow/Incompact3d_GPU/test2_OpenAcc/nvprof.out 
==20133== Error: Cannot create profiling file: /scratch/snx3000/guow/Incompact3d_GPU/test2_OpenAcc/nvprof.out 
==20134== Error: Cannot create profiling file: /scratch/snx3000/guow/Incompact3d_GPU/test2_OpenAcc/nvprof.out 
==20136== Error: Cannot create profiling file: /scratch/snx3000/guow/Incompact3d_GPU/test2_OpenAcc/nvprof.out 
==20156== Error: Cannot create profiling file: /scratch/snx3000/guow/Incompact3d_GPU/test2_OpenAcc/nvprof.out 
srun: First task exited 30s ago 
srun: tasks 0,4,6-7,9-13: running 
srun: tasks 1-3,5,8,14-15: exited 
srun: Terminating job step 3892463.0 
slurmstepd: error: *** STEP 3892463.0 ON nid04439 CANCELLED AT 2017-10-12T15:04:00 *** 
srun: Job step aborted: Waiting up to 32 seconds for job step to finish. 
srun: error: nid04439: tasks 0,4,6-7,9-13: Killed 
srun: Terminating job step 3892463.0 

Un fichier nvprof.out est généré, mais rien n'est montré quand j'utilise la commande "nvvp nvprof.out" pour le vérifier. Avez-vous déjà rencontré ce genre de situation auparavant? Toute suggestion sera appréciée!

Répondre

2

utiliser la commande:

srun nvprof -o nvprof.%p.out ./incompact3d $WMIN >> $OUT 

« % p » va se remplir avec l'ID de processus pour chaque rang MPI de sorte que chaque rang affichera son profil de fichiers différents. Sinon, tous les rangs essaient d'utiliser le même fichier qui peut causer des problèmes.

+0

Salut Mat, merci pour votre réponse. Cela fonctionne quand j'ajoute% p. Il peut générer 16 fichiers de sortie. Mais quand j'importe ces 16 fichiers de sortie dans nvprof, rien n'est indiqué dans les détails du GPU, l'étiquette des détails du CPU. Et je ne peux voir que la ligne de temps d'OpenACC. Dans l'étiquette d'analyse lorsque je clique sur "Examiner l'utilisation du GPU", les résultats montrent "Pas de périphériques GPU". Mais le code est exécuté sur CPU et GPU. Pourriez-vous me dire comment afficher le GPU, les détails du CPU et d'autres informations sur le calendrier? –

+0

Si vous exécutez du code sur le GPU, il doit y avoir des informations GPU. Cependant, si "libcupti.so" n'est pas installé sur les noeuds, cela peut expliquer pourquoi l'information est manquante. CUPTI est la bibliothèque de profileurs qui s'interface avec le périphérique. Une autre possibilité est que vous n'avez pas créé le code OpenACC pour l'appareil que vous utilisez. Quelles options "-ta" avez-vous transmises au compilateur? Quel appareil utilisez-vous? Pour le profilage du processeur, vous devez ajouter l'option "--cpu-profiling on" à nvprof ou utiliser pgprof qui active le profilage du processeur par défaut. –

+0

Merci pour votre réponse! L'option -ta que j'ai utilisée est -ta = tesla: cuda8.0. Je cours ma simulation sur Cray XC50. Le noeud de traitement est Intel® Xeon® E5-2690 v3 @ 2,60 GHz (12 cœurs, 64 Go de RAM) et NVIDIA® Tesla® P100 16 Go. J'ai ajouté "--cpu-profilling on" et j'ai utilisé un seul core pour calculer. Maintenant, je peux voir le profilage du processeur. –