Re[11]: [performance] чего-то я не понимаю в этой жизни
От: Quebecois Канада https://www.canada.ca/
Дата: 02.07.22 00:24
Оценка: 3 (1) :))
Здравствуйте, Codealot, Вы писали:

C>Какой полет фантазии. Явно, у тебя какие-то комплексы на эту тему.

У меня профдеформация. Консалтинг по распутыванию специфических факапов много лет, поэтому есть некоторое имя в индустрии. Так вот, редкий день проходит без писем в стиле "ааа, я скачал с гитхаба проект, а оно там все не работает! срочно нужна помощь! Денег нет, сроки горят, ну что тебе сложно?".

Я пытался по молодости помогать из доброты душевной, практически в 100% случаев с описанным выше результатом — чем больше помогаешь, тем больше все не работает и все вокруг виноваты. А как перестаешь отвечать — вообще во врага народа превращаешься. А у корпоративных клиентов, платящих за каждый чих, все наоборот. Покажешь один раз, потом через год видишь, как они это довели до ума, отполировали и развили идею.

Если хочешь, можешь считать это комплексом. Этот аккаунт создан исключительно для трындежа и выпускания пара, поэтому все написанное им стоит воспринимать с хорошей долей лимона и рюмкой виски.
Re[12]: [performance] чего-то я не понимаю в этой жизни
От: Codealot Земля  
Дата: 02.07.22 01:24
Оценка: :)
Здравствуйте, Quebecois, Вы писали:

Q>есть некоторое имя в индустрии.


Куда деваться.

Q>Если хочешь, можешь считать это комплексом. Этот аккаунт создан исключительно для трындежа и выпускания пара, поэтому все написанное им стоит воспринимать с хорошей долей лимона и рюмкой виски.


Похоже, рюмкой там дело не ограничилось.
Ад пуст, все бесы здесь.
Re[21]: [performance] чего-то я не понимаю в этой жизни
От: rg45 СССР  
Дата: 02.07.22 10:22
Оценка:
Здравствуйте, Codealot, Вы писали:

C>Настроение всю неделю, хоть волком вой.


Понимаю и сочувствую. А что мешает извиниться?


C>Ты бы поосторожнее с такими угрозами. Никогда не знаешь, чем это может закончиться для тебя.


Фигасе, ты наглый. Ты бы за языком лучше следил, вместо того чтоб советы давать. Потому что для тебя это точно добром не закончится, если будешь себя так в жизни вести.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 02.07.2022 12:00 rg45 . Предыдущая версия . Еще …
Отредактировано 02.07.2022 11:22 rg45 . Предыдущая версия .
Отредактировано 02.07.2022 10:59 rg45 . Предыдущая версия .
Отредактировано 02.07.2022 10:43 rg45 . Предыдущая версия .
Отредактировано 02.07.2022 10:42 rg45 . Предыдущая версия .
Отредактировано 02.07.2022 10:26 rg45 . Предыдущая версия .
Re[13]: [performance] чего-то я не понимаю в этой жизни
От: rg45 СССР  
Дата: 02.07.22 11:34
Оценка: +2
Здравствуйте, reversecode, Вы писали:

R>std:from_chars кто нибудь добавит в тестирование ?


Попробовал std:from_chars, получилось примерно то же самое. Даже чуть хуже, потому что переход с wchar_t к char, тоже не совсем бесплатынй. Возможно, я просто не умею это готовить, можешь попробовать сам.

А вот попробовал заменить stoi наивнейшей самописной реализацией, и получил ~700 ms, что примерно в 5 раз быстрее, чем вариант с stoi и почти в два раза быстрее сишарпного(6.0) варианта

  C++ 740 ms
#include <iostream>
#include <vector>
#include <string>
#include <chrono>
#include <random>

std::vector<std::wstring> MakeIntSequence(int size)
{
   std::random_device rd;  //Will be used to obtain a seed for the random number engine
   std::mt19937 gen(rd()); //Standard mersenne_twister_engine seeded with rd()
   std::uniform_int_distribution<> distrib(0, std::numeric_limits<int>::max());
   std::vector<std::wstring> v;
   v.reserve(size);
   for (int i = 0; i < size; ++i)
   {
      v.push_back(std::to_wstring(distrib(gen)));
   }
   return v;
}

int ParseInt(const std::wstring& wstr)
{
   int res{};
   for (auto d : wstr)
   {
      res = res * 10 + d - '0';
   }
   return res;
}

int main()
{
   namespace tm = std::chrono;

   const auto vals = MakeIntSequence(0x4000000);

   const auto t0 = tm::steady_clock::now();

   int hash{};
   for (const auto& val : vals)
   {
      hash ^= ParseInt(val);
   }
   const auto dt = tm::duration_cast<tm::milliseconds>(tm::steady_clock::now() - t0);

   std::cout << "Hash = " << std::hex << hash << std::endl;
   std::cout << "Processing time: " << std::dec << dt.count() << "ms" << std::endl;
}


Я думаю, что если написать по уму, то можно получить еще более чувствительное ускорение.

P.S. Заглянул в майкрософтовскую реализацию std::from_chars. Если в двух словах — это жопа. На какое там быстродействие можно надеяться, я х.з.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 02.07.2022 12:35 rg45 . Предыдущая версия . Еще …
Отредактировано 02.07.2022 12:33 rg45 . Предыдущая версия .
Отредактировано 02.07.2022 12:24 rg45 . Предыдущая версия .
Отредактировано 02.07.2022 12:14 rg45 . Предыдущая версия .
Отредактировано 02.07.2022 11:35 rg45 . Предыдущая версия .
Re[15]: [performance] чего-то я не понимаю в этой жизни
От: rg45 СССР  
Дата: 02.07.22 12:31
Оценка:
Здравствуйте, Codealot, Вы писали:

R>>Ну, что, скажу прямо, я удивлен. Нужно будет поиграться с плюсовым кодом, побробовать что-то вместо stoi. Насколько можно этот код ускорить.


C>Вот и я удивляюсь.


Здесь есть немного новостей: http://rsdn.org/forum/cpp/8306833.1
Автор: rg45
Дата: 02.07.22
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[14]: [performance] чего-то я не понимаю в этой жизни
От: reversecode google
Дата: 02.07.22 12:44
Оценка: +1
тьфу ты я забыл что вы там wchar-ом меряетесь
поэтому попробовал оценить насколько можно вообще stoi обогнать

https://quick-bench.com/q/EB06TVPFI7G7z1GgCIpfHMud3hU
Re[15]: [performance] чего-то я не понимаю в этой жизни
От: rg45 СССР  
Дата: 02.07.22 13:09
Оценка: :)
Здравствуйте, reversecode, Вы писали:

R>тьфу ты я забыл что вы там wchar-ом меряетесь


Ну дык. Ты не в курсе, наверное, все, что не умеет C#, нужно отправить на свалку истории: http://rsdn.org/forum/cpp/8306424.1
Автор: Codealot
Дата: 01.07.22


R>поэтому попробовал оценить насколько можно вообще stoi обогнать

R>https://quick-bench.com/q/EB06TVPFI7G7z1GgCIpfHMud3hU

Ну, это согласуется с тем, что получилось у меня.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 02.07.2022 13:13 rg45 . Предыдущая версия . Еще …
Отредактировано 02.07.2022 13:10 rg45 . Предыдущая версия .
Re[11]: [performance] чего-то я не понимаю в этой жизни
От: σ  
Дата: 02.07.22 13:23
Оценка: +1
σ>> > In other cases, if any character requires more than 8-bits to represent it, all the characters are stored using two bytes for each — UTF-16 representation.
σ>> К концу десятилетия (следующего), возможно (правда, я сомневаюсь), догадаются, что можно хранить в байте те символы, которым этого хватает, даже если есть символы, которым байта не хватает. Последние можно хранить больше, чем в одном байте.
·> А ещё можно и сразу bzip-ом паковать и в блокчейн записывать.
Ничего себе задымление всего-то от намёка на UTF-8…
Re[14]: [performance] чего-то я не понимаю в этой жизни
От: rudzuk  
Дата: 02.07.22 14:04
Оценка:
Здравствуйте, rg45, Вы писали:

Какая то у тебя наивная ParseInt. А недопустимые символы, а знаки?
avalon/3.0.0
Re[12]: [performance] чего-то я не понимаю в этой жизни
От: rudzuk  
Дата: 02.07.22 14:04
Оценка:
Здравствуйте, σ, Вы писали:

σ> σ>> К концу десятилетия (следующего), возможно (правда, я сомневаюсь), догадаются, что можно хранить в байте те символы, которым этого хватает, даже если есть символы, которым байта не хватает. Последние можно хранить больше, чем в одном байте.


σ> ·> А ещё можно и сразу bzip-ом паковать и в блокчейн записывать.


σ> Ничего себе задымление всего-то от намёка на UTF-8…


Адски неудобная кодировка для обработки строк.
avalon/3.0.0
Re[15]: [performance] чего-то я не понимаю в этой жизни
От: rg45 СССР  
Дата: 02.07.22 14:30
Оценка:
Здравствуйте, rudzuk, Вы писали:

R>Какая то у тебя наивная ParseInt. А недопустимые символы, а знаки?


А я разве где-то предлагал прямо в таком виде включить это в продакшен? Это всего лишь примитивный пруф-оф-концепт, использованный для оценнки возможностей оптимизации производительности.

Разумеется, для продакшен утилиты потребуется обработка ошибок, что повлечет определенные накладные расходы. В то же время, здесь не все еще использованы возможности по оптимизации, например, можно обрабатывать не поразрядно, а сразу сотнями или даже тысячами. Для этого можно использовать таблицы вместо арифметики. Кстати майкрософтовская реализация std::from_chars и использует таблицы, только быстродействие по-прежнему унылое, почему-то.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 02.07.2022 14:45 rg45 . Предыдущая версия . Еще …
Отредактировано 02.07.2022 14:43 rg45 . Предыдущая версия .
Отредактировано 02.07.2022 14:39 rg45 . Предыдущая версия .
Отредактировано 02.07.2022 14:36 rg45 . Предыдущая версия .
Re[11]: [performance] чего-то я не понимаю в этой жизни
От: rg45 СССР  
Дата: 02.07.22 14:55
Оценка:
Здравствуйте, Codealot, Вы писали:

R>>На тот случай, если ты опять захочешь включить моя-твоя-не-понимать, расшифрую: один пример мой (можешь взять любой из...), а второй тот, который, по твоим словам, сливает сишарпному в пять раз.


C>Именно твой. Тот, который исполняется ~3.5 секунды против 1.2 для C#.


Я не пойму, ты правда такой или прикидываешься? Речь о двух С++ примерах — один мой, второй твой — тот, который в пять раз медленнее, который упоминался в стартовом сообщении. Этого примера так никто и не видел до сих пор. Как, интересно, ты понял высказывание
Автор: Quebecois
Дата: 01.07.22
о пошаговом приведении двух примеров к общему знаменателю? О каких двух примерах шла речь, как ты понял?
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 02.07.2022 14:59 rg45 . Предыдущая версия .
Re[16]: [performance] чего-то я не понимаю в этой жизни
От: rudzuk  
Дата: 02.07.22 14:55
Оценка:
Здравствуйте, rg45, Вы писали:

r> R>Какая то у тебя наивная ParseInt. А недопустимые символы, а знаки?


r> А я разве где-то предлагал прямо в таком виде включить это в продакшен? Это всего лишь примитивный пруф-оф-концепт, использованный для оценнки возможностей оптимизации производительности.


Если уж бенчишь, то делать нужно как в продакшен, а то не тест, а читерство какое-то.
avalon/3.0.0
Re[17]: [performance] чего-то я не понимаю в этой жизни
От: rg45 СССР  
Дата: 02.07.22 15:02
Оценка:
Здравствуйте, rudzuk, Вы писали:

R>Если уж бенчишь, то делать нужно как в продакшен, а то не тест, а читерство какое-то.


Я это делал в большей мере для себя, а не для того, чтоб кому-то, что-то доказать. Мне этой грубой оценки хватило, чтоб получить представление. Хотите точнее — берите и делайте.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[17]: [performance] чего-то я не понимаю в этой жизни
От: rg45 СССР  
Дата: 02.07.22 15:10
Оценка: :)
Здравствуйте, rudzuk, Вы писали:

R>Если уж бенчишь, то делать нужно как в продакшен, а то не тест, а читерство какое-то.


И кстати, стратегии обработки ошибок тоже могут быть разные. Один из возможных подходов — отсутствие обработки ошибок. В этом случае просто описываются прекондишены, которые обязан обеспечить программист, в противном случае — behavior is undefined и досвидос. В стандартной библиотеке навалом таких функций — тот же memcpy, например.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 02.07.2022 15:12 rg45 . Предыдущая версия .
Re[18]: [performance] чего-то я не понимаю в этой жизни
От: rudzuk  
Дата: 02.07.22 15:29
Оценка:
Здравствуйте, rg45, Вы писали:

r> R>Если уж бенчишь, то делать нужно как в продакшен, а то не тест, а читерство какое-то.


r> Я это делал в большей мере для себя, а не для того, чтоб кому-то, что-то доказать. Мне этой грубой оценки хватило, чтоб получить представление. Хотите точнее — берите и делайте.


Ты принес на форум, заявив, что оно в два раза быстрее шарпа
avalon/3.0.0
Re[13]: [performance] чего-то я не понимаю в этой жизни
От: Videoman Россия https://hts.tv/
Дата: 02.07.22 15:30
Оценка: +1 -1
Здравствуйте, rudzuk, Вы писали:

R>Адски неудобная кодировка для обработки строк.


Адски удобная кодировка. Самая удобная из всех. Вдвойне более компактная и удобная при сериализации данных. Никаких тебе big-endian/little-endian. В UTF-8 codepoints от 1-4 байт, в UTF-16 codepoints от 2-х до 4 байт, чем она удобнее ?
Re[19]: [performance] чего-то я не понимаю в этой жизни
От: rg45 СССР  
Дата: 02.07.22 15:33
Оценка:
Здравствуйте, rudzuk, Вы писали:

R>Ты принес на форум, заявив, что оно в два раза быстрее шарпа


И?
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[14]: [performance] чего-то я не понимаю в этой жизни
От: rudzuk  
Дата: 02.07.22 15:39
Оценка: +1
Здравствуйте, Videoman, Вы писали:

V> R>Адски неудобная кодировка для обработки строк.


V> Адски удобная кодировка. Самая удобная из всех. Вдвойне более компактная и удобная при сериализации данных. Никаких тебе big-endian/little-endian. В UTF-8 codepoints от 1-4 байт, в UTF-16 codepoints от 2-х до 4 байт, чем она удобнее ?


Для сериализации удобная, базара нет. Для обработки строк неудобная.

1. Итерация символов требует несколько проверок последовательностей (4), вместо единственной в UTF-16;
2. Все что за пределами ascii кодируется, либо тем же количеством байт, что и в UTF-16, либо большим.
3. В UTF-16 почти все что нужно лежит в пределах BMP (т.е. суррогатная пара не требуется), а значит такие строки могут иметь индексный доступ.
avalon/3.0.0
Re[20]: [performance] чего-то я не понимаю в этой жизни
От: rudzuk  
Дата: 02.07.22 15:41
Оценка: +1 -1
Здравствуйте, rg45, Вы писали:

r> R>Ты принес на форум, заявив, что оно в два раза быстрее шарпа


r> И?


Это не совсем для "себя". Не, я понимаю желание уделать шарп, но, блин, уделывай на общих условиях.
avalon/3.0.0
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.