Pergunta

O C clock() função apenas me retorna um zero.Tentei usar tipos diferentes, sem melhora...Esta é uma boa maneira de medir o tempo com boa precisão?

#include <time.h>
#include <stdio.h>

int main()
{
    clock_t start, end;
    double cpu_time_used;

    char s[32];

    start = clock();

    printf("\nSleeping 3 seconds...\n\n");
    sleep(3);

    end = clock();

    cpu_time_used = ((double)(end - start)) / ((double)CLOCKS_PER_SEC);

    printf("start = %.20f\nend   = %.20f\n", start, end);
    printf("delta = %.20f\n", ((double) (end - start)));
    printf("cpu_time_used  = %.15f\n", cpu_time_used);
    printf("CLOCKS_PER_SEC = %i\n\n", CLOCKS_PER_SEC);

    return 0;
}
Sleeping 3 seconds...

start = 0.00000000000000000000
end   = 0.00000000000000000000
delta = 0.00000000000000000000
cpu_time_used  = 0.000000000000000
CLOCKS_PER_SEC = 1000000

Plataforma:Intel 32 bits, RedHat Linux, gcc 3.4.6

Foi útil?

Solução

clock() relata o tempo da CPU usado. sleep() Não usa tempo de CPU. Portanto, seu resultado provavelmente está exatamente correto, apenas o que você deseja.

Outras dicas

man clock. Não está retornando o que você acha que é. Também man gettimeofday - É mais provável que você queira.

Clock_t é do tipo inteiro. Você não pode imprimi -lo com %f. Ver Resposta de Fred Pelo por que a diferença é 0.

 printf("start = %.20f\nend   = %.20f\n", start, end);

deveria estar:

 printf("start = %d\nend   = %d\n", start, end);

Chamando sleep() não vai consumir nenhum tempo de CPU.Você deveria ver um pequeno diferença, no entanto.Corrigi seu bug de incompatibilidade de tipo printf nesta linha:

printf("start = %.20f\nend   = %.20f\n", start, end);

E deu resultados razoáveis ​​na minha máquina:

start = 1419
end   = 1485
delta = 66
cpu_time_used  = 0.000066000000000
CLOCKS_PER_SEC = 1000000

Você pode tentar gettimeofday() para obter o tempo real gasto na execução do seu programa.

Você provavelmente precisa

double get_wall_time(){ struct timeval time; if (gettimeofday(&time,NULL)){ return 0; } return (double)time.tv_sec + (double)time.tv_usec * .000001; } e usar algo como

double wall0 = get_wall_time(); double cpu0 = get_cpu_time(); for(long int i = 0; i<=10000000;i++){ func1(); } double wall1 = get_wall_time(); double cpu1 = get_cpu_time(); cout << "Wall Time = " << wall1 - wall0 << endl; cout << "CPU Time = " << cpu1 - cpu0 << endl;

ao invés de clock()

Como apenas o relógio e apenas conta o tempo gasto na CPU apenas com base em contadores de desempenho. Mas você pode obter resultado usando a função acima. Apenas para verificar seu aplicativo, execute -o com o comando de tempo

Curti time ./a.out

saída do comando de tempo:

real 0m5.987s user 0m0.674s sys 0m0.134s

e saída da função personalizadaWall Time = 5.98505 CPU Time = 0.8

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top