2017-06-06 3 views
4

Je vois que nvprof peut profiler le nombre de flop dans le noyau (en utilisant les paramètres ci-dessous). Aussi, lorsque je feuillette la documentation (ici http://docs.nvidia.com/cuda ... il est dit que flop_count_sp est "Nombre d'opérations à virgule flottante simple précision exécutées par des threads non-prédicats (ajouter, multiplier, multiplier-accumuler et spécial). contribue 2 au comte. »Les sorties nvprof de Nvidia pour FLOPS

Cependant quand je lance, le résultat de flop_count_sp (qui est censé être flop_count_sp_add + flop_count_sp_mul + flop_count_sp_special + 2 * flop_count_sp_fma) Je trouve qu'il ne comprend pas la somme de la valeur de flop_count_sp_special

.

Pourriez-vous me suggérer ce que je suis supposé utiliser? Devrais-je ajouter cette valeur à la somme de flop_count_sp ou je devrais considérer t La formule n'inclut pas la valeur de flop_count_sp_special?

Pourriez-vous également me dire quelles sont ces opérations spéciales?

J'utilise la ligne de commande suivante:

nvprof --metrics flops_sp --metrics flops_sp_add --metrics flops_sp_mul --metrics flops_sp_fma --metrics flops_sp_special myKernel args 

myKernel est le nom de mon noyau CUDA qui a des arguments d'entrée donnés par args.

Une partie de mes sorties nvprof par exemple est comme indiqué ci-dessous:

==20549== Profiling result: 
==20549== Metric result: 
Invocations        Metric Name      Metric Description   Min   Max   Avg 
Device "Tesla K40c (0)" 
    Kernel: mykernel(float*, int, int, float*, int, float*, int*) 
      2        flop_count_sp Floating Point Operations(Single Precisi  70888  70888  70888 
      2       flop_count_sp_add Floating Point Operations(Single Precisi  14465  14465  14465 
      2       flop_count_sp_mul Floating Point Operation(Single Precisio  14465  14465  14465 
      2       flop_count_sp_fma Floating Point Operations(Single Precisi  20979  20979  20979 
      2      flop_count_sp_special Floating Point Operations(Single Precisi  87637  87637  87637 
+1

Pouvez-vous fournir les valeurs pour les événements/mesures individuels? Votre ligne de commande ne me semble pas valide, il n'y a pas de métrique comme 'flops_sp *'. – Tom

Répondre

6

Les opérations « spéciales » sont répertoriés dans le tableau de débit arithmétique dans le Programming Guide, ils sont: réciproque, recip sqrt, connectez-vous, exp, sin, cos. Notez que ceux-ci sont moins précis (mais plus rapides) que les versions par défaut, vous devez vous inscrire en utilisant l'indicateur intrinsèque ou un compilateur (-use_fast_math). Malgré la documentation, il semble que les opérations spéciales ne sont pas incluses dans le total de flop_count_sp. C'est un bug dans la version actuelle (8.0), j'ai déposé un bug donc ça devrait être corrigé dans une future version (donc ce paragraphe sera périmé à un moment donné).

+0

Merci beaucoup d'avoir signalé les opérations spéciales et d'avoir signalé le bug. Mais je me demande puisque dans mon noyau je n'ai utilisé aucune de ces opérations spéciales alors quelles opérations pourraient contribuer la valeur "87637" pour "flop_count_sp_special"? – Amit

+0

J'ai partagé mon code ici (https://bitbucket.org/rajgurung777/blogqueryproject). Vous pouvez trouver l'implémentation du noyau dans le fichier simplex.cu – Amit

+0

Pouvez-vous créer un lien vers la page de bogue? – einpoklum