GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo crear un temporizador de alta resolución en Linux para medir el rendimiento del programa?

Echa un vistazo a clock_gettime , que es una interfaz POSIX para temporizadores de alta resolución.

Si, después de leer la página de manual, te preguntas cuál es la diferencia entre CLOCK_REALTIME y CLOCK_MONOTONIC , consulte ¿Diferencia entre CLOCK_REALTIME y CLOCK_MONOTONIC?

Consulte la siguiente página para ver un ejemplo 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;
}

Para resumir la información presentada hasta ahora, estas son las dos funciones requeridas para aplicaciones típicas.

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

Este es un ejemplo de cómo usarlos para medir el tiempo que se tarda en calcular la varianza de una lista de entradas.

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. Cómo medir el rendimiento en su servidor Linux VPS

  2. Cómo crear un script de un comando de Linux

  3. Cómo crear un intercambio en Linux

  4. Cómo crear un servicio Systemd en Linux

  5. Cómo crear un archivo de intercambio en Linux

Cómo crear accesos directos en el escritorio de Linux

Cómo mejorar el rendimiento de la batería de la computadora portátil en Linux

Cómo crear un montaje a partir de imágenes en Linux

Cómo crear un alias SSH en Linux

Cómo crear un alias en Linux

Cómo crear una frase de contraseña de clave SSH en Linux