|
1 / 1 / 1
Регистрация: 18.09.2015
Сообщений: 26
|
||||||
Скорость работы функции18.09.2015, 09:11. Показов 2600. Ответов 11
Метки нет (Все метки)
Требуется измерить скорость работы функции "func". При этом измерение должно производиться в течении только TIME_TEST секунд. Для такого измерения написал две функции timer_1 и timer_2. В ходе написания возникли следующие вопросы:
1) Почему если в функции timer_1 убрать две строки после которых стоит комментарий "delete", то скорость работы всегда получается разной, то есть функция timer_1 в этом случае работает неверно? Почему такой ошибки в функции timer_2 не наблюдается, несмотря на отсутствие похожих строк? 2) Какую из функций timer_1 или timer_2 лучше использовать для решения поставленной задачи и почему? 3) Как бы Вы написали функцию измерения скорости работы функции в течении заданного времени?
Примечание: функция должна корректно работать на всех программно-аппаратных платформах (Windows, Linux/Unix, MAC OS, Haswel, ARM, SPARC, etc).
0
|
||||||
| 18.09.2015, 09:11 | |
|
Ответы с готовыми решениями:
11
Скорость работы функции pow Скорость работы программы Как измерить скорость работы кода |
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 18.09.2015, 09:28 | |
|
У time() слишком низкое разрешение для такого короткого TIME_TEST. Для таких измерений нужно использовать clock() как во второй функции.
К тому же, если говорить о переносимости, не гарантируется, что time() возвращает именно секунды. Разницу нужно определять с помощью difftime().
1
|
|
|
1 / 1 / 1
Регистрация: 18.09.2015
Сообщений: 26
|
|
| 18.09.2015, 20:42 [ТС] | |
|
Что значит "слишком низкое разрешение"? Можно поподробнее?
Добавлено через 51 секунду И почему вставка пустого цикла (после которого комментарий "delete") решает эту проблему?
0
|
|
|
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
|
|||
| 18.09.2015, 21:13 | |||
|
Так как там разрешение секунда (о чем я написал выше), а тест у вас длится ВСЕГО одну секунду, то такой тест на самом же деле продлится от 0 до 1 секунды. Естественно, как правило меньше 1 и больше 0. Например если тест начался в 12 часов 12 минут и 5.7 секунд, то он продлится всего 0.3 секунду, именно через столько времени значение time(0) изменится. В тех двух строчках (//delete) Вы добиваетесь того, что функция продолжит работу почти что в тот момент, когда секунда перепрыгнула. То есть длительность работы функции будет стремиться к единице.
1
|
|||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 18.09.2015, 21:21 | |
|
Значит, что этот таймер выдаёт секунды (хотя и не гарантировано) и интервал твой секунда. Ты можешь начать измерения в начале какой-то секунды, в середине или в самом конце, когда уже следующая начинается. Соответственно, твоя функция будет вызвана большее число раз или меньшее, а может вообще ни разу. Если в интервале от 34-й строки до начала условия в 36-й секунда сменится, то функция вообще ни разу не будет вызвана, потому что ты разницу задаёшь слишком маленькую. Время измерения у тебя равно шагу таймера, и те 2 строчки пытаются синхронизировать начала измерения с таймером, с началом очередной секунды.
1
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 18.09.2015, 22:55 | ||
|
ваш код кстати, так же не умеет этого делать.
0
|
||
|
1 / 1 / 1
Регистрация: 18.09.2015
Сообщений: 26
|
|
| 19.09.2015, 01:09 [ТС] | |
|
Почему же не умеет? В чем ошибка? На моем ПК он делает то, что мне надо.
0
|
|
|
21 / 22 / 7
Регистрация: 04.08.2015
Сообщений: 131
|
|
| 19.09.2015, 01:30 | |
|
маленький совет - померьте время до вызовов функции и после, посчитайте интервал, число вызовов вы знаете, скорость работы найти легко, но вообще согласен с hoggy, затея бредовая, проще посмотреть код в ассемблере и ручками посчитать сколько требуется на выполнение функции
0
|
|
|
1 / 1 / 1
Регистрация: 18.09.2015
Сообщений: 26
|
||
| 19.09.2015, 01:43 [ТС] | ||
|
Добавлено через 1 минуту Причем эти функции (тысячу) нужно протестировать по секунде на каждую, а не по 1000.
0
|
||
|
21 / 22 / 7
Регистрация: 04.08.2015
Сообщений: 131
|
||||
| 19.09.2015, 04:56 | ||||
|
Затея бредовая, потому что при создании в Release-версии программы компилятор пройдется по коду оптимизатором и скорость работы изменится
0
|
||||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
||
| 19.09.2015, 08:22 | ||
|
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||
| 19.09.2015, 11:28 | ||||||||
|
он занимается запуском функции в цикле в течении некоторого периода времени:
которая была описана вами в нульпусте.
0
|
||||||||
| 19.09.2015, 11:28 | |
|
Помогаю со студенческими работами здесь
12
Расположение файлов библиотек и скорость работы Надо увеличить скорость работы программы
Скорость работы std::vector и обычного динамического массива Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|