| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Время выполнения алгоритма. |
| Автор: Kemix 21.4.2012, 23:36 |
| Здравствуйте, уважаемое сообщество. При решение одной задачи возникла следующас проблема:время измерения алгоритма измеряется неверно. Сама задача:Сравнить 2 сортировки(Сортировка Пузырьком и Шелла) и снять показания времени выполнения и построить график зависимости времени выполнения каждого алгоритма от количества элементов в массиве. Сам код:http://pastebin.com/pjtKft4D Беда:время выполнения болтается в одном и том же диапазоне с увеличением количеством элементов. Заранее спасибо. |
| Автор: Данкинг 21.4.2012, 23:50 |
| Код вычисления времени показывай. |
| Автор: northener 22.4.2012, 00:25 | ||||
Он показал код по ссылке, но там ... Короче смотреть и вникать страшно. Например такой перл как:
О! Да там ещё и прямая работа с машинными кодами:
Не знал, что встроенный ассемблер в Дельфи такое допускает. |
| Автор: Данкинг 22.4.2012, 01:28 |
| RDTSC какой-то ещё. Это тоже, оказывается, какая-то ассемблерная инструкция, как Яндекс говорит. |
| Автор: bems 22.4.2012, 10:33 |
| Kemix, не у всех процов счетчики rdtsc разных ядер синхронны. Рекомендованная обёртка, использующая этот способ когда это возможно, называется QueryPerformanceCounter была инструкция на х64, которую в мне не удавалось сформировать иначе как этим способом. Так что хорошо что оно есть |
| Автор: bems 22.4.2012, 11:59 |
| а какой должно быть значение, если ты делаешь Start - Finish? |
| Автор: Kemix 22.4.2012, 13:50 |
Оу действительно. Ну вот и финальной код - http://pastebin.com/W0jeNaNp Единственная заноза - периодически возникают "скачки" при измерении. Походу измерение времени в Delphi - реально накипешая проблема. Тут наткнулся на это - http://habrahabr.ru/post/75234/ |
| Автор: Qu1nt 22.4.2012, 14:27 |
| Delphi здесь ни при чём. |
| Автор: Keeper89 22.4.2012, 14:33 |
| В последних Delphi можно использовать http://docwiki.embarcadero.com/VCL/en/Diagnostics.TStopwatch. |
| Автор: bems 22.4.2012, 14:50 |
| потому что переключения процессора с потока на поток и разные эффекты кеширования предсказать заранее нельзя. Если тебе нужно измерить сколько времени работал именно твой код, то есть GetThreadTimes, но там вроде разрешение похуже |
| Автор: Kemix 22.4.2012, 17:59 | ||
Разрешение?? Может точность измерения похуже? |
| Автор: bems 22.4.2012, 21:30 |
| У таймера есть и то и другое. Не путай их: http://www.transl-gunsmoker.ru/2010/11/blog-post_15.html |
| Автор: northener 23.4.2012, 00:40 | ||
Заноза сравнительно легко извлекается путём вычисления "среднего" времени выполнения алгоритма при измерении нескольких вызовов вышеупомянутого. |
| Автор: Kemix 25.4.2012, 08:01 | ||||
Т.е. для одного и того же N несколько раз замерять, а потом среднее арифиметическое вычислять? Чтож, подумаю. Пока препод в коммандировке выкладываю код. Чуть позже доработаю ещё с учётом данных советов.
UPD:Ничего не потребовалось редактировать, приняли так. Всем спасибо за помощь. |