Comment puis-je mesurer le temps CPU et de la paroi de l'horloge temps sur Linux/Windows?

Je veux dire: comment puis-je mesurer mon temps CPU passé sur l'exécution de la fonction et de la paroi de l'horloge temps qu'il faut pour exécuter ma fonction? (Im intéressé par Linux/Windows et les versions x86 et x86_64). Voyez ce que je veux faire (Im en utilisant C++ ici, mais je préfère C):

int startcputime, endcputime, wcts, wcte;

startcputime = cputime();
function(args);
endcputime = cputime();

std::cout << "it took " << endcputime - startcputime << " s of CPU to execute this\n";

wcts = wallclocktime();
function(args);
wcte = wallclocktime();

std::cout << "it took " << wcte - wcts << " s of real time to execute this\n";

Une autre question importante: est ce type de mesure du temps d'architecture indépendant ou pas?

  • Je me rends compte que vous voulez le faire par programmation dans le code, mais voilà quand même: superuser.com/questions/228056/...
  • merci:) je sais time sous linux, mais comme vous l'avez écrit, j'ai besoin de le faire directement dans le code C
  • Sur Windows, clock() donne de la paroi du temps et de GetProcessTimes donne de temps processeur. Sur Linux gettimeofday() donne de la paroi du temps, et clock() donne de temps processeur.
  • hein! donc c'est un peu compliqué!!! Je vais essayer d'écrire un peu de code et le coller résultats par la suite (pour les deux win/lin). Mais une autre réponse est la bienvenue! 🙂
  • Si vous pouvez utiliser C++, boost::auto_cpu_timer (boost.org/libs/timer) est-ce que vous avez besoin. Votre code devient boost::auto_cpu_timer t; function(args); (ouais pas de cout, de rien et c'est ça, vous obtenez mur et de l'uc — j'aime cette fonctionnalité).
  • FWIW, OpenMP a un omp_get_wtime() minuterie que les mesures de la paroi de temps et est assez haute résolution.
  • En fait, j'ai deux wallclock et cpuclocks encapsulé dans une API pour l'un de mes programmes (Windows + Linux). Si personne ne donne une réponse complète avant que je rentre du travail, je vais le poster ici.
  • Une fois que j'ai été confrontés à la difficulté de l'horloge() peut être facilement débordé. clock_t était un 4 octets entier signé. Sa valeur maximale est de 2^31=2.147e9. CLOCKS_PER_SEC était de 1000 dans Windows et 1000000 de Linux. Ainsi, la durée maximale était de 24,8 jours de Windows et de 35,8 min dans Linux.

InformationsquelleAutor yak | 2013-07-02