GNU/Linux >> Linux Esercitazione >  >> Linux

Come creare un timer ad alta risoluzione in Linux per misurare le prestazioni del programma?

Dai un'occhiata a clock_gettime , che è un'interfaccia POSIX per timer ad alta risoluzione.

Se, dopo aver letto la manpage, ti chiedi quale sia la differenza tra CLOCK_REALTIME e CLOCK_MONOTONIC , vedi Differenza tra CLOCK_REALTIME e CLOCK_MONOTONIC?

Vedere la pagina seguente per un esempio completo: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;
}

Per riassumere le informazioni presentate finora, queste sono le due funzioni richieste per le applicazioni tipiche.

#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;
}

Ecco un esempio di come usarli per calcolare il tempo necessario per calcolare la varianza di un elenco di input.

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. Come misurare le prestazioni sul tuo server VPS Linux

  2. Come creare uno script di un comando Linux

  3. Come creare un pacchetto RPM Linux

  4. Come creare uno scambio in Linux

  5. Come creare thread in Linux (con un programma di esempio C)

Come creare collegamenti su desktop Linux

Come migliorare le prestazioni della batteria del laptop in Linux

Come creare un montaggio da immagini in Linux

Come creare alias SSH in Linux

Come creare un alias in Linux

Come creare una passphrase chiave SSH in Linux