Journal Nombre de cycles CPU d'une commande?

Posté par  .
Étiquettes : aucune
0
16
oct.
2003
Cher journal,

Je cherche à calculer le nombre de cycles cpu que prend l'exécution d'une commande.

La commande `time' est intéressante mais elle renvoie un temps en (micro) secondes ce qui n'est pas très pratique pour comparer avec un autre pc plus puissant par exemple.

Je sais que je pourrais multiplier ce temps par la fréquence du processeur mais je ne trouve pas ça très propre ni très précis...

Y a-t-il une façon de faire simple pour calculer le nombre de cycles cpu pour l'exécution d'une commande?

Merci d'avance cher journal
Ceci est mon premier message, j'espère que je ne fais pas du HS, sinon j'en suis désolé...
  • # Re: Nombre de cycles CPU d'une commande?

    Posté par  . Évalué à 4.

    En mode protege ? Aucun moyen, impossible de savoir si le CPU se contente d'effectuer la commande que tu lui a passe ou si il est occupe a ranger ces registres ou a faire quoi que ce soit d'autre demande par l'OS.

    Une seule solution : le manuel du CPU. Si tu veux des timings vraiment precis fait une recherche sur Google sur "timer zen".

    Kha
    • [^] # Re: Nombre de cycles CPU d'une commande?

      Posté par  . Évalué à 2.

      Je vais peut être dire 1 connerie mais avec gdb
      ça doit être possible de calculer ça d'après le code assembleur et la doc du processeur en question
      • [^] # Re: Nombre de cycles CPU d'une commande?

        Posté par  . Évalué à 2.

        En theorie ca serait possible, en pratique vu que les changements de contexte peuvent influer sur le cache du CPU, il est quand meme impossible d'obtenir une valeur pratique et mesuree. Tout au plus une valeur theorique.

        Mais de toute facon je ne vois pas bien l'interet de calculer le nombre de cycles sur une application entiere, ce n'est pas plutot sur la boucle principale de traitement que tu voudrais mesurer ?
  • # Re: Nombre de cycles CPU d'une commande?

    Posté par  (site web personnel) . Évalué à 3.

    Il suffit de demander au cpu le nombre de cycles passés depuis son initalisation avant et apres ton programme, et de faire la différence, pour cela, un peu d'assembleur et l'instruction rdtsc :
    http://www.midnightbeach.com/jon/pubs/rdtsc.htm(...)
  • # Re: Nombre de cycles CPU d'une commande?

    Posté par  . Évalué à 2.

    ça changerais d'avoir le nombre de cycles ? c'est par définition dépendant de la machine, et sans doute bien moins significatif que le temps en secondes.
  • # Re: Nombre de cycles CPU d'une commande?

    Posté par  (site web personnel) . Évalué à 3.

    essaye de faire marcher tau avec pcl ou papi (bon courage), ou bien procure toi une sgi et utilise perfex ;)

    http://www.cs.uoregon.edu/research/paracomp/tau/(...)
    http://icl.cs.utk.edu/papi/index.html(...)
    http://www.fz-juelich.de/zam/PCL/PCLcontent.html(...)
  • # Re: Nombre de cycles CPU d'une commande?

    Posté par  . Évalué à 1.

    Merci pour vos réponses

    En fait je me basais sur un cas simple. Par exemple, pour exécuter l'instruction ASM MOVE, il faut n ticks d'horloge.

    Je pensais donc qu'on pouvait avoir la durée d'exécution d'un programme en ticks d'horloge également.

    Les ticks d'horloge étant comptés seulement quand le processeur travaille sur notre processus et non pas sur d'autres processus dans le cas du multithread, le multithread étant un leurre vu que le processeur ne traite qu'une instruction à la fois (ou alors j'ai rien compris!!).

    Je souhaitais avoir cette information afin de pouvoir mesurer le temps d'exécution de facon indépendante du materiel... Un tick d'horloge sur un 486 reste un tick d'horloge sur un AthlonXP, la fréquence n'étant pas la même évidemment.

    Enfin bref, ce n'est pas grave, je n'ai pas le temps d'approfondir pour le moment car j'ai un rapport qui m'attend :).
    Mais la réponse m'intéresse toujours :-).
    • [^] # Re: Nombre de cycles CPU d'une commande?

      Posté par  (site web personnel) . Évalué à 2.

      Un tick d'horloge sur un 486 reste un tick d'horloge sur un AthlonXP, la fréquence n'étant pas la même évidemment.

      Non, ce n'est pas que la fréquence qui change. Même pour les processeurs d'une même famille et en se bornant aux instructions communes (pas de MMX et compagnie) la façon dont ton processeur va exécuter ton programme sera différente : pipeline, prédiction de branchement, cout différent des instructions en ticks d'horloge.

      Par exemple une instruction blup sur 486 fait 4 ticks et sur 986 fait 13 ticks. Une instruction plop fait 5 ticks sur 486 et 11 sur 986. Et le pipeline du 986 permet de combiner ces deux instruction de façon efficace (14 ticks pour exécuter blup suivit de plop)

      Donc même s'il est possible de compter les ticks d'un programme pour différents processeurs, tu ne pouras pas en déduire grand chose. Sans compter que comme il est dit au dessus l'OS, les autres processus et certains périfériques ont leur mots à dire. Et même dans un système mono-tâche, une différence peut se situer au niveau des caches du processeur. Leurs taille et leurs vitesse entrent bien sûr en jeu mais les algos utilisés pour faire le caching sont également importants.
    • [^] # Re: Nombre de cycles CPU d'une commande?

      Posté par  . Évalué à 1.

      Accessoirement, le temps que mettra une instruction à s'exécuter dépend énormément du contexte, ie si la mémoire nécessaire est dans le cache ou non, ça dépend aussi des instructions qui viennent avant et après, ...
      Par exemple, sur le pentium, si tu faisais deux mov à la suite, en utilisant le meme registre comme source dans un des mov et comme destination dans l'autre, tu avais une pénalité de qques cycles sur le second mov (y avait un truc du genre, mais c'est très flou dans mes souvenirs, merci de me corriger si je me suis trompé)
    • [^] # Re: Nombre de cycles CPU d'une commande?

      Posté par  (site web personnel) . Évalué à 1.

      Pour rajouter ce que dise les autres, les cpu actuelles sont out-of-order. Le cpu analyse le flot des 23 à 128 µinstructions suivante (qui correspond de 1 à "plusieurs" instruction asm). Il peut ensuite plus ou moins changer l'ordre d'execution des instructions en faisant du renommage de registres. Le nombre d'unité varie selon les cpu, 2 alu, 1 fpu, 1 Load&store unit, 1 ou 2 unité vectoriel... avec des latences différentes plus ou moins masqué par le réordonnancement des instructions (mulitplication avec un thoughput de 1 mais une latence de 3), etc...


      Bref, tu devrais vraiment lire :
      http://articles.linuxmag-france.org/lm32/hackC.html(...)

      "La première sécurité est la liberté"

      • [^] # Re: Nombre de cycles CPU d'une commande?

        Posté par  . Évalué à 1.

        Ok! Merci à tous!

        Vous éclairez ma lanterne. On apprend plein de choses intéressantes en postant un journal ;-).

        Je m'en vais lire vos liens de ce pas.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.