LINUX.ORG.RU

Получить время с точностью до мс.


0

0

Скажите, есть в линуксе ф-ия для работы с временем выдающая результат в милисекундах, стоит задача замерить время работы участка кода. Пользовался gettimeofday(), но не нравится работа с временной структурой. Хотелось бы получить простое решение, без всяких подсчетов работы системных часов, циклов процессора и т.д.


clock() - посмотри, в юнихе у него точность до милисекунд. Кстати, точнее всего - считать тики процессора и это в коде две строчки , куда уж проще.

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

>На процессорах, которые позволяют считать свои тики и не изменяют частоты работы.

А также если нить не перемещается на другой процессор.

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

Это всё понятно. Но тики позволяют мерять все х86 - а с вероятностьюю 99% процентов автор использует его, а во вторых если меняется частота процессора или треды меняются - не спасёт тем более замер времени.

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

> Это всё понятно. Но тики позволяют мерять все х86 - а с вероятностьюю 99% процентов автор использует его, а во вторых если меняется частота процессора или треды меняются - не спасёт тем более замер времени.

Я бы сказал все современные x86. IIRC, инструкция RDTSC появилась начиная с Pentium Pro.

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

> >На процессорах, которые позволяют считать свои тики и не изменяют частоты работы.

А также если нить не перемещается на другой процессор.


Linux вроде бы не перемещает нить между процессорами (а ТС описал задачу именно под Linux).

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

> Linux вроде бы не перемещает нить между процессорами

Ещё как перемещает. Против этого лома есть приём clock_gettime с параметром CLOCK_MONOTONIC: получаем с точностью до наносекунд и гарантированно монотонные часы, не зависящие от переползания нити на другой проц и даже смены системных часов.

const86 ★★★★★
()

Самым простым и удобным решением, на мой взгляд, будет использование -pg и gprof.

twosev ★★
()

Не понимаю. Почему gettimeofday плох?

unsigned GetTickCount()
{
    struct timeval tv;
    gettimeofday( &tv, NULL );
    return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}

Wine похоже думает так же как и я:

NTSTATUS WINAPI NtQuerySystemTime( PLARGE_INTEGER Time )
{
    struct timeval now;

    gettimeofday( &now, 0 );
    Time->QuadPart = now.tv_sec * (ULONGLONG)TICKSPERSEC + TICKS_1601_TO_1970;
    Time->QuadPart += now.tv_usec * 10;
    return STATUS_SUCCESS;
}

ULONG WINAPI NtGetTickCount(void)
{
    LARGE_INTEGER now;

    NtQuerySystemTime( &now );
    return (now.QuadPart - server_start_time) / 10000;
}
kde4-hater
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.