|
код-таймер
|
|||
---|---|---|---|
#18+
написала таймер, для измерения ран-таймов функций алгоритмов поиска, но пока что, он умеет работать только с функциями определенного типа, можно ли сделать что-то более общее? как? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 16:07 |
|
код-таймер
|
|||
---|---|---|---|
#18+
передавать параметры в структуре тогда "определенный тип" будет просто search_algorithm(void *) для C++, можно ф-цию передалать в класс. Для каждого алгоритма свой класс содержащий параметры + виртуальная ф-ция IMHO p.s. если в С++ есть лямбды, возможно можно с помощью их. Но я так не умею ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 16:22 |
|
код-таймер
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, спасибо, попробую использовать структуру ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 16:31 |
|
код-таймер
|
|||
---|---|---|---|
#18+
mini.weblabможно ли сделать что-то более общее? как? Если не извращаться со всякими темплейтами, то проще всего макрос: Код: sql 1.
Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 16:35 |
|
код-таймер
|
|||
---|---|---|---|
#18+
mini.weblab, Как обобщить сказали. Главное не потеряй читабельность кода при обобщении. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 17:18 |
|
код-таймер
|
|||
---|---|---|---|
#18+
Судя по документации clock() возвращает число тиков которое надо делить на CLOCKS_PER_SEC чтоб получить секунды. И делитель этот достаточно большой порядка миллиона. Тоесть мы имеем дело со счетчиком микросекунд. С одной стороны это хорошо. С другой стороны такая точноть нужна при работе с сетью например. Но с алгоритмами - нет. Например если ты намеряла 20 клоков. Алгоритм слишком быстро отработал. А гранулярность планировщика процессов мультизадачности во много раз превышает этот интервал - то твои измерения будут фейком. Тоесть они будут наполнены большой случайной погрешностью которую надо как-то объяснить. Поэтому мерять алгоритмы надо не микро-секундами а минутами. Алгоритм должен работать дооооооолго. И общий полный цикл этого клока со сбросом составляет 72 минуты. Это слишком мало. Велика вероятность что ты случайно проскочишь через циклический сброс и цифры снова будут фейком. И надо будет объяснять почему время старта в микросекундах больше чем время финиша. Вобщем лучше отказаться от этого клока и взять что-то более спокойное. Текущее время в милисекундах будет практически полезнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 20:31 |
|
код-таймер
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, спасибо, это я тоже возьму на заметку ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 21:20 |
|
код-таймер
|
|||
---|---|---|---|
#18+
mayton, 1) в С у меня есть 2 опции: использовать либо time, либо clock time_t позволяет измерить время с точнстью до секунд, т.е. это опция не подойдет clock использует процессорное время, которое замеряется с точнстью до микросекунд, и это то, что рекомендуется к использованию для измерения скорости выполнения программ. 2) мне не нужно точно замерять время выполнения алгоритма, мне нужно только сравнить время выполнения разных алгоритмов, и каждый из алгоритмов будет иметь случайную погрешность примерно одного и того же порядка. 3) Даже с такой погрешностью можно будет получить статисчески значимые результаты, потому что рассматриваются алгоритмы порядка N, sqrt(N), log(N). ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 21:55 |
|
код-таймер
|
|||
---|---|---|---|
#18+
mini.weblab 1) в С у меня есть 2 опции: использовать либо time, либо clock Ну почему же. Есть еще платформозависимые часы Под Линуксом (да и практически везде кроме Винды): Код: plaintext 1. 2. 3. 4. 5. 6.
Монотонные часы не имеют определенной базовой даты, но гарантируют неубывающие значения (и не зависят от смены часового пояса или других изменений системных часов). Поэтому их удобно использовать в измерениях интервалов в разных тестах. ЗЫ. В С++ есть платформонезависимый std::chrono::steady_clock::now() который делает то же самое. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 22:29 |
|
код-таймер
|
|||
---|---|---|---|
#18+
Она пока - на чистых сях. Без плюсов. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 22:39 |
|
код-таймер
|
|||
---|---|---|---|
#18+
У винды свой хайрез таймер есть - https://docs.microsoft.com/en-us/windows/win32/sysinfo/acquiring-high-resolution-time-stamps ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 22:57 |
|
код-таймер
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky, спасибо, нашла :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 23:00 |
|
код-таймер
|
|||
---|---|---|---|
#18+
вроде еще есть счетчики процессора, как раз для замера времени работы кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2020, 00:00 |
|
код-таймер
|
|||
---|---|---|---|
#18+
clock() в MSVC и в GCC работает по-разному. В MSVC возвращает время прошедшее с момента запуска программы. В GCC сколько процессорного времени использовано, причем даже если в коде нет никаких пауз и выполняется он на одном из ничем незагруженных ядер, то clock() возвращает меньше чем реально прошло, возможно приостанавливается во время дисковых операций. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2020, 07:26 |
|
код-таймер
|
|||
---|---|---|---|
#18+
TimeStampCounter 22140467 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2020, 01:17 |
|
код-таймер
|
|||
---|---|---|---|
#18+
вот что получилось на поисковых алгоритмах: линейный поиск, двоичный поиск, интерполяционный поиск, прыжковый поиск Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 15:19 |
|
код-таймер
|
|||
---|---|---|---|
#18+
mini.weblab, Какие выводы? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 23:36 |
|
код-таймер
|
|||
---|---|---|---|
#18+
1) при сравнении алгоритмов будет достаточно функции clock() в качестве таймера 2) с этим тоже не соглашусь авторПоэтому мерять алгоритмы надо не микро-секундами а минутами. Алгоритм должен работать дооооооолго. 3) у меня появился следующий вопрос https://www.sql.ru/forum/1329005/ukazatel-na-funkciu-vozvrashhaushhuu-ukazatel-na-int ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 12:51 |
|
код-таймер
|
|||
---|---|---|---|
#18+
Хорошо. Не соглашайся со мной. Это тоже позиция. А как ты сама для себя интерпретируешь эту величину? Будь то физика или любая другая наука. Экспериментатор должен объяснить ее. Например если я мерял площадь обоев в своей комнате и увидел что они на порядок превышают площадь моей команты по полу. Пересчитал. Нашел ошибку. В описании товара по рулону обоев был другой смысл. Тоесть я нашел признак который мне подсказал что я ошибаюсь. Интерполяционный алгоритм работал 0.035 микросекунды. Или 35 наносекунд. Время очень близко приближено к предельным временам на которые способна реагировать оперативная память. Была реакция чтения одной ячейки? Алгоритм прочитал 1 ячейку или кешлинию? И я вообще сомневаюсь что современная мультизадачная операционка способна точно мерять такие интервалы. Планировщик может твою задачу вытеснить в любую секунду. На минутах это незаметно. На нано-секундах это парадоксы. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 13:20 |
|
код-таймер
|
|||
---|---|---|---|
#18+
mayton, у меня нет цели точно измерить время выполнения функции/алгоритма. я решаю другую задачу: сравниваю производительность алгоритмов между собой, поэтому для меня точное измерение времени исполнения функции вторично. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 14:24 |
|
код-таймер
|
|||
---|---|---|---|
#18+
Ты думаешь я вот такой злой mayton просто пристал к тебе? Да ради бога. Меряй дальше. Неужели я буду хватать тебя за руку. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 14:29 |
|
код-таймер
|
|||
---|---|---|---|
#18+
mini.weblab для меня точное измерение времени исполнения функции вторично ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 14:32 |
|
код-таймер
|
|||
---|---|---|---|
#18+
было учтено, 1) Мы сравниваем 4 алгоритма: (а) Линейный поиск - производительность O(N); (b) Бинарный поиск - O( log2N ); (c) Интерполяция - O(1): данные распределены равномерно; (d) Прыжковый поиск: O(sqrt(N)) 2) измерения проведены в 10 точках числовой прямой, точки распределены равномерно. Все контрольные точки принадлежат массиву, по которому ведется поиск 3) для оценки производительность алгоритма в точке каждый алгоритм запускался 100 раз, и ран-тайм вычислялся как среднее арифметическое. не было учтено: алгоритмы проверялись только на точках, существующих в массиве точки, не принадлежащие массиву данных, я еще не проверяла погрешность и асимптотика: я думаю, что функция clock(), не смотря на все свои недостатки способна корректно сравнить O(N) ~ O(sqrt(N)) ~ O( log2N ) ~ O(1) результаты сравнения Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:02 |
|
код-таймер
|
|||
---|---|---|---|
#18+
mini.weblab я думаю Надо заняться (само)образованием и (у)знать о существовании случайной и систематической погрешности. Ну и понимать разницу между абсолютной и относительной погрешностями. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:08 |
|
|
start [/forum/topic.php?fid=57&fpage=6&tid=2017337]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
76ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 200ms |
0 / 0 |