Temps d'exécution en millisecondes (linux/windows) + multithreads

Temps d'exécution en millisecondes (linux/windows) + multithreads - C++ - Programmation

Marsh Posté le 13-04-2011 à 03:35:28    

Bonjour à tous.
 
La question a été maintes fois posée, mais je n'ai pas trouvé de réponse qui me convienne.
 
Je cherche à récupérer le temps d'exécution "réel" d'un programme parallélisé à la milliseconde près  (le temps "vécu par l'utilisateur", pas la sommes des temps des thread indépendants) dans un programme en C++ (l'équivalent d'un time(NULL) puis difftime, mais à la milliseconde). Je cherche à le faire pour Windows et Linux (si la solution n'est pas portable, j'utiliserai des #ifdef) et je ne peux pas utiliser de bibliothèque externe (genre boost).  
 
Quelle est la solution la plus simple à ce problème ?
 
Mille merci par avance à celui qui me donnera la réponse car cela fait des lustres que je cherche la solution  :jap:

Reply

Marsh Posté le 13-04-2011 à 03:35:28   

Reply

Marsh Posté le 13-04-2011 à 03:44:36    

Dit comme ça j'aurais été tenté de faire un gettimeofday au début du programme et à la fin du programme, et de soustraire les deux valeurs pour obtenir un truc qui théoriquement devrait être précis à la microseconde [:transparency]
 
Je sais pas s'il existe une meilleure méthode


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
Reply

Marsh Posté le 13-04-2011 à 07:41:53    

mieux vaut une bonne vieille monotonic clock:
 
http://linux.die.net/man/3/clock_gettime

Reply

Marsh Posté le 13-04-2011 à 09:31:27    

Sous Windows, tu as également la fonction QueryPerformanceCounter.

Reply

Marsh Posté le 13-04-2011 à 11:45:40    

Merci !
 
Pour Windows, j'ai trouvé cet exemple très clair que tu donnais Joel F (sauf si QueryPerformanceCounter n'est pas OK vis à vis de la parallélisation) : http://forum.hardware.fr/hfr/Progr [...] 3723_1.htm
 
Mais 2 questions :
1) Ces solutions sont elles bien ok vis à vis de la parallélisation ?
2) Pour linux, j'ai du mal à comprendre car certains sites évoquent struct timespec avec tv_nsec (nanosecondes) et d'autres avec tv_usec (microsecondes). Du coup quelle est la bonne version ? (et tv_nsec c'est en nanosecondes, en dizaine ou en centaine de nanosecondes) ? De plus monotonic clock ça marche sur tous les systèmes linux ?


Message édité par I_have_a_big_problem le 13-04-2011 à 11:47:14
Reply

Sujets relatifs:

Leave a Replay

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