Re[4]: [performance] чего-то я не понимаю в этой жизни
От: Codealot Земля  
Дата: 30.06.22 19:29
Оценка:
Здравствуйте, rg45, Вы писали:

R>Все равно получается 300 против 800. Как ты умудрился получить плюсовый код в пять раз медленнее шарпного, по-прежнему остается загадкой. Моежт, приведешь уже полные тексты примеров?


А чего тебе не хватает, генерации данных? Она на C#. Разница в том, что у тебя числа слишком маленькие.
        var vals = new string[64 * 1024 * 1024];

        var watch = Stopwatch.StartNew();
        var random = new Random(0);
        for (var i = 0; i < vals.Length; i++)
        {
            vals[i] = random.Next().ToString();
        }

        watch.Stop();
        Console.WriteLine($"Init: {watch.Elapsed.TotalSeconds}");
Ад пуст, все бесы здесь.
Re[6]: [performance] чего-то я не понимаю в этой жизни
От: Codealot Земля  
Дата: 30.06.22 19:31
Оценка:
Здравствуйте, rg45, Вы писали:

R>Хамишь?


Не я начал.
Ад пуст, все бесы здесь.
Re[5]: [performance] чего-то я не понимаю в этой жизни
От: Codealot Земля  
Дата: 30.06.22 19:31
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>Я подозреваю, что у него там не обычный С++, а дотнетовский. И это мы сами должны были догадаться.


Вообще да, но эта функция чисто нативная.
Ад пуст, все бесы здесь.
Re[5]: [performance] чего-то я не понимаю в этой жизни
От: rg45 СССР  
Дата: 30.06.22 19:32
Оценка:
Здравствуйте, Codealot, Вы писали:


R>>Все равно получается 300 против 800. Как ты умудрился получить плюсовый код в пять раз медленнее шарпного, по-прежнему остается загадкой. Моежт, приведешь уже полные тексты примеров?


C>А чего тебе не хватает, генерации данных? Она на C#. Разница в том, что у тебя числа слишком маленькие.


Мне не хватает ответов на мои вопросы. На оба.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[7]: [performance] чего-то я не понимаю в этой жизни
От: rg45 СССР  
Дата: 30.06.22 19:34
Оценка:
Здравствуйте, Codealot, Вы писали:

R>>Хамишь?


C>Не я начал.


А ты где-то видишь хамство с моей стороны? Покажешь?
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[8]: [performance] чего-то я не понимаю в этой жизни
От: Codealot Земля  
Дата: 30.06.22 19:39
Оценка:
Здравствуйте, rg45, Вы писали:

R>А ты где-то видишь хамство с моей стороны? Покажешь?


На самом деле, я про Nuzhny. Про то сообщение, которому ты поставил плюс. Re[3]: [performance] чего-то я не понимаю в этой жизни
Автор: Nuzhny
Дата: 30.06.22
Ад пуст, все бесы здесь.
Re[6]: [performance] чего-то я не понимаю в этой жизни
От: Codealot Земля  
Дата: 30.06.22 19:39
Оценка:
Здравствуйте, rg45, Вы писали:

R>Мне не хватает ответов на мои вопросы. На оба.


Там слишком много всего. Конкретно та функция, которая в вопросе — здесь Re[2]: [performance] чего-то я не понимаю в этой жизни
Автор: Codealot
Дата: 30.06.22

Тебе нужно изменить твои входные данные, чтобы там были случайные целые от 0 до INT_MAX. Не знаю, как в плюсах это нормально делается.

А каким образом получается такая скорость — это, собственно, я и сам хотел бы знать.
Ад пуст, все бесы здесь.
Re: [performance] чего-то я не понимаю в этой жизни
От: reversecode google
Дата: 30.06.22 19:45
Оценка: 1 (1)

std::from_chars C++17
Re[2]: [performance] чего-то я не понимаю в этой жизни
От: pilgrim_ Россия  
Дата: 30.06.22 19:57
Оценка:
Здравствуйте, pilgrim_, Вы писали:

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


C>>Для тех же данных, код на C++ выполняется за 5.9 секунд и на C# за 1.2 секунды.

C>>

_>Быть не может

_>Запустил у себя код rg45
Автор: rg45
Дата: 30.06.22
, VS 2017, /O2, разница в пользу C++ конечно не в 5 раз, но где-то +- в 2.5 раза если использовать C-шые atoi/wcstol , и где-то в 2 раза если юзать C++ std::stoi.


По поводу производительности, рекомендую весь C++ код не связанный с .NET компилировать в натив (настройками опций компиляции конкретных cpp файлов), в студии так можно.
Любой код который написан в C++/CLI файле, либо используемый шаблонный (тот же std::vector) будет развёрнут в IL.
Re[7]: [performance] чего-то я не понимаю в этой жизни
От: rg45 СССР  
Дата: 30.06.22 19:57
Оценка:
Здравствуйте, Codealot, Вы писали:

C>Там слишком много всего. Конкретно та функция, которая в вопросе — здесь Re[2]: [performance] чего-то я не понимаю в этой жизни
Автор: Codealot
Дата: 30.06.22


Так ворос не про эту функцию. Вопрос про полные тексты примеров — обоих — которые можно скопировать и выполнить.

C>Тебе нужно изменить твои входные данные, чтобы там были случайные целые от 0 до INT_MAX. Не знаю, как в плюсах это нормально делается.


Не вопрос, любой каприз дорогого гостя:

  C++ 470 ms
#include <iostream>
#include <vector>
#include <string>
#include <chrono>

std::vector<std::wstring> MakeIntSequence(int size)
{
   std::vector<std::wstring> v;
   v.reserve(size);
   for (int i = 0; i < size; ++i)
   {
      const int number = int(int64_t(std::rand()) * std::numeric_limits<int32_t>::max() / RAND_MAX);
      v.push_back(std::to_wstring(number));
   }
   return v;
}

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

   const auto vals = MakeIntSequence(10000000);

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

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

   std::cout << "Processing time: " << dt.count() << "ms" << std::endl;
}


И даже после этого пример на плюсах быстрее примера на шарпе (в котором маленькие числа).

C>А каким образом получается такая скорость — это, собственно, я и сам хотел бы знать.


Могу только повториться: для этого нужно предоставить полные тексты твоих примеров. Ибо стеклянный шар уже попробовали — не помогло.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 30.06.2022 20:00 rg45 . Предыдущая версия .
Re[8]: [performance] чего-то я не понимаю в этой жизни
От: Codealot Земля  
Дата: 30.06.22 20:03
Оценка:
Здравствуйте, rg45, Вы писали:

R>Так ворос не про эту функцию. Вопрос про полные тексты примеров — обоих — которые можно скопировать и выполнить.


Ну ок, попробую выцарапать что нужно.

R>
R>      const int number = int(int64_t(std::rand()) * std::numeric_limits<int32_t>::max() / RAND_MAX);
R>


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

C>На самом деле, я про Nuzhny. Про то сообщение, которому ты поставил плюс. Re[3]: [performance] чего-то я не понимаю в этой жизни
Автор: Nuzhny
Дата: 30.06.22


Извини, конечно, если задели за живое. Но ты что, правда считаешь, что нормально сформулировал свой вопрос?
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[9]: [performance] чего-то я не понимаю в этой жизни
От: rg45 СССР  
Дата: 30.06.22 20:09
Оценка:
Здравствуйте, Codealot, Вы писали:

R>>
R>>      const int number = int(int64_t(std::rand()) * std::numeric_limits<int32_t>::max() / RAND_MAX);
R>>


C>Это совсем не корректно.


А так:

  C++ 430 ms
#include <iostream>
#include <vector>
#include <string>
#include <chrono>

std::vector<std::wstring> MakeIntSequence(int size)
{
   std::vector<std::wstring> v;
   v.reserve(size);
   for (int i = 0; i < size; ++i)
   {
      const int number = rand() * (RAND_MAX + 1) + rand();
      v.push_back(std::to_wstring(number));
   }
   return v;
}

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

   const auto vals = MakeIntSequence(10000000);

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

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

   std::cout << "Processing time: " << dt.count() << "ms" << std::endl;
}


Время даже упало, но, скорее всего, это просто флюктуации. Считаем, что не изменилось. Теперь все корректно?
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[2]: [performance] чего-то я не понимаю в этой жизни
От: Videoman Россия https://hts.tv/
Дата: 30.06.22 20:18
Оценка:
Здравствуйте, reversecode, Вы писали:

R>

R>std::from_chars C++17

Работает только с char-ами (по сути UTF-8). На самом деле на практике работает быстро, но не быстрее чем самому написать руками, без всех этих JSON вариантов.
Отредактировано 30.06.2022 20:18 Videoman . Предыдущая версия .
Re[2]: [performance] чего-то я не понимаю в этой жизни
От: rg45 СССР  
Дата: 30.06.22 20:25
Оценка:
Здравствуйте, reversecode, Вы писали:

R>

R>std::from_chars C++17

Да не в этом сейчас вопрос. Непонятно, каким образом плюсовый вариант может быть в пять раз медленнее шарпного, даже в исходном виде.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[3]: [performance] чего-то я не понимаю в этой жизни
От: reversecode google
Дата: 30.06.22 20:31
Оценка:
кто смотрел в имплементацию тот знает что char там достаточно условная
при желании и wchar можно себе грабнуть
причем здесь json всякие, когда нужна поддержка float или double без внешних либ
да еще и быстрая

но мы отвлекаемся
вы лучше создайте тему про вебртс и расскажите на каком вы этапе
а то похоже все заглохло
Re[10]: [performance] чего-то я не понимаю в этой жизни
От: Codealot Земля  
Дата: 30.06.22 21:03
Оценка:
Здравствуйте, rg45, Вы писали:

R>Извини, конечно, если задели за живое. Но ты что, правда считаешь, что нормально сформулировал свой вопрос?


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

R>А так:


И откуда там возьмется INT_MAX?
Ад пуст, все бесы здесь.
Re[4]: [performance] чего-то я не понимаю в этой жизни
От: Videoman Россия https://hts.tv/
Дата: 30.06.22 22:45
Оценка:
Здравствуйте, reversecode, Вы писали:

R>кто смотрел в имплементацию тот знает что char там достаточно условная

R>при желании и wchar можно себе грабнуть
Я смотрел реализацию. Как обычно следование стандарту добавляет туда массу проверок и тормозов, в отличие от простого разбора десятичного числа из строки.

R>причем здесь json всякие, когда нужна поддержка float или double без внешних либ

R>да еще и быстрая
При том, что в её описании прямо так и написано:

This is intended to allow the fastest possible implementation that is useful in common high-throughput contexts such as text-based interchange (JSON or XML).

The guarantee that std::from_chars can recover every floating-point value formatted by std::to_chars exactly is only provided if both functions are from the same implementation.

Затачивалось оно специально под сериализацию. Вот только на практике скорость не фига не максимально возможная, даже казалось бы с такими ограничениями и особенно у float-ов и double-ов. Как у них так получилось, можешь в реализации посмотреть. Вот, разбирали уже.

fastest possible implementation — вот это вот звиздеж чистой воды.

R>но мы отвлекаемся

R>вы лучше создайте тему про вебртс и расскажите на каком вы этапе
R>а то похоже все заглохло

WebRTC же был в прошлом году разобран и реализован. Пришлось собирать половину хрома (webrtc.lib) под MSVC для возможности дебага и добавления своих реализаций кодеков и отладки всего этого дела. Ты говорил что ICE сервер обязательно нужен для работы в локальной сети, а он не нужен абсолютно, всё и так работает. В общем грузанул ты меня кучей ненужных деталей, а конкретики не дал никакой, вот я и обиделся и не стал дальше продолжать тему
Re[5]: [performance] чего-то я не понимаю в этой жизни
От: reversecode google
Дата: 30.06.22 23:18
Оценка:
Здравствуйте, Videoman, Вы писали:

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


R>>кто смотрел в имплементацию тот знает что char там достаточно условная

R>>при желании и wchar можно себе грабнуть
V>Я смотрел реализацию. Как обычно следование стандарту добавляет туда массу проверок и тормозов, в отличие от простого разбора десятичного числа из строки.

R>>причем здесь json всякие, когда нужна поддержка float или double без внешних либ

R>>да еще и быстрая
V>При том, что в её описании прямо так и написано:
V>

V>This is intended to allow the fastest possible implementation that is useful in common high-throughput contexts such as text-based interchange (JSON or XML).

V>The guarantee that std::from_chars can recover every floating-point value formatted by std::to_chars exactly is only provided if both functions are from the same implementation.

V>Затачивалось оно специально под сериализацию. Вот только на практике скорость не фига не максимально возможная, даже казалось бы с такими ограничениями и особенно у float-ов и double-ов. Как у них так получилось, можешь в реализации посмотреть. Вот, разбирали уже.

V>fastest possible implementation — вот это вот звиздеж чистой воды.


std::from_chars нигде по ссылкам не сравнивался
сравнивался strtod и куча каких то непойми чего с его самописной имплементацией
но мы отвлеклись, насколько я помню когда на каком то cppcon-е кажется презентовали from_chars
там было другое, насколько помню сравнивалось с стандартным библиотечным что есть в комплекте
поэтому между выбором strtod from_chars, лучше выбрать последний
вы же уже увели разговор куда то в лес

R>>но мы отвлекаемся

R>>вы лучше создайте тему про вебртс и расскажите на каком вы этапе
R>>а то похоже все заглохло

V>WebRTC же был в прошлом году разобран и реализован. Пришлось собирать половину хрома (webrtc.lib) под MSVC для возможности дебага и добавления своих реализаций кодеков и отладки всего этого дела. Ты говорил что ICE сервер обязательно нужен для работы в локальной сети, а он не нужен абсолютно, всё и так работает. В общем грузанул ты меня кучей ненужных деталей, а конкретики не дал никакой, вот я и обиделся и не стал дальше продолжать тему


печаль, я думал вы собаку съедите и свою имплементацию напишите после ваших громких заявлений
о том что вы и mp4 сами можете собрать разобрать и rtp нужные нарезать и dash перемолотить
все свелось к банальному подключению гугловского libwebrtc
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.