using System;
static int MyStrToShort(string cs)
{
int res = 0;
for(int i = 0; i < 10000000; i++)
res += short.Parse(cs);
return res;
}
static void Main(string[] args)
{
Console.WriteLine( MyStrToShort("123") );
}
Опции: Release
Время работы: ~2 сек (без учета JIT-компиляции).
Я уж тут подумал на кривизну рук, но..., прошу объяснить где кривые руки в использовании boost::lexical_cast?
Раньше я пользовался C++/STL для того, чтобы обогнать .NET и прочее.
теперь, я пользуюсь .NET, чтобы обогнать C++/BOOST.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: BOOST::lexical_cast, .NET short.Parse и производительнос
Короче я все таки не удержался , тем более что с прошлого бенчмарка всего везде по одной строчке надо были поправить.
Ну и IronPython и Руби до кучи добавил.
Вот усредненные по 5 прогонам после первого (в цикле) результаты (Pentium M 1.7 Dothan):
Реализация
Время
1) DMD 0.173 (std.conv.toInt)
0.277 sec
2) MinGW GCC 3.4.2 (atoi)
0.345 sec
3) MS VC++ 8.0 (atoi)
0.645 sec
4) C# on Mono 1.1.18 (int.Parse)
1.023 sec
5) Java on HotSpot 1.5.0_08(-server) (Integer.decode)
1.796 sec
6) Java on JRockit 26.4.0(-server) (Integer.decode)
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Denis2005, Вы писали:
VD>Кстати, Parse реализован не самым оптимальным образом. Ручная реализация обычно быстрее.
Меня в этом вопросе волнует другое...
Еще буквально 3-4 года назад почти каждый бравый C++-ник кидался тухлым помидором во всё,
"что не C++" и любой разговор сводил к производительности,
с чем конечно поспорить было трудно (в частности связка C++/STL
на хорошем компиляторе это просто улет).
Однако с приходом BOOST-омании как-то понятия С++ и производительность
разъехались по разные стороны, а собственно "комитет", который постоянно твердил
о т.н. нулевых издержках сейчас получается сам себе противоречит,
и собирается включать в C++0x всякое фуфло из BOOST-а.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: BOOST::lexical_cast, .NET short.Parse и производитель
Здравствуйте, Denis2005, Вы писали:
D>Однако с приходом BOOST-омании как-то понятия С++ и производительность D>разъехались по разные стороны, а собственно "комитет", который постоянно твердил D>о т.н. нулевых издержках сейчас получается сам себе противоречит, D>и собирается включать в C++0x всякое фуфло из BOOST-а.
Не надо рассматривать boost как монолит, это скорее россыпь почти не связанных библиотек. Большая часть из них весьма полезны и высокопроизводительны, но есть и несколько уродцев.
Re: [Benchmark] DMD опять быстрее всех. Даже чем atoi :)
Здравствуйте, Андрей Хропов, Вы писали:
АХ>Так что иногда и Руби быстрее C++ .
Вернее так: иногда и Руби быстрее BOOST
Ради интереса сделал тестик с использованием своей библы, которая у меня на производительность затачивается. С учетом того, что она работает только с Unicode (WCHAR) получилось на P4 521 (2800 Gz) 472347379 тиков (rdtsc) или 0.168693 секунд.
Так штааа это проблемы буста а не С++
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: [Benchmark] DMD опять быстрее всех. Даже чем atoi :)
Не совсем корректно сравнивать atoi и дотнетный int.Parse, потому что последний понимает разделители и группировки, знаки валют, текущую культуру, NumberFormat.
... << RSDN@Home 1.2.0 alpha rev. 646 on Windows XP 5.1.2600.131072>>
Здравствуйте, FR, Вы писали:
FR>Здравствуйте, Denis2005, Вы писали:
D>>Однако с приходом BOOST-омании как-то понятия С++ и производительность D>>разъехались по разные стороны, а собственно "комитет", который постоянно твердил D>>о т.н. нулевых издержках сейчас получается сам себе противоречит, D>>и собирается включать в C++0x всякое фуфло из BOOST-а.
FR>Не надо рассматривать boost как монолит, это скорее россыпь почти не связанных библиотек. Большая часть из них весьма полезны и высокопроизводительны, но есть и несколько уродцев.
BOOST.Devel в курсе проблемы производительности некоторых своих компонент и при этом мало, что делает.
В данном случае (lexical_cast) BOOST.Devel рекомендует делать специализации, использующие strtol и strtod.
P.S. Если не трудно перечисли список уродцев, чтоб я зря время не тратил на тесты?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: BOOST::lexical_cast, .NET short.Parse и производитель
D>BOOST.Devel в курсе проблемы производительности некоторых своих компонент и при этом мало, что делает. D>В данном случае (lexical_cast) BOOST.Devel рекомендует делать специализации, использующие strtol и strtod.
D>P.S. Если не трудно перечисли список уродцев, чтоб я зря время не тратил на тесты?
Трудно Я пользуюсь довольно ограниченным числом бустовских библиотек, и все они кроме boost::python легкие (умные указатели и тому подобные мелочи), все остальное я достаточно вскольз просматривал и не могу объективно судить уродец это или нет.
Re[6]: BOOST::lexical_cast, .NET short.Parse и производитель
Здравствуйте, FR, Вы писали:
FR>Трудно Я пользуюсь довольно ограниченным числом бустовских библиотек, и все они кроме boost::python легкие (умные указатели и тому подобные мелочи), все остальное я достаточно вскольз просматривал и не могу объективно судить уродец это или нет.
Что-то у меня тоже пока дальше smart_ptr-ов и lambda-ы "дело не пошло".
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: BOOST::lexical_cast, .NET short.Parse и производитель
Здравствуйте, Denis2005, Вы писали:
D>В данном случае (lexical_cast) BOOST.Devel рекомендует делать специализации, использующие strtol и strtod.
ЕМНИМ, lexical_cast по сути своей это "вывод чего угодно в текстовый поток, а потом разбор этого потока". Зная это, уже можно делать предположения о его скорости, и использовать соответствующим образом — если нужно введенную пользователем строчку (одну) конвертнуть правильным образом к любому необходимому типу, то это самый очевидный и безгеморройный вариант (написать надо одну строчку, ее выполнение за 0.01 секунды пользователь не увидит).
А если нужно 10 000 значений (да еще заранее известного формата) преобразовать в другой заранее известный формат — то очевидно, что нужен быстрый специализированный конвертер, написание которого займет некоторое время (большее, чем написать lexcial_cast<int>(str)), и это время будет сэкономлено при выполнении алгоритма.
lexical_cast — это такая специальная штука, которая сознательно жертвует временем выполнения в пользу времени написания.
Чего на зеркало пенять-то?
FAQ — це мiй ай-кью!
Re[2]: [Benchmark] DMD опять быстрее всех. Даже чем atoi :)
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Андрей Хропов, Вы писали:
AVK>Не совсем корректно сравнивать atoi и дотнетный int.Parse, потому что последний понимает разделители и группировки, знаки валют, текущую культуру, NumberFormat.
Читаем в документации к Int32.Parse:
The s parameter contains a number of the form:
[ws][sign]digits[ws]
Items in square brackets ([ and ]) are optional; and the values of the other items are as follows.
ws
An optional white space.
sign
An optional sign.
digits
A sequence of digits ranging from 0 to 9.
Все равно, даже если заменить '0' — '9' и '+' и '-' на произвольные символы это все равно не должно сильно замедлить (поскольку какая разница с чем сравнивать). Ну и могли бы специально оптимизировать для самого частого случая, когда '0'-'9' идут подряд.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: BOOST::lexical_cast, .NET short.Parse и производитель
Здравствуйте, FR, Вы писали:
FR>Не надо рассматривать boost как монолит, это скорее россыпь почти не связанных библиотек. Большая часть из них весьма полезны и высокопроизводительны, но есть и несколько уродцев.
Мне кажется Denis2005 рассматривает буст не как монолит, а как некий символ.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: [Benchmark] DMD опять быстрее всех. Даже чем atoi :)
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>lexical_cast — это такая специальная штука, которая сознательно жертвует временем выполнения в пользу времени написания. ЗХ>Чего на зеркало пенять-то?
Все бы было здорово, если бы отдельные товарищи на основании подобных тестов не делали бы выводы о полной тормознутости .NET/Java.
... << RSDN@Home 1.2.0 alpha rev. 646 on Windows XP 5.1.2600.131072>>
Здравствуйте, AndrewVK, Вы писали:
ЗХ>>lexical_cast — это такая специальная штука, которая сознательно жертвует временем выполнения в пользу времени написания. ЗХ>>Чего на зеркало пенять-то?
AVK>Все бы было здорово, если бы отдельные товарищи на основании подобных тестов не делали бы выводы о полной тормознутости .NET/Java.
А я что? Я ничего
Все равно я пишу на самом-тормозном-языке-из-активно-используемых И как-то получается добиваться приемлемой эффективности.
FAQ — це мiй ай-кью!
Re[5]: BOOST::lexical_cast, .NET short.Parse и производитель
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, FR, Вы писали:
FR>>Не надо рассматривать boost как монолит, это скорее россыпь почти не связанных библиотек. Большая часть из них весьма полезны и высокопроизводительны, но есть и несколько уродцев.
VD>Мне кажется Denis2005 рассматривает буст не как монолит, а как некий символ.