Я пытаюсь сделать свою программу самосинхронной и знаю два метода
1) с помощью getrusage
truct rusage startu; struct rusage endu;
getrusage(RUSAGE_SELF, &startu);
//Do computation here
getrusage(RUSAGE_SELF, &endu);
double start_sec = start.ru_utime.tv_sec + startu.ru_utime.tv_usec/1000000.0;
double end_sec = endu.ru_utime.tv_sec + endu.ru_utime.tv_usec/1000000.0;
double duration = end_sec - start_sec;
Это выбирает пользовательское время программного сегмента.
2) с помощью clock (), который получает время выполнения процессора
double start_sec = (double)clock()/CLOCKS_PER_SEC;
//Do computation here
double end_sec = (double)clock()/CLOCKS_PER_SEC;
double duration = end_sec - start_sec;
Это выбирает в реальном времени программный сегмент.
Тем не менее, я получаю действительно много времени для обоих методов. Время пользователя также больше, чем без этих времен. Системное время иногда даже удваивает пользовательское время.
Например, я выполняю задачу Traveling Salesman, для ввода, который обычно выполняется около 3 секунд как для пользователя, так и для реального времени, эти два тайминга заставляют пользовательское время превышать 5 секунд, а реальное время — более 15 секунд, что означает sys. время около 10 секунд.
Я надеюсь узнать, есть ли способы улучшения или другие библиотеки, которые способны сократить время системы и время пользователя, если это возможно. Если мне нужно использовать другие библиотеки, мне нужны библиотеки как для времени пользователя, так и для времени реального времени.
Спасибо за любой совет!
Предлагаю внимательно прочитать Время (7) справочную страницу и рассмотреть также clock_gettime (2) Системный вызов.
Других решений пока нет …