relógio Linux de 32 bits () estouro
Pergunta
Eu preciso para medir, em C ++ no Linux (e outros Unix-like sistemas) tempo, a CPU (não relógio de parede) tomado por um longo computação, por isso estou usando relógio (). Problema:. Em sistemas de 32 bits, este envolve em torno depois de cerca de 2000 ou 4000 segundos
Qual é a solução recomendada para isso?
Solução
Você quer usar getrusage
que enche o seguinte struct:
struct rusage {
struct timeval ru_utime; /* user time used */
struct timeval ru_stime; /* system time used */
...
};
Para a conclusão, struct timeval
:
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
Como sempre, consulte a página de manual para mais detalhes (man getrusage
)
Outras dicas
Você precisa a precisão fornecida pelo clock()
? Se não, você pode usar time()
duas vezes e tirar a diferença:
time_t start, end;
double diff;
time(&start);
// Do your stuff...
time(&end);
diff = difftime(end, start);
EDIT: medidas time()
o tempo real (não tempo de CPU) como litb apontou em seu comentário, mas o mesmo acontece clock()
. Se você quiser medir o tempo de CPU, você deve seguir o conselho e uso de litb getrusage()
.
Outro método possível é usar gettimeofday () duas vezes, uma vez que retorna precisão ms.
Obter o tempo em uma base recorrente e também incrementar uma variável multiplicador int cada vez que rola?