Pregunta

Necesito medir, en C ++ en Linux (y en otros sistemas similares a Unix), el tiempo de CPU (no del reloj de pared) que toma un cálculo largo, así que estoy usando clock (). Problema: en sistemas de 32 bits, esto termina después de aproximadamente 2000 o 4000 segundos.

¿Cuál es la solución recomendada para esto?

¿Fue útil?

Solución

Desea usar getrusage que llena la siguiente estructura:

struct rusage {
    struct timeval ru_utime; /* user time used */
    struct timeval ru_stime; /* system time used */
    ...
};

Para completar, struct timeval :

struct timeval {
    time_t      tv_sec;     /* seconds */
    suseconds_t tv_usec;    /* microseconds */
};

Como siempre, consulte la página de manual para más detalles ( man getrusage )

Otros consejos

¿Necesita la precisión proporcionada por clock () ? Si no, puede usar time () dos veces y tomar la diferencia:

time_t start, end;
double diff;

time(&start);
// Do your stuff...
time(&end);
diff = difftime(end, start);

EDITAR: time () mide el tiempo real (no el tiempo de CPU) como litb señaló en su comentario, pero también clock () . Si desea medir el tiempo de CPU, debe seguir los consejos de litb y usar getrusage () .

Otro método posible es usar gettimeofday () dos veces, ya que devuelve la precisión de ms.

Obtenga el tiempo de forma recurrente y también incremente una variable multiplicadora int cada vez que se desplace.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top