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?
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 <<...>> –
@RobertCrovella: Edité pour clarifier. – einpoklum
que diriez-vous 'nvprof -i out.nvprof --print-gpu-trace --print-api-trace --csv 2> & 1 | tail -n +2> peigne-trace.csv' –