Mesure du temps CPU d'une partie d'un programme - Java - Programmation
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! )
Marsh Posté le 09-12-2002 à 22:41:22
gfive a écrit : Bah, sous Linux, tu as l'utilitaire time, qui fait ça : |
euh le temps utilisateur et le temps système c'est pas ce qui est demandé
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 ?
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...
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....
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).
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
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).
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