2015-04-09 1 views
0

J'utilise le CUDA 7.0 profileur, nvprof, au profil un processus faisant appels CUDA:Mon CUDA nvprof 'API Trace' et 'GPU Trace' ne sont pas synchronisés - que faire?

$ nvprof -o out.nvprof /path/to/my/app 

Plus tard, je produis deux traces: la 'trace API' (ce qui se passe sur le CPU hôte, par exemple CUDA appels d'exécution et les plages vous marquez) et la « trace GPU » (exécutions du noyau, memsets, H2Ds, D2Hs et ainsi de suite):

$ nvprof -i out.nvprof --print-api-trace --csv 2>&1 | tail -n +2 > api-trace.csv 
$ nvprof -i out.nvprof --print-gpu-trace --csv 2>&1 | tail -n +2 > gpu-trace.csv 

chaque enregistrement dans chacune des traces a un horodatage (ou un début et à la fin temps). Le fait est que la valeur du temps 0 dans ces deux traces n'est pas la même: Le point GPU trace time-0 semble signifier quand la première opération sur le GPU déclenchée par le processus concerné commence à s'exécuter, tandis que le point time-0 semble être le début de l'exécution du processus, ou à peu près.

J'ai également remarqué que lorsque j'utilise nvvp et que j'importe out.nvprof, les valeurs sont corrigées, c'est-à-dire que l'heure de début de la première opération GPU n'est pas 0, mais quelque chose de plus réaliste.

Comment obtenir le décalage correct entre les deux traces?

+0

Si vous demandez les deux en même temps, je ne vois pas de "décalage". 'nvprof --print-gpu-trace --print-api-trace/my_app' Faites-vous quelque chose de différent? Voyez-vous quelque chose de différent? Y at-il une raison pour laquelle vous ne pouvez pas demander les deux à la fois à 'nvprof'? [Ici] (http://pastebin.com/7z2mFhbB) est un exemple de ce que je vois. Notez que j'ai marqué quelques lignes pour la comparaison avec <<...>> –

+0

@RobertCrovella: Edité pour clarifier. – einpoklum

+0

que diriez-vous 'nvprof -i out.nvprof --print-gpu-trace --print-api-trace --csv 2> & 1 | tail -n +2> peigne-trace.csv' –

Répondre

2

Il ne peut pas être évident de the nvprof documentation, mais il est possible de spécifier --print-gpu-trace et --print-api-trace lors d'une demande de sortie nvprof, si vous caractérisez une application ou d'extraire des informations à partir d'un fichier de sortie de profileur précédemment capturé.

Si vous caractérisez une application, ce qui suit devrait générer un calendrier « harmonisé » pour les activités API et l'activité GPU:

nvprof --print-gpu-trace --print-api-trace ./my_app 

Vous pouvez enregistrer la sortie en utilisant le --log-file option.

De même, si vous extrayez la sortie d'un fichier de sortie précédemment capturé (pas la même chose en tant que fichier journal), vous pouvez faire quelque chose comme ce qui suit:

nvprof -i profiler_out_file --print-gpu-trace --print-api-trace ... 

profiler_out_file doit être le nom de le fichier que vous avez précédemment enregistré à l'aide de the nvprof -o ... option.

L'impression des deux tracés avec la même commande est essentielle ici pour que les deux montages (combinés) commencent au même instant; Si vous exécutez deux commandes, chacune imprimant une autre trace, elles ne peuvent pas être ainsi «harmonisées».