2016-12-15 18 views
0

Я зову Argon 2 хэширования функции в Qt и измерение его выполнения:
Как измерить время работы функции в Qt?

... 
QTime start = QTime::currentTime(); 
// call hashing function 
QTime finish = QTime::currentTime(); 
time = start.msecsTo(finish)/1000.0; 
... 

В тест случае время Argon 2 библиотеки измеряется по-другому:

... 
clock_t start = clock(); 
// call hashing function 
clock_t finish = clock(); 
time = ((double)finish - start)/CLOCKS_PER_SEC; 
... 

Я звоню функцию точно так, как они звонят в свой тестовый пример. Но я получаю в два раза больше (в два раза медленнее). Зачем? Как измерить время работы функции в Qt? Какие часы() реально измеряет?

env: virtualBox, Ubuntu14.04 64bit, Qt5.2.1, Qt Creator 3.0.1.

+1

Возможный дубликат [C++/Qt - вычисление времени] (http://stackoverflow.com/questions/9943439/c-qt-computation-time) – PsiX

+0

Незнайка, что это "Argon 2" Дело в том, но он не выглядит слишком адекватным ... Правильный способ сделать это - использовать 'QElapsedTimer', который тривиально использовать и как можно точнее, учитывая вашу платформу. – dtech

+0

@PsiX отредактирован. Я хотел узнать причину разницы между временами – Bobur

ответ

5

Вы также можете попробовать использовать QElapsedTimer:

QElapsedTimer timer; 
timer.start(); 

slowOperation1(); 

qDebug() << "The slow operation took" << timer.elapsed() << "milliseconds"; 
qDebug() << "The slow operation took" << timer.nsecsElapsed() << "nanoseconds"; 

Documentation of QElapsed Timer

0

clock() не точен для измерения времени, затрачиваемого на функции. Он просто возвращает количество тиков для всей программы, в то время как на процессоре прямо сейчас, он не учитывает блокировку операций ввода-вывода или спальных сон. Он просто подсчитывает тики, которые ваша программа работает на процессоре (обработка). Если вы поместили сон в свой код, вы потеряете CPU, и на этот раз не рассчитывайте с помощью clock(). Вы должны использовать команду time() или gettimeofday() или более точную инструкцию сборки rdtsc.

LookAt эти вопросы:

clock() accuracy

Why is CLOCKS_PER_SEC not the actual number of clocks per second?

В источниках Qt, вы увидите Qt использует gettimeofday для реализации QTime :: CURRENTTIME() под Unix https://github.com/radekp/qt/blob/master/src/corelib/tools/qdatetime.cpp: линия 1854

+0

Это во многом неверно. Это было правдой давно, когда процессоры работали с фиксированной частотой. Сегодня их нет, а clock() реализовано по-другому и довольно точна, если вы можете установить разрешение в миллисекундах. – dtech

+0

@ddriver C говорит, что часы возвращают наилучшее приближение реализации к процессорному времени, используемому программой, начиная с эпохи, определенной реализацией, связанной только с вызовом программы. Http://stackoverflow.com/a/9871772/4490542 –

+0

@e.jahandar Если я запустил две функции в течение 1 секунды, первый интенсивный процессор (делает много вычислений) и другую функцию привязки к памяти (делает чтение/запись большого блока памяти) и измеряет время с помощью функции clock(), вы имеете в виду что время() для интенсивной работы процессора показывает больше времени, чем для 2-й функции, даже если фактическое время работы одинаковое? – Bobur

 Смежные вопросы

  • Нет связанных вопросов^_^