rapide le temps écoulé sur linux
Je suis à la recherche d'un moyen rapide pour obtenir des informations sur le temps écoulé entre deux appels de fonction en C.
J'ai considéré l'utilisation de jiffies, mais ils ne sont pas disponibles dans l'espace utilisateur. Donc, dois-je utiliser getimeofday() ou est-il un meilleur moyen pour ce faire.
Je suis seulement intéressé par le elasped temps entre deux appels, d'utiliser un outil de benchmark.
OriginalL'auteur | 2009-09-04
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à
clock_gettime
, qui donne accès à la haute résolution des chronomètres.OriginalL'auteur
J'avais eu le temps processeur via
clock()
detime.h
. Pour obtenir les valeurs utiles, de les convertir en millisecondes parCLOCKS_PER_SEC
:après avoir testé l'horloge() le temps de remettre le système en+du temps à l'utilisateur, mais pas le temps réel. utilisation gettimeofday au lieu
dépend de votre cas d'utilisation, - un outil d'analyse comparative, le temps du processeur est probablement une meilleure métrique que wallclock temps
Cette réponse est incorrecte sous *nix. Ne fonctionne que pour Windows. Martin réponse est correcte. Comme d'autres l'ont dit
gettimeofday()
fonctionne aussi, mais elle est sujette aux erreurs.OriginalL'auteur
Oui, gettimeofday() serait suffisante si vous voulez trouver le temps écoulé. Si vous avez besoin de trouver le temps de calcul, vous pouvez utiliser l'horloge(). Dans de nombreux cas, à la fois de l'approche donnerait des résultats similaires (à moins qu'il y est un jour de repos ou une sorte d'attente dans le code). Un exemple de l'horloge() peut être trouvé ici:
http://www.cs.utah.edu/dept/old/texinfo/glibc-manual-0.02/library_19.html
OriginalL'auteur
Si vous êtes sur un système x86/x64 l'architecture, et vous êtes en cours d'exécution sur un PROCESSEUR unique, vous pourriez envisager de la lecture du compteur d'horodatage sur le CPU pour obtenir un cycle de comptage. Wikipédia a plus d'informations. Notez que cette approche est moins utile si votre application est en cours d'exécution sur plusieurs Processeurs, chaque PROCESSEUR a son propre TSC. Méfiez-vous également de la fréquence de mise à l'échelle si vous décidez que vous voulez convertir cycles -> unités de temps.
OriginalL'auteur
Si votre noyau prend en charge
gettimeofday()
comme un vsyscall virtuel (appel système), puis en utilisant ce sera plus rapide que d'appeler un système régulier de l'appeler commeclock()
. Voir Andrea Arcangeli présentation pour des informations sur la façon vsyscalls travail.OriginalL'auteur
Peu plus tard, cependant, le temps uility disponible sur toutes les versions de linux/unix peut être un poids plus léger moyen de réaliser ce que vous voulez. Voici 2 exemples
OriginalL'auteur
La suivante fonctionne pour moi sur CentOS 6:
...bien que cela ne nécessite
librt
:OriginalL'auteur