PpHd Le 05/09/2003 à 12:39 J'ai un petit probleme: je voudrais avoir un systeme de mesure fiable, et si possible precis afin de mesurer l'efficacite d'une fonction sous Linux.
J'ai deja trouve les fonctions clock (Peu precis, probleme avec plusieurs threads), cputime(idem), rdtsc(tres precis, mais seulement pour pentium et toujours problemes threads), et times(peu precis, mais pas de pb de thread).
Probleme de thread= du fait qu'il y ait plusieurs processus, cela perturbe la mesure.
Mais times n'est pas parfait: j'obtiens souvent des differences de 5% alors que rien ne change dans le code (pas de aleur aleatoire non plus).
C'est surement le cache du processeur qui entre en jeu, et des services supplementaires se declenchant et le vidant (ce qui ralentit l'execution du processus puisque je ne mesure que le temps utilisateur et que le cache du processeur a ete vide).
Des idees pour s'en sortir ?
Si possible, portable sous tout systeme Linux (alpha, x86, etc).
PpHd Le 05/09/2003 à 17:41 Il me semble que c'est le meme probleme que pour clock.
kim Le 05/09/2003 à 19:15 en gros tu cherches quoi ? un truc pour savoir combien de temps a duré l'execution d'une fonction ?

Il n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi
PpHd Le 09/09/2003 à 09:44 Pas mauvaise idee. D'ailleurs je m'en sers. Mais je voulais faire des bench precis.
"Bench precis" Une heresie sous Linux... Meme en comptant les temps utilisateurs seuls et en calculant les marges d'erreur due a la faible precision que l'on a, ben j'obtiens des variations de 5%. Surement due au cache du processeur et des services qui s'activent de facon aleatoire...
PpHd Le 09/09/2003 à 10:27 J'ai regarde. Gprof est plutot difficile a comprendre. Quelques coups de grep bien place, j'ai trouve qu'il utilise setitimer et getitimer de sys/times:
int getitimer(int which, struct itimerval *value);
int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);
Toute ressemblance avec AMS ne serait pas fortruite...
Malheuresement, la resolution est de 10ms encore une fois (et c'est meme pas Posix) :
Timers will never expire before the requested time, instead expiring some short,
constant time afterwards, dependent on the system timer resolution (currently
10ms).
kim Le 09/09/2003 à 16:59 mais attend, si tu veux savoir la vitesse d'execution d'une fonction courte, tu la répliques 400000 fois, et tu mesures le temps avec plus de précision quand meme ...

Il n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi
PpHd Le 09/09/2003 à 17:44 Meme probleme et meme finesse que times.
Et je signales que je ne mesures que le temps passe dans le processus utilisateur et ne fais aucune entre/sortie suceptible de bloquer le processus.
Sally Le 09/09/2003 à 17:47 Mais il a besoin de tous les services, le truc que tu veux bencher ? si c'est lançable en mode monoutilisateur, ça pourrait aider, non ? bon, évidemment, si c'est sous X...

« Le bonheur, c'est une carte de bibliothèque ! » —
The gostak distims the doshes.Membrane fondatrice de la confrérie des
artistes flous.
L'univers est-il un
dodécaèdre de Poincaré ?
(``
·\ powaaaaaaaaa ! #love#
PpHd Le 09/09/2003 à 17:52 J'ai pas acces au machine en temps que mono-utilisateur...
Vous croyez que j'ai des alpha, spark, power-pc, athlon, itanium a la maison ?
PpHd Le 09/09/2003 à 17:58 Remarque ca serait la solution...
PpHd Le 15/09/2003 à 08:54 Mais elle tient pas compte du basculement de thread...