LINUX.ORG.RU

Как правильно измерить время выполнения кода

 ,


1

2

Хочу точно измерить время выполнения куска кода в программе на Qt5. Сейчас я делаю это так:

QTime t;
t.start();
//Тут, собственно, код.
qDebug() << t.elapsed();

Мне очень важна точность, а QTime дает миллисекунды. Есть другие способы измерения времени? Пусть даже прибитые гвоздями к линуксу - мне кроссплатформенность не важна.

★★★

std::chrono::high_resolution_clock

anonymous
()

man clock_gettime.

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

Хм... QElapsedTimer показывает то же значение что и QTime. Сейчас попробую сделать как писали выше, через std::chrono::high_resolution_clock.

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

std::chrono

Ну или clock_gettime, если по-сишному.

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

Собственно, high_resolution_clock выдаёт 0.0030002 сек., а кутэшный таймер округляет до 3 мсек. Думаю, моя задача решена. Спасибо всем, кто помог в этом треде.

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

Хм... QElapsedTimer показывает то же значение что и QTime

Потому-что надо использовать метод nsecsElapsed.

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

А еще можно использовать профайлер.

Нужно. Потому-что наколенные оптимизаторы могут оптимизировать и уродовать код, который вообще не является узким местом.

anonymous
()

Да ну, вы все прикалываетесь?

    QElapsedTimer time;
    time.start();
    QThread::sleep(1);
    qDebug() << time.nsecsElapsed(); // 999930725
Ещё точнее нужно?

CriDos
()

Огорчу тебя: погрешность вносимая шедулингом уже больше миллисекунд, так что ты всё делаешь не так. Выполняй свой код много раз так чтобы суммарное время измерялось десятками секунд, иначе получишь ерунду.

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

Вот про QElapsedTimer::nsecsElapsed() я не знал, спасибо. Действительно, лучший вариант. Удобнее, чем std::chrono.

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

Ты не понял: нужно мерить не одну итерацию, а тысячу.

mix_mix ★★★★★
()

Погрешность измерений делает желаемую тобой точность бессмысленной

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