2010-04-29 17 views
0

Je veux savoir si je peux calculer le temps d'exécution pour chaque fil. J'implémente un programme multithread en C++ en utilisant pthread. Comme nous le savons, chaque thread sera en concurrence avec le CPU. Puis-je utiliser la fonction clock() pour calculer le nombre réel d'horloges CPU que chaque thread consomme?temps d'exécution du fil C++

mon programme ressemble:

Class Thread() 
{ 
Start(); 
Run(); 
Computing(); 
}; 

Start() est de lancer plusieurs threads. Ensuite, chaque thread exécutera la fonction informatique pour faire quelque chose. Ma question est comment je peux calculer le temps de fonctionnement de chaque fil pour la fonction de calcul

+0

Avez-vous besoin de faire cette mesure tout le temps dans le programme et d'utiliser le nombre mesuré? Ou est-ce à des fins de débogage? Si c'est pour le débogage, de nombreux outils existent pour vous aider. Dites-nous quelle plate-forme vous codez et quel IDE utiliser et nous pourrions vous aider :-) – Fuzz

+0

Droit. Si la raison pour laquelle vous demandez est que vous aimeriez savoir quoi changer afin de minimiser le temps d'exécution global, alors il y a de bonnes réponses à trouver sur SO. –

Répondre

2

Non, vous ne pouvez pas utiliser clock. Processeur pourrait passer à un autre thread entre Start et Computing appels de sorte que vous calculerez le temps de plusieurs threads. Vous devez utiliser le compteur de tick local pour un thread.

+0

Voulez-vous dire horloge inclura le temps de fonctionnement pour tous les threads? Si oui, ce que je veux, c'est utiliser un compteur de tick local pour chaque thread. Pourriez-vous donner plus d'explications pour le compteur de tique? – chnet

+0

Oui à propos de 'clock'. Mais les threads locaux sont une fonctionnalité spécifique à la plate-forme, quelle plateforme utilisez-vous? –

+0

i686-apple-darwin9-g ++ - 4.0.1 – chnet

1

Quelle plate-forme utilisez-vous? Si vous utilisez Linux et que vous êtes sur le noyau> 2.6.26 vous pouvez utiliser le drapeau RUSAGE_THREAD-getrusage:

struct rusage usage 
getrusage(RUSAGE_THREAD, &usage); 

au sein struct rusage, vous trouverez ru_utime et ru_stime qui suit le temps de temps de l'utilisateur et le système respectivement. Appelez cela une fois au début et une fois après et vous pouvez obtenir le delta.

1

selon clock_gettime(3):

versions récentes de GNU libc et du noyau Linux gèrent les horloges suivantes: CLOCK_REALTIME d'horloge en temps réel à l'échelle du système. La définition de cette horloge nécessite des privilèges appropriés.

CLOCK_MONOTONIC Horloge qui ne peut pas être réglée et représente un temps monotone depuis un point de départ non spécifié.

CLOCK_PROCESS_CPUTIME_ID Temporisateur haute résolution par processus de la CPU.

CLOCK_THREAD_CPUTIME_ID Horloge temps processeur spécifique au fil.

de sorte que vous pouvez avoir CLOCK_THREAD_CPUTIME_ID essayer.