Название: Как измерить время (скорость) выполнения функции Отправлено: shtrix от Март 25, 2016, 00:38 Пытался по всякому
Код:
Как я понимаю 0 потому что слишком быстро выполняется функция для данных единиц времени. (Если увеличить обьем данных обрабатываемых функцией то результат есть.) В интернете читал что можно использовать для этих целей QTestLib. Только я не понял как. Подскажите как все таки измерить скорость выполнения функции(желательно с примером)? P.S В моем проекте реализованы различные итерационные методы решения СЛАУ и скорость выполнения нужна для сравнения. Название: Re: Как измерить время (скорость) выполнения функции Отправлено: gil9red от Март 25, 2016, 01:09 Ну зациклите вызов функции.
Код
Название: Re: Как измерить время (скорость) выполнения функции Отправлено: shtrix от Март 25, 2016, 01:46 А зачем мне решение одного и того же уравнения несколько раз одной и той же функцией(функция выполнилась ответ получен)?
Функция это метод решения например Минимальных невязок(т.е там идет обработка расширенной матрицы для получения решения системы линейных уравнений определенным методом) например: в функция1 реализован метод Минимальных невязок в функция2 реализован метод Гаусса-Зейделя в функция3 реализован метод Наискорейшего спуска и.т.д Мне и надо сравнить время(скорость) работы этих функций-методов . Название: Re: Как измерить время (скорость) выполнения функции Отправлено: Racheengel от Март 25, 2016, 02:37 Чем больше раз меняем, тем точнее ответ.
Название: Re: Как измерить время (скорость) выполнения функции Отправлено: shtrix от Март 25, 2016, 03:05 Мне не то надо.
В общем в программе пользователь выбирает файл с матрицей (матрица может быть любой размерности)потом метод решения (запускается соответствующая функция решатель) Потом другой метод(матрица та же) и.т.д Витоге формируется отчёт с данными для сравнения где должно быть включено время выполнения каждого метода. Но при небольшой хорошо обусловленной матрице решение будет найдено очень быстро и я получаю 0 - наносекунд. Название: Re: Как измерить время (скорость) выполнения функции Отправлено: __Heaven__ от Март 25, 2016, 09:20 Там миллисекунды выводятся. Что вам не нравится в том, чтобы выводить 0? Можете заменить его при выводе в отчёт на <1
Название: Re: Как измерить время (скорость) выполнения функции Отправлено: Bepec от Март 25, 2016, 09:25 Вам же уже ответили - если вы хотите точного значения, сколько отрабатывает функция, но время её выполнения меньше 1 мс, то вам надо выполнить эту функцию несколько раз(допустим 100) и полученное время разделить на 100.
В вашем же случае я думаю надо тупо писать <1 мс в отчете :) наносекунды? ОС имеют погрешности в 1-2 мс в таймерах. Если вы хотите очень точного измерения, вам нужно обратить внимание на платформозависимые решения, для каждой ОС в отдельности. К примеру в Windows 7 добавили таймер высокого разрешения с частотой 1Мгц, но он на разном железе получается с разной частотой по слухам. Ни разу не пользовался. Ссылка про windows http://iproc.ru/programming/windows-timers/ Название: Re: Как измерить время (скорость) выполнения функции Отправлено: Igors от Март 25, 2016, 11:34 А зачем мне решение одного и того же уравнения несколько раз одной и той же функцией(функция выполнилась ответ получен)? Цитировать - Как измерить температуру насекомого? Других способов принципиально нет, поэтому даже не зная что делает TestLib можно утверждать что он будет делать то же самое, возможно только чуть более удобно- Напихать в банку 100 таких насекомых и опустить туда градусник. - А зачем мне 100 насекомых? - Чтобы измерить температуру Название: Re: Как измерить время (скорость) выполнения функции Отправлено: qate от Март 25, 2016, 13:33 QElapsedTimer timer;
timer.start(); // ... qDebug() << timer.nsecsElapsed(); Название: Re: Как измерить время (скорость) выполнения функции Отправлено: deMax от Март 25, 2016, 16:03 Как то так (http://www.cyberforum.ru/visual-cpp/thread334016.html)
Код: #include <windows.h> p.s. А вообще вам же сказали запустите 1000 раз результат поделите на 1000 и не мучайте людям мозг. Название: Re: Как измерить время (скорость) выполнения функции Отправлено: Bepec от Март 25, 2016, 18:09 Оффтоп: подсчитать наносекунды, я думаю можно... При подключении периферии стоимостью где то в пару лямов $ :D
Название: Re: Как измерить время (скорость) выполнения функции Отправлено: shtrix от Март 25, 2016, 19:01 Оффтоп: подсчитать наносекунды, я думаю можно... При подключении периферии стоимостью где то в пару лямов $ :D Ну насчет наносекунд я вычитал на просторах интернета например тут http://all-ht.ru/inf/prog/c/func/clock_gettime.html (http://all-ht.ru/inf/prog/c/func/clock_gettime.html) Код: #include < stdio.h > //Для printf (http://i76.fastpic.ru/big/2016/0325/1d/3c1575573ac2483af3b3e7c1c74e771d.png) Название: Re: Как измерить время (скорость) выполнения функции Отправлено: shtrix от Март 25, 2016, 19:23 Там миллисекунды выводятся. Что вам не нравится в том, чтобы выводить 0? Можете заменить его при выводе в отчёт на <1 В принципе да ;DЧет не подумл ;D Название: Re: Как измерить время (скорость) выполнения функции Отправлено: shtrix от Март 25, 2016, 19:36 QElapsedTimer timer; Вроде то что надо.timer.start(); // ... qDebug() << timer.nsecsElapsed(); Спасибо. Название: Re: Как измерить время (скорость) выполнения функции Отправлено: nworm от Март 28, 2016, 19:34 Можешь ещё процессорные тики считать на ассемблере.
Вот пример (http://proginfo.ru/asm/) В принципе, в этом случае можно без зацикливания. |