2010-11-18 3 views
1

Il y avait des compteurs de profilage dans cudaprof pour la mémoire globale (gst_coherent, gst_incoherent, gld_coherent, gld_incoherent) qui étaient utiles et clairs pour moi car ils me disaient combien de lectures et d'écritures globales non-coalisées J'avais.Profilage CUDA (interprétation des requêtes gst/gld)

Maintenant, il semble qu'il n'y ait que des "requêtes gst" et des "requêtes gld". Ce sont les charges totales/magasins par warp sur mp 0. Comment puis-je déterminer si j'ai des lectures/écritures non coalisées? Je suppose qu'il y aurait moins de demandes si les demandes étaient fusionnées. Suis-je censé comprendre combien je m'attends par fil et comparer? Malheureusement, mon noyau est trop dynamique pour ça.

Répondre

1

Les compteurs cohérents/incohérents sont pertinents pour les dispositifs sm_10/sm_11, où les accès doivent être alignés et coalescés pour éviter les performances pathologiques. Sur sm_12 et sm_13, le matériel tente de fusionner les accès dans la mesure du possible dans les transactions de segments, et sur sm_2x, le cache L1 fournit une fonction similaire à celle de l'antémémoire supplémentaire du cache lorsque cela n'est pas possible.

Idéalement, vous aurez une idée de la quantité de données que vous lisez et écrivez et comparez cela avec les performances obtenues, cela vous donnera une idée de l'efficacité. Cependant, étant donné que votre noyau est très dépendant des données, vous devriez jeter un coup d'œil à quelques présentations de GTC2010 pour comprendre les autres informations disponibles dans le profileur. Je recommanderais le Fundamental Performance Optimizations for GPUs parler et, plus important encore, en suivant le premier, la conversation Analysis-Driven Performance Optimization.

Vous pourriez également envisager d'instrumenter votre code manuellement avec quelques compteurs supplémentaires.

+0

Ils ressemblent à une excellente ressource. Je mettrai aussi certainement certains de mes propres compteurs - cela m'aidera à comprendre la sortie du profileur. – jmilloy

+0

Sur les GPU 2.0, les échecs de cache L1 sont-ils "coalisés" dans un sens? Est-il possible que les lectures globales 2.0 finissent plus lentement que les lectures globales 1.0 s'il y a beaucoup de ratés? Je suppose que j'ai besoin de regarder de plus près les changements dans l'accès mémoire globale entre mon ancien GPU et mon nouveau! – jmilloy

+0

Sur sm_2x, le matériel va chercher une ligne de cache sur un échec, ce qui permet d'obtenir la même chose. Vous pouvez également choisir de contourner le cache L1, voir le Guide de programmation CUDA pour plus de détails sur les deux modes. – Tom