Mesure du temps CPU d'une partie d'un programme

Mesure du temps CPU d'une partie d'un programme - Java - Programmation

Marsh Posté le 09-12-2002 à 22:21:10    

Bonsoir
 
J'ai un programme comprennant une phase d'initialisation et d'une phase de résolution. J'aimerais mesurer le temps CPU mis par la phase de résolution si possible en pur Java. Y a-t-il une âme généreuse qui pourrait m'indiquer le nom d'une classe (et éventuellement de la méthode qui va avec ) permettant de mesurer ce temps CPU. Si j'ai compris, la classe Time mesure le temps écoulé au complet et pas le temps CPU d'un programme.. Au cas ou, je suis aussi intéressé à une solution spécifique Linux.
 
merci de votre aide et bonne soirée
 
leonhard

Reply

Marsh Posté le 09-12-2002 à 22:21:10   

Reply

Marsh Posté le 09-12-2002 à 22:25:21    

Bah, sous Linux, tu as l'utilitaire time, qui fait ça :  
 
time tacommade option1....
 
Le résultat sera de la forme :  
real    0m29.641s
user    0m0.200s
sys     0m0.080s
 
Pour plus d'info, man time (je l'ai jamais lu! :D)

Reply

Marsh Posté le 09-12-2002 à 22:41:22    

gfive a écrit :

Bah, sous Linux, tu as l'utilitaire time, qui fait ça :  
 
time tacommade option1....
 
Le résultat sera de la forme :  
real    0m29.641s
user    0m0.200s
sys     0m0.080s
 
Pour plus d'info, man time (je l'ai jamais lu! :D)

euh le temps utilisateur et le temps système c'est pas ce qui est demandé


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 10-12-2002 à 07:19:27    


 
ben time c'est ce que j'avais utilisé au début, mais même si c'est pas exactement ce que je voulais, le plus gros problème, je ne sais pas distinguer dans ce temps, le temps mis par la phase d'initialisation du temps mis pour la résolution  
 
j'ai pensé aussi à un "profiler", mais dans ce domaine je n'y connais rien. Est-ce que vous auriez une référence, un pointeur ou mieux un nom de produit à proposer ?

Reply

Marsh Posté le 10-12-2002 à 14:36:17    

Taz@PPC a écrit :

euh le temps utilisateur et le temps système c'est pas ce qui est demandé


 
ouais, mais en lisant le man de cette commande, il doit y avoir moyen de récupérer des infos pertinentes...

Reply

Marsh Posté le 10-12-2002 à 14:58:45    

bin le temps d'éxécution c'est: temps au moment de l'arrêt - temps au moment du début.
 
donc si tu as moyen d'obtenir un temps en java, à partir ou sa précision te va (seconde ? miliseconde ?), tu peut te démerder avec ça....

Reply

Marsh Posté le 10-12-2002 à 17:30:55    

System.getTimeMillisec(), mais les mesures de temps écoulé effectuées à partir de ce que cette fonction renvoie varient pas mal si elles sont assez courtes. Et il faut l'utiliser sur une machine qui ne fait qu'exécuter ton programme Java, parce qu'elle ne fait pas la différence entre temps passé dans l'appli Jav et temps passé dans les autres applis qui tournent sur la machine (OS compris).

Reply

Marsh Posté le 11-12-2002 à 07:57:30    

BifaceMcLeOD a écrit :

System.getTimeMillisec(), mais les mesures de temps écoulé effectuées à partir de ce que cette fonction renvoie varient pas mal si elles sont assez courtes. Et il faut l'utiliser sur une machine qui ne fait qu'exécuter ton programme Java, parce qu'elle ne fait pas la différence entre temps passé dans l'appli Jav et temps passé dans les autres applis qui tournent sur la machine (OS compris).


 
exact !
 
Je crois que j'ai mal expliqué mon prob. Je dois résoudre un gros système linéaire (6000 à 40'000 inconnues). Les données du système proviennent soit du réseau, soit d'un fichier sur disque (local), soit de calculs effectués localement. L'obtention de ces données se fait dans un temps que je ne peux pas négliger, c'est ce que j'appellé la phase d'initialisation. Ensuite, je vais résoudre le système linéaire avec plusieurs algorithmes que je voudrais comparer. C'est pour cela que je dois mesurer le temps cpu. La commande time de Linux donne le temps pour l'initialisation et la résolution, ce qui n'est pas adapté dans mon cas. Lire le temps système n'est pas bon non plus sur une machine multitâche, car on ne sait jamais combien de temps le programme à vraiment nécessité...  
 
merci tout de même de votre aide et bonne journée
 

Reply

Marsh Posté le 11-12-2002 à 09:36:40    

Ben je ne vois que le profileur dans ce cas.
 
Dans le principe, ce n'est pas compliqué : tu lances ton programme sous le contrôle du profileur, comme si c'était un débogueur, sauf que tu ne l'interromps jamais. Et lorsque le programme se termine, le profileur te donne le temps passé et le nombre d'exécutions de chcune des lignes de ton programme (plus des informations détaillées sur qui a appelé qui, etc).
 
Il y a un profileur fourni en standard avec le JDK, mais ses résultats sont assez mal aisés à lire, car ils sont présentés sous la forme d'un banal fichier texte. Il y a aussi des logiciels beaucoup plus intuitifs, mais qui sont évidemment des logiciels commerciaux, donc payants (exemple : j'aime bien OptimizeIt, aujourd'hui distribué par Borland).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed