32-битные часы Linux () переполнение

Мне нужно измерить в C ++ в Linux (и других Unix-подобных системах) время процессора (а не настенных часов), затрачиваемое на длительные вычисления, поэтому я использую clock (). Проблема: в 32-битных системах это происходит примерно через 2000 или 4000 секунд.

Какой рекомендуемый обходной путь для этого?


person rwallace    schedule 08.03.2009    source источник


Ответы (4)


Вы хотите использовать getrusage, который заполняет следующую структуру:

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

Для завершения struct timeval:

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

Как всегда, за подробностями обращайтесь к странице руководства (man getrusage)

person Johannes Schaub - litb    schedule 08.03.2009

Вам нужна точность, обеспечиваемая clock()? Если нет, вы можете использовать time() дважды и учесть разницу:

time_t start, end;
double diff;

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

РЕДАКТИРОВАТЬ: time() измеряет реальное время (не время процессора), как указано в его комментарии, но также и clock(). Если вы хотите измерить время процессора, вы должны следовать совету litb и использовать getrusage().

person Can Berk Güder    schedule 08.03.2009
comment
Разве время не измеряет время настенных часов? то есть не будет меньше, если ваша программа будет использовать меньше ЦП. Он измеряет реальные секунды с 1970 года. - person Johannes Schaub - litb; 08.03.2009
comment
ну, кажется, никто не поправит вас, я сделаю еще раз: часы - это не настенные часы. он возвращает приблизительное время процессора, используемое программой. - person Johannes Schaub - litb; 09.03.2009

Другой возможный метод - дважды использовать gettimeofday (), поскольку он возвращает точность в миллисекундах.

person James Fisher    schedule 08.03.2009

Получать время на повторяющейся основе, а также увеличивать переменную множителя int каждый раз, когда она переходит?

person Dave Swersky    schedule 08.03.2009