Existe-t-il une option pour profiler un noyau CUDA? Pas dans son ensemble, mais plutôt en partie. J'ai quelques invocation de fonctions de périphérique et je veux mesurer leurs temps. Y a-t-il des drapeaux/événements/instructions que je peux définir et ensuite il sera visible dans NVIDIA Visual Profiler? Ou dois-je le faire manuellement en insérant cudaEventCreate
et des fonctions similaires.Profilage CUDA dans le noyau
1
A
Répondre
3
Vous pouvez chronométrer des parties spécifiques de votre noyau manuellement à l'aide des clock()
ou clock64()
fonctions:
unsigned long long* time_spent;
__global__ void kernel(...)
{
unsigned int t1, t2;
// ...
t1 = clock();
// code of interest
t2 = clock();
atomicAdd(&time_spent, t2 - t1);
}
« horloge()` retourne officiellement clock_t, mais je préfère l'utilisation explicite de unsigned int pour rendre évidente comment le code ci-dessus est capable de traiter des valeurs de bouclage horloge (tant que le code chronométré ne prend pas plus de 2^32-1 cycles pour terminer.
Assurez-vous aussi avec le temps le code
t1 = clock();
t2 = clock();
dos-à-dos afin que vous puissiez soustraire le temps système.
Questions connexes
- 1. Profilage CUDA à distance?
- 2. Profilage CUDA (interprétation des requêtes gst/gld)
- 3. Inclure le noyau cuda dans mon projet
- 4. noyau CUDA complexe dans MATLAB
- 5. cuda - optimisation du noyau
- 6. Erreur compilation CUDA noyau
- 7. Configuration du noyau Cuda
- 8. Verrouiller le profilage dans le noyau Linux 2.6
- 9. Comment tuer le noyau CUDA par programme
- 10. calculer correctement gridDim pour le noyau CUDA
- 11. Comportement étrange du noyau CUDA
- 12. Blocage d'invocation du noyau CUDA?
- 13. appel noyau CUDA dans un échantillon simple
- 14. cuda des paramètres du noyau
- 15. Conception de hiérarchies de threads dans le noyau dans CUDA
- 16. Bogue d'indexation d'image 2D dans le noyau CUDA
- 17. Compter le nombre de cycles dans un noyau CUDA
- 18. Comment appeler les fonctions de poussée dans le noyau cuda
- 19. CUDA_ERROR_ILLEGAL_ADDRESS lors de l'accès aux variables dans le noyau CUDA
- 20. Espace mémoire des tableaux dans le noyau CUDA
- 21. Profilage du code PyCUDA avec nvvp dans CUDA 6.5
- 22. CUDA, comment mettre en œuvre un tableau dynamique de struct dans le noyau CUDA
- 23. Fonction à l'intérieur du noyau cuda
- 24. comment créer un noyau d'histogramme CUDA?
- 25. CUDA - Appel d'un noyau plusieurs fois
- 26. Appelez le noyau cuda à partir d'une application c multithread
- 27. Le noyau cuda n'exécute pas ou ne renvoie pas d'erreur
- 28. CUDA: embarqué pour le noyau de la boucle
- 29. Ajouter deux vecteurs en utilisant CUDA C, lancer le noyau
- 30. erreur "argument invalide" cuda sur le deuxième noyau
N'est-ce pas que 'clock()' renvoie un compteur local par SM? – KiaMorot
En dépendance de cette réponse: http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#time-function – KiaMorot
Oui c'est le cas. Mais cela n'a pas d'importance tant que nous ne prenons que des différences entre les temps d'un même SM. (Le parallélisme dynamique créerait en effet un problème ici, pour simplifier je suppose que le code d'intérêt ne lance aucun autre noyau). – tera