![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Может кто-нибудь выложить результаты теста вызова функции boost::call_once 1000 * 1000 * 1000 раз. То есть в цикле как обычно:
Интересует за сколько по времени выполнится этот цикл в release сборке. Это должно занять меньше минуты. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
а в чем собственно проблема?
|
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Хочу понять есть ли разница в скорости между std::call_once и boost::call_once. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
т.е. у вас нет буста?
сейчас.. |
|||
|
||||
| boostcoder |
|
||||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
amd phenom 2.33 Добавлено через 2 минуты и 38 секунд не понятно почему бустовская версия такая тормознутая, в отличии от стандартной Добавлено через 13 минут и 53 секунды теперь понятно бустовская версия:
стандартная:
нужно почитать что по той ссылке такого умного написано, раз уж такой тормоз получился Добавлено через 14 минут и 36 секунд ах да, проверял на линукс. |
||||||||
|
|||||||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Вообще результаты интересные. Дело в том, что автор алгоритма, который должен использоваться в std::call_once утверждает, что скорость "холостого" хода (после первого вызова функции) должна быть 1 миллиард в секунду. Но там была реализация только для pthreads, но на деле это не должно ничего менять, так как ОС зависимые функции не вызываются при холостом ходе.
Значит на деле скорость в 9 раз медленней для std::call_once и в 25 раз медленней для boost. По крайней мере я немного успокоился так как моя версия call_once написанная на Qt тоже выполняется 25 секунд (под Windows). А алгоритм почти тот же что и в бусте, разве что классы Qt'шные. Это примерно 40 000 000 вызовов в секунду вместо 1 миллиарда. Это сообщение отредактировал(а) SABROG - 8.6.2010, 01:20 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
не понимаю, для чего эту функцию так часто вызывать? она ведь используется, в основном, при создании/инициализации некоторого ресурса.
неужели, есть реальная надобность ее так часто дергать? |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Она используется в некоторых версиях синглтонов внутри метода instance(), а уж на сколько часто будет вызываться этот синглтон зависит от разработчика. У меня например сейчас такая ситуация, что я не могу выставить приоритет потоку пока его не создаст библиотечный класс и пока я физически не попаду в функцию, которая будет выполняться в отдельном потоке. Но так как функция вызывается много раз, то выставлять приоритет потока на каждый вызов/итерацию слишком накладно, тут мне поможет функция call_once. Но .та функция есть пока только в boost, а в std::call_once она идет вместе с новым стандартом C++0x. В общем пришлось писать свою версию на Qt, так как там тоже аналогов нет несмотря на то, что Thiago Maciera обещал написать Q_ONCE еще пару лет назад.
Это сообщение отредактировал(а) SABROG - 8.6.2010, 01:32 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
ну так пользуйте. компилятор давно зарелизили. я постоянно тещу новые снепшоты. кстати, в релизе 4.5.0 есть баг, который проявляется при сборке openssl 0.9.8m и выше) тут в теме, есть ссылка на мингв на базе 4.6.0. Добавлено через 1 минуту и 44 секунды да, по бинарникам, он не совместим c Qt-libraries и Qt-sdk. придется пересобирать. |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Спасибо за ссылку, буду на досуге пересобирать. На линуксе Qt версия не намного отличается от виндовой 21-24сек.
Поставил на работе под linux boost 1.40.0, скорость при оптимизации -O3 такая же как и у Qt варианта - 21 сек. Intel® Pentium® Dual CPU E2200 @ 2.20GHz Intel® Core™2 Duo E6400 @ 2.13GHz --- Вот код из gcc 4.4.0 для винды:
--- К сожалению с новым MinGW больше проблем. Qt не собирается с версией OpenSSL, которая там идет. Пришлось выковыривать его оттуда и прописывать переменную LPATH вместо LIBRARY_PATH, которая почему-то стала игнорироваться линкером (g++ -print-search-dirs) и вскрылся баг с ""error: '_clear87' was not declared in this scope"", причем как выяснилось баг разработчиков MinGW (решается копированием файлов float.h и stddef.h в $QTDIR/include, только float.h там 2, нужно выбирать тот, что пожирнее). Это сообщение отредактировал(а) SABROG - 9.6.2010, 08:51 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |