Le calcul de la Fonction de temps en nanosecondes dans le code C
J'ai besoin de savoir comment puis-je calculer le temps d'une fonction dans le code C, en nanosecondes.
J'ai essayé de répéter la fonction jusqu'à ce que consomment quelques microsecondes. Existe-il d'autres fonctions dans time.h
qui peut être utilisé pour calculer le temps en nanosecondes?
- Une précision à la nanoseconde est, au mieux, très dépendants de la plateforme. Ce que la plate - forme Windows/Linux/quelque chose d'intégré?
- Non, et la mesure d'un seul appel de fonction n'est pas très utile de toute façon. Vous pouvez utiliser l'horloge() si.
- Si vous utilisez linux, Linux n'est pas en temps réel de la plateforme. et son programmateur échelle est exprimée en millisecondes.
- Essayez de faire un profilage sur le programme pour obtenir un temps relatif de chaque fonction.
- C11 devient disponible
timespec_get
ferai: stackoverflow.com/a/36095407/895245 la version linux de cette question: stackoverflow.com/questions/16275444/...
Vous devez vous connecter pour publier un commentaire.
Vous n'allez jamais à obtenir l'ordre de la nanoseconde précision. Pensez à ce que vous demandez: sur un PROCESSEUR cadencé à 1 GHz 1 nanoseconde est un cycle d'horloge. Peu importe ce que vous essayez d'appeler, vous n'obtiendrez jamais ce genre de précision, vous êtes mieux coller à la microseconde. Une question similaire, avec de nombreux exemples est ici: C++ Multi-Plateforme Timer Haute Résolution.
Pour c: sous windows, vous souhaitez utiliser le QueryPerformanceCounter. Et ici, c'est plus sur QPC. Ici est une question connexe sur la façon d'utiliser QueryPerformanceCounter.
Indépendamment de la façon dont vous vous approchez de cette ou ce type de système/système d'exploitation que vous utilisez, vous obtenez un approximatif de répondre au mieux, avec des variations considérables en raison de la nature du problème.
Deuxièmement, vous avez besoin d'un système qui prend en charge ce type d'appel. Il est assez facile si vous êtes en utilisant QNX Neutrino:
http://www.qnx.com/developers/docs/6.3.0SP3/neutrino/lib_ref/c/clock_gettime.html
La
clock
fonction en C standard n'est pas utile pour cela. Il a généralement horrible résolution et c'est incompatible (entre les plates-formes) si des mesures écoulé mur du temps ou le temps cpu consommé. Vous devez utiliser la POSIX standardclock_gettime
fonction (qui a une résolution d'une et vous permet de spécifier l'horloge que vous voulez mesurer contre) et l'émuler avec quoi que ce soit spécifique à un système d'horloge opérations sont disponibles sur les plates-formes qui n'ont pas la fonction POSIX.Appeler la fonction suffisamment de fois que vous obtenez le temps total en secondes, et l'utilisation de toute méthode de mesure (même du C de l'horloge()). Mesure en micro/nano secondes est intrinsèquement trop imprécis.
Pour l'analyse comparative, vous voulez QueryPerformanceCounter. C'est le meilleur chrono disponibles sur Windows. Voir: Comment utiliser QueryPerformanceCounter? Cependant, l'utilisation de cette fonction pour mesurer (par exemple) un seul appel de fonction sera toujours intrinsèquement très imprécise; je pense que vous avez besoin de temps de l'ordre d'une seconde total pour obtenir un bon rapport signal-à-bruit pour vos mesures. Prendre des mesures multiples de quelque durée que vous souhaitez et de comparer leur valeur à leur écart-type, afin de vous assurer de mesure suffisamment précise.
Multimédia Minuteries sont probablement le meilleur de l'horloge (noter la différence entre l'horloge et chronomètre: on mesure le temps absolu, les autres intervalles de temps seulement) disponible sur Windows. Vous devriez être en mesure d'obtenir près de milliseconde de résolution et de précision avec timeGetTime().