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?

Foi útil?

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?

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