LINUX.ORG.RU

Замеры больших интервалов времени в С++ - некорректная работа omp_get_wtime?

 ,


0

1

С новым годом!

Я как то всегда делал так

double t0 = omp_get_wtime();
...
double runtime = omp_get_wtime()-t0;
это прекрасно работало, пока дело не дошло до больших (часы или десятки часов) интервалов - результаты получаются завышенными на порядки.

Хочется мерять любые интервалы с точностью до сотых-тысячных долей секунды. Насколько я понял clock из time.h не совсем оно - во всяком случае у меня он некорректно работает если есть sleep или многопоточность (значения получаются сильно занижены).

UPD. Тьфу ты е ж мае ж... у меня просто были кривые руки;-( Все работает.

★★★★★

Последнее исправление: AntonI (всего исправлений: 2)

Хочется мерять любые интервалы с точностью до сотых-тысячных долей секунды

Если мне не изменяет память, то чем больше значение в double(да и вообще в любом числе с плавающей запятой), то тем меньше точность. Если туда пишутся наносекунды(в man я конечно же смотреть не буду), то немудрено что после пары-тройки часов там образуется охрененно большое число

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

omp_get_wtime возвращает секунды (в double), double держит 15 знаков, это 10^11 часов. А у меня первые часы превращаются в 150 часов... ошибка округления такого дать не может ну никак.

Я больше грешу на вызовы fork()/waitpid() - на clock() в родительском процессе они влияют, может на больших интервалах и omp_get_wtime ломают. Может их комбинация с распараллеливанием на openMP че то портит... по порядку похоже на то, что реальный интервал умножили на число потоков дочернего процесса и поделили на 2...4.

В дочернем процессе, который с-но после форка считает, omp_get_wtime дает вполне разумный результат.

AntonI ★★★★★
() автор топика
Ответ на: комментарий от legolegs

Это не проблема, меня замер в мастер-треде вполне устроит. Проблемы как ни странно возникают в коде, в котором всего один тред (но есть форк и waitpid). Вот этот waitpid замеряется похоже некорректно.

AntonI ★★★★★
() автор топика

а чем, например, clock_gettime не устраивает? точность нормальная, можно юзать монотонный таймер и всё такое.

Iron_Bug ★★★★★
()
Ответ на: комментарий от RazrFalcon

См. QElapsedTimer.

Где смотреть? :-) На помойке? :-) Лол :-)

anonymous
()
Ответ на: комментарий от Iron_Bug

Наверное тем, что я про нее не знал;-) Спасибо.

Тему пока сносить не буду, может кто еще чего разумного предложит.

AntonI ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.