C Time.h funções erráticas no Precise 12.04

1

Estou executando o Ubuntu 12.04 e usando o compilador gcc para compilar meus programas C / C ++. Eu quero benchmark de uma função. AFAIK, existem duas funções padrão para calcular o tempo em sistemas POSIX e ambos mostram resultados erráticos no Ubuntu:

gettimeofday clock_gettime

Aqui está o meu código:

int main()
{
    float msec=0;
    //struct timespec start,end;
    struct timeval start,end;

    //clock_gettime(CLOCK_MONOTONIC_RAW,&start);
    //clock_gettime(CLOCK_REALTIME,&start);
    gettimeofday(&start,NULL);

        get_height(); //function i want to benchmark

/*  usleep(1000000);*/

    //clock_gettime(CLOCK_REALTIME,&end);
    gettimeofday(&end,NULL);

    //msec = (end.tv_sec-start.tv_sec)*1000 + (end.tv_nsec-start.tv_nsec)/(float)1000000;
    msec = (end.tv_sec-start.tv_sec)*1000 + (end.tv_usec-start.tv_usec)/(float)1000;
    printf("%0.2f ms.\n",msec); //41-44

}

O problema é que o milissegundo exibido está mostrando resultados erráticos / diferentes toda vez que o programa é executado. Algumas leituras de amostra são: 38,16 ms. 42,72 ms. 35,70 ms. 45,13 ms.

No entanto, quando eu testo com a função usleep (), o resultado mostra 1000 ms. devidamente. Alguma idéia de qual biblioteca / função devo usar para cronometrar minhas funções com precisão?

EDITAR: Isso é para esclarecer ainda mais que as funções clock_gettime mencionadas são apenas imprecisas no Ubuntu 12.04. Eu testei em outras máquinas, onde mostrou resultados precisos. Mesmo no Windows, as funções equivalentes de query_performance_counter () mostraram resultados precisos.

    
por Prahlad Yeri 05.04.2013 / 22:22

0 respostas