J'écris un programme C qui fait une multiplication matricielle 50x50.Pourquoi perf affiche-t-il moins d'événements à virgule flottante que prévu?
Je l'ai compilé à l'assemblage et je vois qu'il a au moins 2 instructions à virgule flottante (mulsd et addsd) dans la boucle la plus interne. La boucle est exécutée 125000 fois, donc je m'attendais à perf stat
pour me donner au moins 250000 opérations en virgule flottante comptées.
Cependant quand j'exécutez la commande suivante,
perf stat -e r530110 -e r531010 -e r532010 -e r534010 -e r538010 ./matmul
Je ne reçois les chefs d'accusation suivants
448 r530110
0 r531010
0 r532010
0 r534010
<not counted> r538010
0.001082287 seconds time elapsed
Mon compilateur ne produit pas d'instructions SSE de sorte que les autres zéro comptages sont attendus. Cependant, j'ai seulement 448 opérations en virgule flottante.
Que se passe-t-il?
Veuillez produire un exemple minimal et donnez-nous le code d'assemblage. Si vous le faites, vous répondrez probablement à votre propre question. –
Également rendre les titres plus précis: qu'est-ce qui est «suspect»? :-) J'ai essayé de l'éditer pour l'améliorer. –