GNU/Linux >> Znalost Linux >  >> Linux

Jak vytvořit časovač s vysokým rozlišením v Linuxu pro měření výkonu programu?

Podívejte se na clock_gettime , což je rozhraní POSIX pro časovače s vysokým rozlišením.

Pokud jste po přečtení manuálové stránky přemýšleli o rozdílu mezi CLOCK_REALTIME a CLOCK_MONOTONIC , viz Rozdíl mezi CLOCK_REALTIME a CLOCK_MONOTONIC?

Úplný příklad naleznete na následující stránce: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;
}

Abychom shrnuli dosud prezentované informace, jedná se o dvě funkce požadované pro typické aplikace.

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

Zde je příklad, jak je použít při načasování, jak dlouho trvá výpočet rozptylu seznamu vstupů.

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. Jak vytvořit swap v Linuxu

  2. Jak vytvořit službu Systemd v Linuxu

  3. Jak vytvořit odkládací soubor v Linuxu

  1. Jak měřit výkon na vašem Linux VPS serveru

  2. Jak vytvořit soubory Linux Proc v programu C pomocí LKM

  3. Jak vytvářet vlákna v Linuxu (pomocí ukázkového programu C)

  1. Vytvořte časovač v systému Linux

  2. Jak vytvořit skript příkazu Linux

  3. Jak vytvořit balíček RPM pro Linux