я звоню Argon 2 — Функция интенсивного хеширования памяти в Qt и измерения ее времени работы:
...
QTime start = QTime::currentTime();
// call hashing function
QTime finish = QTime::currentTime();
time = start.msecsTo(finish) / 1000.0;
...
В тестовом примере библиотеки argon2 время измеряется другим способом:
...
clock_t start = clock();
// call hashing function
clock_t finish = clock();
time = ((double)finish - start) / CLOCKS_PER_SEC;
...
Я вызываю функцию именно так, как они вызывают в своем тестовом примере. Но я получаю вдвое большее число (в два раза медленнее). Зачем? Как измерить время выполнения функции в Qt? Какие часы () на самом деле измеряет?
окр: virtualBox, Ubuntu14.04 64bit, Qt5.2.1, Qt Creator 3.0.1.
Вы также можете попробовать использовать QElapsedTimer:
QElapsedTimer timer;
timer.start();
slowOperation1();
qDebug() << "The slow operation took" << timer.elapsed() << "milliseconds";
qDebug() << "The slow operation took" << timer.nsecsElapsed() << "nanoseconds";
Функция clock () не точна для измерения времени, потраченного на функции. Он просто возвращает количество тактов для всей программы, в то время как он находится на процессоре прямо сейчас, он не учитывает блокировку операций ввода-вывода или ожидания. Он просто подсчитывает такты, которые ваша программа выполняет на процессоре (обработка). Если вы поместите sleep в ваш код, вы потеряете процессор, и это время не учитывается с помощью clock ().
Вы должны использовать time () или gettimeofday () или более точную инструкцию по сборке rdtsc.
Посмотрите эти вопросы:
Почему CLOCKS_PER_SEC не фактическое количество часов в секунду?
В источниках Qt вы увидите, что Qt использовал gettimeofday для реализации QTime :: currentTime () под Unix
https://github.com/radekp/qt/blob/master/src/corelib/tools/qdatetime.cpp : линия 1854