Comment faites-vous profil & amp; Optimiser les noyaux CUDA?
Je suis un peu familiarisé avec le CUDA visual profiler et l'occupation de la feuille de calcul, bien que je ne suis probablement pas en tirant parti de leur ainsi que j'ai pu. Profilage & optimisation de code CUDA n'est pas comme le profilage & optimisation de code qui s'exécute sur un PROCESSEUR. Donc, je suis l'espoir d'apprendre de vos expériences sur la façon d'obtenir les la plupart hors de mon code.
Il y avait un post récemment à la recherche pour le meilleur code possible d'identifier auto numéroset j'ai fourni un CUDA mise en œuvre. Je ne suis pas convaincu que ce code est aussi rapide comme il peut être, mais je suis à une perte de comprendre à la fois ce que les bonnes questions soient et quel outil je peux obtenir les réponses.
Comment pouvez-vous identifier des façons de rendre vos noyaux CUDA effectuer plus rapidement?
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Si vous êtes en développement sur Linux, alors le CUDA Visual Profiler vous donne une quantité d'informations, de savoir à quoi il peut être un peu délicat. Sur Windows, vous pouvez également utiliser CUDA Visual Profiler, ou (sur Vista/7/2008), vous pouvez utiliser le programme Nexus qui s'intègre bien avec Visual Studio et vous offre combinée de l'hôte et le GPU informations de profil.
Une fois que vous avez obtenu les données, vous avez besoin de savoir comment l'interpréter. Le Avancé CUDA C présentation de CG a quelques conseils utiles. Les principales choses à regarder dehors pour sont:
Ce n'est qu'un début, découvrez le CG de la présentation et de l'autre de séminaires en ligne sur le site web de NVIDIA.
Le CUDA profiler est plutôt rudimentaire et ne pas fournir beaucoup d'informations utiles. La seule façon de faire sérieusement de la micro-optimisation de votre code (en supposant que vous avez déjà choisi la meilleure possible de l'algorithme) est d'avoir une compréhension approfondie de l'architecture GPU, en particulier quant à l'utilisation de la mémoire partagée, mémoire externe des modèles d'accès, registre d'utilisation, le fil de l'occupation, les portails, etc.
Peut-être, vous pouvez poster votre code noyau d'ici et d'obtenir des commentaires ?
La nVidia CUDA forum du développeur forum est également un bon endroit où aller pour obtenir de l'aide avec ce genre de problème.
Si vous utilisez Windows... Vérifier Nexus:
http://developer.nvidia.com/object/nexus.html
Je resta en arrière parce que je ne suis pas CUDA expert, et les autres réponses sont assez bonnes SI le code est déjà assez proche de l'optimal. Dans mon expérience, c'est un grand SI, et il n'y a pas de mal à vérifier.
Pour le vérifier, vous avez besoin de savoir si le code est sûre de ne rien faire, il n'a pas vraiment à faire. Voici comment je peut voir pour vérifier que:
Exécuter le même code à la vanille processeur, et de prendre stackshotsou utiliser un profiler comme Oprofile ou RotateRight/Zoom qui peut vous donner des informations équivalentes.
Cours d'exécution sur un CUDA processeur, et de faire la même chose, si possible.
Ce que vous cherchez sont des lignes de code qui ont un taux d'occupation élevé sur la pile d'appel, comme le montre la fraction de la pile des échantillons contenant. Ce sont vos "goulets d'étranglement". Il ne prend pas un très grand nombre d'échantillons pour les localiser.