Здравствуйте, 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] чего-то я не понимаю в этой жизни
R>>Все равно получается 300 против 800. Как ты умудрился получить плюсовый код в пять раз медленнее шарпного, по-прежнему остается загадкой. Моежт, приведешь уже полные тексты примеров?
C>А чего тебе не хватает, генерации данных? Она на C#. Разница в том, что у тебя числа слишком маленькие.
Мне не хватает ответов на мои вопросы. На оба.
--
Re[7]: [performance] чего-то я не понимаю в этой жизни
Здравствуйте, pilgrim_, Вы писали:
_>Здравствуйте, Codealot, Вы писали:
C>>Для тех же данных, код на C++ выполняется за 5.9 секунд и на C# за 1.2 секунды. C>>
_>Быть не может _>Запустил у себя код rg45
, 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] чего-то я не понимаю в этой жизни
Так ворос не про эту функцию. Вопрос про полные тексты примеров — обоих — которые можно скопировать и выполнить. 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>А каким образом получается такая скорость — это, собственно, я и сам хотел бы знать.
Могу только повториться: для этого нужно предоставить полные тексты твоих примеров. Ибо стеклянный шар уже попробовали — не помогло.
Здравствуйте, reversecode, Вы писали:
R> R>std::from_chars C++17
Работает только с char-ами (по сути UTF-8). На самом деле на практике работает быстро, но не быстрее чем самому написать руками, без всех этих JSON вариантов.
кто смотрел в имплементацию тот знает что char там достаточно условная
при желании и wchar можно себе грабнуть
причем здесь json всякие, когда нужна поддержка float или double без внешних либ
да еще и быстрая
но мы отвлекаемся
вы лучше создайте тему про вебртс и расскажите на каком вы этапе
а то похоже все заглохло
Re[10]: [performance] чего-то я не понимаю в этой жизни
Здравствуйте, 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] чего-то я не понимаю в этой жизни
Здравствуйте, 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