GNU/Linux >> Tutoriels Linux >  >> Linux

Comment créer une minuterie haute résolution sous Linux pour mesurer les performances du programme ?

Découvrez clock_gettime , qui est une interface POSIX pour les temporisateurs haute résolution.

Si, après avoir lu la page de manuel, vous vous interrogez sur la différence entre CLOCK_REALTIME et CLOCK_MONOTONIC , voir Différence entre CLOCK_REALTIME et CLOCK_MONOTONIC ?

Voir la page suivante pour un exemple complet :http://www.guyrutenberg.com/2007/09/22/profiling-code-using-clock_gettime/

#include <iostream>
#include <time.h>
using namespace std;

timespec diff(timespec start, timespec end);

int main()
{
    timespec time1, time2;
    int temp;
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);
    for (int i = 0; i< 242000000; i++)
        temp+=temp;
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2);
    cout<<diff(time1,time2).tv_sec<<":"<<diff(time1,time2).tv_nsec<<endl;
    return 0;
}

timespec diff(timespec start, timespec end)
{
    timespec temp;
    if ((end.tv_nsec-start.tv_nsec)<0) {
        temp.tv_sec = end.tv_sec-start.tv_sec-1;
        temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
    } else {
        temp.tv_sec = end.tv_sec-start.tv_sec;
        temp.tv_nsec = end.tv_nsec-start.tv_nsec;
    }
    return temp;
}

Pour résumer les informations présentées jusqu'à présent, ce sont les deux fonctions requises pour les applications typiques.

#include <time.h>

// call this function to start a nanosecond-resolution timer
struct timespec timer_start(){
    struct timespec start_time;
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start_time);
    return start_time;
}

// call this function to end a timer, returning nanoseconds elapsed as a long
long timer_end(struct timespec start_time){
    struct timespec end_time;
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end_time);
    long diffInNanos = (end_time.tv_sec - start_time.tv_sec) * (long)1e9 + (end_time.tv_nsec - start_time.tv_nsec);
    return diffInNanos;
}

Voici un exemple de la façon de les utiliser pour chronométrer le temps qu'il faut pour calculer la variance d'une liste d'entrées.

struct timespec vartime = timer_start();  // begin a timer called 'vartime'
double variance = var(input, MAXLEN);  // perform the task we want to time
long time_elapsed_nanos = timer_end(vartime);
printf("Variance = %f, Time taken (nanoseconds): %ld\n", variance, time_elapsed_nanos);

Linux
  1. Comment mesurer les performances de votre serveur VPS Linux

  2. Comment créer un script d'une commande Linux

  3. Comment créer un swap sous Linux

  4. Comment créer un service Systemd sous Linux

  5. Comment créer un fichier d'échange sous Linux

Comment créer des raccourcis sur le bureau Linux

Comment améliorer les performances de la batterie d'un ordinateur portable sous Linux

Comment créer un montage à partir d'images sous Linux

Comment créer un alias SSH sous Linux

Comment créer un alias sous Linux

Comment créer une phrase de passe de clé SSH sous Linux