Pergunta

Eu olhei através tópicos antigos, mas não conseguiu encontrar a resposta para a minha pergunta:

Como posso tempo o corpo da minha função dentro de um programa C?

Foi útil?

Solução

Um método simples é usar a função 'relógio':

#include <time.h>

clock_t start, end;
double cpu_time_used;

start = clock();
... /* Do whatever you want to time */
end = clock();
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;

Ou se você estiver em linux você pode usar o comando 'tempo' ao tempo quanto tempo leva seu aplicativo para executar; isso não permitem que uma seção de código específico, porém, e inclui o tempo necessário para iniciar o processo etc.

time ./myapp

Edit: Este é muito mais uma abordagem básica 'hack-in-a-quick-temporizador'. Para verdadeiro desempenho de perfil você quer olhar para um profiler adequada, como sugerido por Larry Watanabe.

Outras dicas

Depende do seu compilador e OS. Em estações de trabalho Sun, eu costumava usar "prof" ou "gprof". Não é certamente uma ferramenta de perfil para o seu compilador, OS, e máquina - apenas google "yourOS perfil C yourcompiler" (substitua o nome do seu sistema operacional e seu compilador)

O método básico está usando a função de relógio (), que é onde nós tudo começou.

Ex:.


clock_t start = clock();
/* Your code */
printf("Time elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);

No entanto, quando você começar a aprender sobre sistemas operacionais, hardware, programadores, multi-threading, etc Você percebeu que o tempo de execução é algo muito subjetivo. Quando você quiser medir o desempenho (que não é necessariamente o tempo de execução médio), então você precisa de ferramentas mais robustas.

gprof é realmente fácil de usar C profiler, o que poderia ajudá-lo a entender melhor o conceito de desempenho.

time ./a.out

executar acima de um e de saída será:

real    0m0.017s
user    0m0.017s
sys 0m0.000s

real: fim total ao tempo final tomada pelo programa / comando

user:. Tempo gasto no modo usuário

sys: Tempo gasto no modo kernel

Não tenho certeza sobre nomes de funções específicas em C, mas uma prática comum é armazenar um timestamp microssegundo antes de o corpo começa, em seguida, pegue outra no final e subtrair.

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