profilage automatisé du niveau de la boucle d’assemblage

Est-ce que quelqu’un connaît un profileur de niveau de boucle d’assemblage?

J’utilisais gprof mais gprof masque les boucles et le profilage au niveau de la fonction. Cependant, pour optimiser mon code, je souhaite que quelque chose soit mis au niveau de la boucle. Je veux que ce soit automatisé et me donne juste la sortie comme gprof. On m’a recommandé d’aller à dtrace mais je n’ai aucune idée de commencer. n’importe qui peut me diriger de toute façon? par exemple

main: pushl %ebp movl %esp, %ebp subl $16, %esp movl $5000000, -4(%ebp) movl $0, -12(%ebp) movl $0, -8(%ebp) jmp .L2 .L3: movl -8(%ebp), %eax addl %eax, -12(%ebp) addl $1, -8(%ebp) .L2: movl -8(%ebp), %eax cmpl -4(%ebp), %eax jl .L3 movl $0, %eax leave ret 

par exemple, dans gprof, on dirait main exécuté 1 fois et foo exécuté 100 fois. Pourtant, je veux savoir si L2, ou L3 exécuté 1M fois, alors ma concentration sur l’optimisation serait ici. si ma question est vague s’il vous plaît demandez-moi d’expliquer plus Merci

    Je suggère d’utiliser Callgrind (l’un des outils Valgrind et généralement installé avec celui-ci). Cela peut rassembler des statistiques sur un niveau beaucoup plus fin et l’outil kcachegrind est très utile pour visualiser les résultats.

    Cela dépend du système d’exploitation que vous utilisez, mais pour ce type de profilage, vous souhaitez généralement utiliser un profileur d’ échantillonnage plutôt qu’un profileur instrumenté , par exemple:

    • Linux: Zoom
    • Mac OS X: Instruments
    • Windows: VTune

    Si vous êtes sous Linux, Zoom est un excellent choix.

    Si vous êtes sous Windows, LTProf pourrait peut-être le faire.

    Sur n’importe quelle plate-forme, on peut compter sur la méthode low-tech.

    Ne cherchez pas combien de fois les instructions sont exécutées. Recherchez où se trouve le compteur de programme une grande partie du temps. (Ce n’est pas la même chose.) Cela vous indiquera où concentrer vos efforts d’optimisation.

    KCachegrind fournit des informations de profilage pour chaque ligne de code source (voir cette capture d’écran ), notamment le temps processeur, les erreurs de cache, etc.

    Toutefois, l’exécution du code dans le profileur est extrêmement lente (des dizaines de fois plus lente que le natif).