Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1553 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  [algorithme] pour les gens qui ont un esprit logique :)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[algorithme] pour les gens qui ont un esprit logique :)

n°427313
k666
dites non à petitmou
Posté le 14-06-2003 à 00:15:55  profilanswer
 

salut :)
je suis entrain de coder un peu comme un porc et donc je suis entrain de developper un petit truc pour benchmarker tous les appels de fonctions etc... il fadurait qu'au final je puiss faire une stat assez sympa, de ce style la:
 
nom de fonction
nombre d'appels
temps d'exécution total
 
 
pour cela je construis deux fonctions,  
 
dbgstart(function_name)
 
et un  
 
dbgend()
 
 
ok pour l'instant c bien sympa; a je possede un tableau dans lequel je vais ajouter, a chaque appel de fonction, un sous tableau avec le nom de fonction (et les eventuels parametres ?), l'instant d'exécution...
donc a chaque appel de fonction sera crée et ajouté celui ci au tableau d'appels ...
ok juske la tout va bien,
pour pouvoir chronometrer les temps d'execution, il faut que je fasse un dbgend histoire de pouvoir marquer la fin d'execution d'une fonction
 
 
donc, par exemple toute fonction sera definie ainsi:
 
 


function pouet()
{
  dbgstart("pouet" );
  // code a executer ...
  // ....
  // puis juste avant de retourner on dbgend() ;)
  dbgend()
  return la_valeur_cherchee;
}


voial meme si la fonction ne retourne rien on s'en fout on met le dbgend juste la ou son execution s'arrete ...
 
 
 
voila, les problemes qui se posent, sont par exemple si une fonction en appelle une autre; dans ce cas la il faut que l'appel respectif a dbgend() ecrive dans la bonne case sa date de fin d'execution
il faut aussi que si ya des appels successifs a plusieurs fonctions, ca ecrive le temps de fin d'exec dans la bonne case ...
 
 
voila en gros c un truc completement trivial que je cherche a faire, mais je suis kéblo car saturé de m'être explosé le crane depuis ca fait un mois :) donc voila si vous avez une idee d'algorithme tout con qui fasse ca, merci bcp ! (en fait je cherche a realiser les fonction dbgstart et dbgend)
 
 
apres, quand je voudrais avoir un recapitulatif, je balayerai tout le tableau d'infos et j'ajouterai les temps etc... c pas le probleme :)
 
 
voila aidez moi ca peut servir a d'autres j'espere :)
 
 
salut!
 

mood
Publicité
Posté le 14-06-2003 à 00:15:55  profilanswer
 

n°427317
Yonel
Monde de merde !
Posté le 14-06-2003 à 00:21:59  profilanswer
 

t'es sûr que ça va vraiment marcher ton truc?... les systèmes sont multi-tâche maintenant. Pour des petites fonctions comme ça oui ça posera pas de pb, mais si ton prog s'arrête pour laisser la main à un autre processus bah tes temps seront faussés...
 
sous UNIX c assez flagrant
Tu prends deux processus A et B
A contient ta fonction
B c'est un otre prog sans importance
 
A se lance, il note le temps
paf le système passe la main à B
B se lance, il met qq tps à s'exécuter
A reprend la main et note le tps de fin... et forcément c'est faussé.
 
Après ptet que je me trompe, mais shui pas sûr que ce soit faisable en fait  :??:

n°427323
k666
dites non à petitmou
Posté le 14-06-2003 à 00:26:48  profilanswer
 

bin ouais mais c pour du JS que je fais ca :)
heheh je code un OS en javascript :p nan pas vraiment mais une grosse usine a gaz de plus de 15000 lignes de code ;) et c assez animal ce truc :p donc je veux benchmarker pour optimiser!
 
 
voila en fait j'ai pensé à ça, dites moi si ca vous parait correct ? (pas encore testé, j'ai peur !!! :D)
 


 function dbgstart(fname)
 {
  var pushit = new Array();
  pushit["fname"] = fname;
  pushit["start"] = new Date();
  dbgdata.push(pushit);
  dbgstack++;
 }
 
 function dbgend()
 {
  var pos = dbgdata.length - dbgstack;
  dbgdata[pos]["end"] = new Date();
  dbgstack--;
 }


Message édité par k666 le 14-06-2003 à 00:28:03
n°427406
Taz
bisounours-codeur
Posté le 14-06-2003 à 09:09:33  profilanswer
 

pour ce qui veulent résoudre ce problème en C++
 
http://boost.org/libs/timer/timer.htm#Class progress_timer
http://minilien.com/?yKRmarbbwj
 
d'un autre coté, le truc que tu veux faire, ça s'appelle un profiler si je ne m'abuse

n°427412
k666
dites non à petitmou
Posté le 14-06-2003 à 09:50:00  profilanswer
 

bon bin j'ai réussi à le faire finalement :) çà me donne des stats très très intéressantes :)
 
voici le code au cas ou:
(avec fncsInfo un tableau)


 
function dbgstart(fncName){
   var fncInfo = fncsInfo[fncName];
   if (!fncInfo) fncInfo=fncsInfo[fncName]={ calls:0, times:[], starts:[] }
   fncInfo.calls++;
   var tmp_start = new Date();
   var nutc = tmp_start.getTime();
   fncInfo.starts.push(nutc);
}
 
function dbgend(fncName){
   var now = new Date();
   var utc = now.getTime();
   var fncInfo = fncsInfo[fncName];
   fncInfo.times.push( utc - fncInfo.starts.pop() );
}
 

n°438240
montana91
Posté le 24-06-2003 à 16:46:40  profilanswer
 

Essaye de te documenter et évite d'écrire des messages trop long ça donne pas trop envie de lire  :sol:

n°438609
k666
dites non à petitmou
Posté le 25-06-2003 à 01:22:51  profilanswer
 

lol messages longs ???
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
nan [:urgeman]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  [algorithme] pour les gens qui ont un esprit logique :)

 

Sujets relatifs
Algorithme d'equilibrage d'un AVLskusez moi, un gros doute tout à coup : un ou exclusif logique en C
cherche liens vers algorithme....Ou trouver l'UML de l'algorithme A* ? (recherche du plus court chemin)
Algorithme de recherche/rempalcement de chaînes dans un fichier ??Algorithme de bits...
J'ai un problème de logique avec les sessionsDécallage de bit, ET logique et OU logique en VB ?
[C/C++]Algorithme d'indentationproblème de logique
Plus de sujets relatifs à : [algorithme] pour les gens qui ont un esprit logique :)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR