boost::lexical_cast optimization
От: korzhik Россия  
Дата: 02.09.06 13:09
Оценка:
Здравствуйте,

http://nasonov.blogspot.com/2006/08/boost-lexicalcast-optimization.html
Re: boost::lexical_cast optimization
От: jazzer Россия Skype: enerjazzer
Дата: 02.09.06 15:16
Оценка: +1
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте,


K>http://nasonov.blogspot.com/2006/08/boost-lexicalcast-optimization.html


теперь надо подождать, когда на этот топик ответит сам alnsn, и проставиться ему
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: boost::lexical_cast optimization
От: korzhik Россия  
Дата: 02.09.06 15:56
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, korzhik, Вы писали:


K>>Здравствуйте,


K>>http://nasonov.blogspot.com/2006/08/boost-lexicalcast-optimization.html


J>теперь надо подождать, когда на этот топик ответит сам alnsn, и проставиться ему


написал ему, может зайдёт
Re: boost::lexical_cast optimization
От: Roman Odaisky Украина  
Дата: 02.09.06 18:43
Оценка:
Здравствуйте, korzhik, Вы писали:

K>http://nasonov.blogspot.com/2006/08/boost-lexicalcast-optimization.html


Это всё хорошо, только зачем? Кто-то использует lexical_cast (хоть и удобная штука) в местах, критичных к производительности?

P. S. Разыскивается stringstream, который умеет писать в итераторы (iterstream<...>(back_inserter(...)) << hello << world).
До последнего не верил в пирамиду Лебедева.
Re[2]: boost::lexical_cast optimization
От: MaximE Великобритания  
Дата: 03.09.06 07:46
Оценка:
Roman Odaisky wrote:

> K>http://nasonov.blogspot.com/2006/08/boost-lexicalcast-optimization.html

>
> Это всё хорошо, только зачем? Кто-то использует lexical_cast (хоть и
> удобная штука) в местах, критичных к производительности?

Он стараетя сделать чтобы, к примеру, lexical_cast<int>(str) был не медленнее
strtol(str, ...).

--
Maxim Yegorushkin

No Microsoft product was used in any way to write or send this text.
If you use a Microsoft product to read it, you're doing so at your own risk
Posted via RSDN NNTP Server 2.0
Re[3]: boost::lexical_cast optimization
От: jazzer Россия Skype: enerjazzer
Дата: 03.09.06 23:49
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте, jazzer, Вы писали:


J>>Здравствуйте, korzhik, Вы писали:


K>>>Здравствуйте,


K>>>http://nasonov.blogspot.com/2006/08/boost-lexicalcast-optimization.html


J>>теперь надо подождать, когда на этот топик ответит сам alnsn, и проставиться ему


K>написал ему, может зайдёт


кстати, его статья на эту тему вышла в свежем номере Overload.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: boost::lexical_cast optimization
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 04.09.06 07:53
Оценка: 33 (3)
Здравствуйте, jazzer, Вы писали:

J>теперь надо подождать, когда на этот топик ответит сам alnsn, и проставиться ему


Я тут.
Кевлин меня убедил, что lexical_cast должен использовать пользовательский operator<< если enum его имеет, теперь вот думаю как обнаружить наличие этого оператора. Пока только получилось обнаружить нешаблонный operator<<. У кого-нибудь есть идеи?
Re[2]: boost::lexical_cast optimization
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 04.09.06 07:58
Оценка: +1 :)
Здравствуйте, Roman Odaisky, Вы писали:

RO>Это всё хорошо, только зачем? Кто-то использует lexical_cast (хоть и удобная штука) в местах, критичных к производительности?


А почему не используют? Может быть, потому, что медленный?
Re[4]: boost::lexical_cast optimization
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 04.09.06 08:08
Оценка:
Здравствуйте, jazzer, Вы писали:

J>кстати, его статья на эту тему вышла в свежем номере Overload.


Кстати, сейчас идет подписка на следующий год здесь. Шесть номеров Overload и шесть номеров C Vu всего за 35 фунтов.

Почему-то последний номер на сайте только в PDF, я раньше просто брал HTML своей статьи и выкладывал в блоге.
Re[3]: boost::lexical_cast optimization
От: zaufi Земля  
Дата: 04.09.06 08:14
Оценка:
Здравствуйте, alnsn, Вы писали:

A>Здравствуйте, Roman Odaisky, Вы писали:


RO>>Это всё хорошо, только зачем? Кто-то использует lexical_cast (хоть и удобная штука) в местах, критичных к производительности?


A>А почему не используют? Может быть, потому, что медленный?


г-н R.O. усугубил конечно, но в целом суть верна -- убирание lexical_cast в циклах с числом итераций >10^6 дает видимый (местами даже очень) прирост скорости...

но в остальном (для меня лично) lexical_cast архиудобнейшая вещь! Благо что "мест критичных по производительности" в реальной жизни не так много -- поэтому вопрос "зачем" не стоит
Re[4]: boost::lexical_cast optimization
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 04.09.06 08:30
Оценка:
Здравствуйте, zaufi, Вы писали:

Z>г-н R.O. усугубил конечно, но в целом суть верна -- убирание lexical_cast в циклах с числом итераций >10^6 дает видимый (местами даже очень) прирост скорости...


К сожалению, прирост скорости при преобразовании из целого в строку на FreeBSD + gcc 3.4.4 был всего в три раза. В-основном за счет конструирования std::locale, и, как я подозреваю (но не проверял), из-за отсутствия оптимизации маленьких строк.
Преобразование цифры в char в шесть раз быстрее.

A conversion from int digit to char has been measured on FreeBSD 6.1.
The test has been compiled with gcc 3.4.4 with -O2 optimization flag
turned on.
#include <boost/lexical_cast.hpp>
int main()
{
    int volatile result = 0;
    for(int count = 1000000; count > 0; --count)
        result += boost::lexical_cast<char>(count % 10);
    return result;
}


The next table shows execution times of the test compiled with Boost 1.33.1 and with the patched lexical_cast. The last column is the performance influence of not constructing std::locale and std::numpunct<char> objects and not calling std::numpunct<char>::grouping function. This change is not included into the patch because it is not consistent with the standard output operator for int.

Boost 1.33.1 — 2.012 sec
Patch -0.322 sec
Ratio — 6.24
Patch that ignores locales — 0.083 sec

More common is a conversion to std::string. To measure performance of this conversion, the for body in the test program has been replaced with result += boost::lexical_cast<std::string>(count).size();

The results are:
Boost 1.33.1 — 2.516 sec
Patch — 0.844 sec
Ratio — 2.98
Patch that ignores locales — 0.626 sec
Re[3]: boost::lexical_cast optimization
От: MaximE Великобритания  
Дата: 04.09.06 08:55
Оценка:
Здравствуйте, alnsn, Вы писали:

A>Кевлин меня убедил, что lexical_cast должен использовать пользовательский operator<< если enum его имеет, теперь вот думаю как обнаружить наличие этого оператора. Пока только получилось обнаружить нешаблонный operator<<. У кого-нибудь есть идеи?


http://groups.google.com/group/comp.lang.c++.moderated/msg/8235a058359911dc

?
Re[4]: boost::lexical_cast optimization
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 04.09.06 09:04
Оценка:
Здравствуйте, MaximE, Вы писали:

ME>Здравствуйте, alnsn, Вы писали:


A>>Кевлин меня убедил, что lexical_cast должен использовать пользовательский operator<< если enum его имеет, теперь вот думаю как обнаружить наличие этого оператора. Пока только получилось обнаружить нешаблонный operator<<. У кого-нибудь есть идеи?


ME>http://groups.google.com/group/comp.lang.c++.moderated/msg/8235a058359911dc


Пока внимательно не смотрел, но дело в том, что все enums типы являются printable типами. Если нет пользовательского operator<<, то производится promotion до интегрального типа, для которого есть operator<< член класса basic_ostream<>. Это усложняет задачу
Re[5]: boost::lexical_cast optimization
От: MaximE Великобритания  
Дата: 04.09.06 09:54
Оценка:
Здравствуйте, alnsn, Вы писали:

A>Здравствуйте, MaximE, Вы писали:


ME>>Здравствуйте, alnsn, Вы писали:


A>>>Кевлин меня убедил, что lexical_cast должен использовать пользовательский operator<< если enum его имеет, теперь вот думаю как обнаружить наличие этого оператора. Пока только получилось обнаружить нешаблонный operator<<. У кого-нибудь есть идеи?


ME>>http://groups.google.com/group/comp.lang.c++.moderated/msg/8235a058359911dc


A>Пока внимательно не смотрел, но дело в том, что все enums типы являются printable типами. Если нет пользовательского operator<<, то производится promotion до интегрального типа, для которого есть operator<< член класса basic_ostream<>. Это усложняет задачу


Тогда screw Kevlin с его долбаными enum'ами, пусть юзеры их структуринами оборачивают.
Re[6]: boost::lexical_cast optimization
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 04.09.06 10:44
Оценка:
Здравствуйте, MaximE, Вы писали:

ME>Тогда screw Kevlin с его долбаными enum'ами, пусть юзеры их структуринами оборачивают.


Нешаблонный operator<< я уже умею определять, осталось шаблонный. Может быть как-то сыграть на том, что шаблонная функция имеет более низкий приоритет или попытаться спрятать операторы члены класса basic_ostream<> ?
Re[7]: boost::lexical_cast optimization
От: MaximE Великобритания  
Дата: 10.09.06 11:33
Оценка:
Здравствуйте, alnsn, Вы писали:

ME>>Тогда screw Kevlin с его долбаными enum'ами, пусть юзеры их структуринами оборачивают.


A>Нешаблонный operator<< я уже умею определять, осталось шаблонный. Может быть как-то сыграть на том, что шаблонная функция имеет более низкий приоритет или попытаться спрятать операторы члены класса basic_ostream<> ?


Ничего умного в голову не приходит.

Может использовать define, чтобы по-умолчанию enum'ы выводились через operator<<, а если define определен, то как integer?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.