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

R>Теперь все корректно?


Как я уже писал — рандом всё еще кривой, но это уже не так важно. Если увеличить размер массива до 0x4000'000, то твой код исполняется около 3.5 секунд. А код на C# — 1.2 секунды.
  Скрытый текст
        static void Main(string[] args)
        {
            var vals = new string[0x4000_000];

            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}");

            TestPerformanceManaged(vals);
        }

        static void TestPerformanceManaged(string[] vals)
        {
            var watch = Stopwatch.StartNew();

            var res = 0L;

            foreach (var val in vals)
            {
                var num = int.Parse(val);
                res += num;
            }

            Trace.WriteLine(res);

            watch.Stop();
            Console.WriteLine($"TestPerformanceManaged: {watch.Elapsed.TotalSeconds}");
        }

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

C>И откуда там возьмется INT_MAX?


Из значения RAND_MAX: 0x7fff. Выражение rand() * (RAND_MAX + 1) + rand() дает случайное число в диапазоте от 0 до RAND_MAX * (RAND_MAX + 1) + RAND_MAX. Что составляет 0x7fff * 0x8000 + 7fff = 3fffffff. Это не в точности INT_MAX (7ffffffff), но близкое значение. Тебе нужно чтоб прямо точно 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 = (rand() * (RAND_MAX + 1) + rand()) * 2 + 1;
      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 << "Hash = " << hash << std::endl;
   std::cout << "Processing time: " << dt.count() << "ms" << std::endl;
}


Ничего не поменялось, все те же 430 — 470 ms.

Ну в предыдущем варианте
Автор: rg45
Дата: 30.06.22
я тебе сделал масштабирование до numeric_limits<int32_t>::max:

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


тут было в точности от 0 до INT_MAX. Чем тебя тот вариант не устроил? Тем, что область значений "рваная"?
--
Re[11]: [performance] чего-то я не понимаю в этой жизни
От: rg45 СССР  
Дата: 01.07.22 06:27
Оценка: +1
Здравствуйте, Codealot, Вы писали:

C>Как я уже писал — рандом всё еще кривой, но это уже не так важно. Если увеличить размер массива до 0x4000'000, то твой код исполняется около 3.5 секунд. А код на C# — 1.2 секунды.

C>
  Скрытый текст
C>
C>        static void Main(string[] args)
C>        {
C>            var vals = new string[0x4000_000];

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

C>            watch.Stop();
C>            Console.WriteLine($"Init: {watch.Elapsed.TotalSeconds}");

C>            TestPerformanceManaged(vals);
C>        }

C>        static void TestPerformanceManaged(string[] vals)
C>        {
C>            var watch = Stopwatch.StartNew();

C>            var res = 0L;

C>            foreach (var val in vals)
C>            {
C>                var num = int.Parse(val);
C>                res += num;
C>            }

C>            Trace.WriteLine(res);

C>            watch.Stop();
C>            Console.WriteLine($"TestPerformanceManaged: {watch.Elapsed.TotalSeconds}");
C>        }
C>


C>Не забывай запускать в релизе и без отладчика.

Запускаю в релизе и без отладчика: мой пример — 3567 ms, твой:
Init: 35.8582711
TestPerformanceManaged: 7.8206846


Вот скриншоты:

--
Отредактировано 01.07.2022 6:42 rg45 . Предыдущая версия .
Re[11]: [performance] чего-то я не понимаю в этой жизни
От: rg45 СССР  
Дата: 01.07.22 06:46
Оценка: +1 :)
Здравствуйте, Codealot, Вы писали:

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


C>Я считаю, что как-то странно обвинять меня в недостаточно полном формулировании, когда даже та инфа что уже есть пропускается мимо ушей


Какая именно инфа от тебя была пропущена мимо ушей?

Если по-хорошему, тебе сразу нужно было предоставить коды примеров, которые можно скопировать, откомпилировать, запустить и увидеть проблему. Но таких примеров нет и до сих пор, когда в теме уже под полтинник сообщений. Ты вместо этого задаешь вопрос уровня: "угадайте, в каком ухе у меня звенит", но обвинять тебя — боже упаси.
--
Отредактировано 01.07.2022 7:00 rg45 . Предыдущая версия . Еще …
Отредактировано 01.07.2022 6:56 rg45 . Предыдущая версия .
Re: [performance] чего-то я не понимаю в этой жизни
От: Ip Man Китай  
Дата: 01.07.22 07:11
Оценка:
Здравствуйте, Codealot, Вы писали:

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

C>

C# JIT рулит

Вообще std::stoi и не обязан быть быстрым. Для справки, в этих ваших HFT подобные функции пишутся с нуля с использованием simd и прочих вкусняшек
Re[6]: [performance] чего-то я не понимаю в этой жизни
От: Videoman Россия https://hts.tv/
Дата: 01.07.22 08:49
Оценка:
Здравствуйте, reversecode, Вы писали:

R>печаль, я думал вы собаку съедите и свою имплементацию напишите после ваших громких заявлений

R>о том что вы и mp4 сами можете собрать разобрать и rtp нужные нарезать и dash перемолотить

Собака оказалась не вкусной и меня постигло разочарование. Поле изучения оказалось, что WebRTC это никакой не протокол и не стандарт, а прибитая гвоздями на коленке композиция уже известных технологий, где всё зависит друг от друга, шаг влево, шаг в право — расстрел, которую Google создал под свои конкретные нужды. Кстати, это повсеместная тенденция, которая сильно расстраивает. Теперь понятно почему всякие openwebrtc загибаются и загнивают — просто невозможно оперативно копировать работу, по сути, внутренностей Chrome который их меняет так, как ему заблагорассудится.

R>все свелось к банальному подключению гугловского libwebrtc


Ну собрать под студию, что бы были все PDB, были подключены все нужные либы внутри, уже не легкая задача. Сигнальный сервер свой пришлось делать, Web сокеты свои, разбираться во всякими mDNS, SDP, свой энкодер писать и подключать — это не мало. Заодно посмотрел как внутри устроен хвалёный Chrome, какое там наслоение копролитов, работы с голыми указателями, мешанина стилей оформления и разных подходов к передаче ссылок на объекты
Re[6]: [performance] чего-то я не понимаю в этой жизни
От: rg45 СССР  
Дата: 01.07.22 08:54
Оценка:
Здравствуйте, Codealot, Вы писали:

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


C>Вообще да, но эта функция чисто нативная.


managed/unmanaged переходы могут быть в таких местах, где ты их совсем не ждешь, в т.ч. и "чисто нативных" функциях. Вот тут есть старая статья на эту тему, ныне покойного McSeem2, рекомендую, если не читал: https://rsdn.org/article/dotnet/templates.xml
Автор(ы): Максим Шеманарев
Дата: 29.03.2003
--
Отредактировано 01.07.2022 9:00 rg45 . Предыдущая версия .
Re[3]: [performance] чего-то я не понимаю в этой жизни
От: rg45 СССР  
Дата: 01.07.22 09:09
Оценка: :)
Здравствуйте, Codealot, Вы писали:

C>Ну начнем с того, что у тебя там string а не wstring. Так что ты сравниваешь яблоки с апельсинами.


С++ вредоставляет разработчику выбор, с какими строками ему работать, и позволяет решить задачу более эффективно. То, что в сишарпе такой возможности нет — это проблема сишарпа. На кой ляд тащишь юникод туда, где достаточно только основной части ASCII таблиыы? И у яблок с аппельсинами, кстати, есть вагон и маленькая тележка параметров, по которым их можно сравнимать друг с другом. У нас же это сейчас главная тема обсуждения — какой хороший C# и какой плохой C++ — я правильно понимаю?
--
Отредактировано 01.07.2022 13:28 rg45 . Предыдущая версия . Еще …
Отредактировано 01.07.2022 9:13 rg45 . Предыдущая версия .
Отредактировано 01.07.2022 9:11 rg45 . Предыдущая версия .
Re[11]: [performance] чего-то я не понимаю в этой жизни
От: tryAnother  
Дата: 01.07.22 09:38
Оценка:
Здравствуйте, Codealot, Вы писали:

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


R>>Теперь все корректно?


C>Как я уже писал — рандом всё еще кривой, но это уже не так важно. Если увеличить размер массива до 0x4000'000, то твой код исполняется около 3.5 секунд. А код на C# — 1.2 секунды.


Раз результат расчета в C# не выводится на экран и не используется
не мог ли компилятор выбросить расчеты? а 1.2 секунды крутить цикл например
Re[12]: [performance] чего-то я не понимаю в этой жизни
От: Codealot Земля  
Дата: 01.07.22 15:17
Оценка: :)
Здравствуйте, rg45, Вы писали:

R>Какая именно инфа от тебя была пропущена мимо ушей?


Ну например — что надо использовать std::stoi, а не atoi
Или, например, что речь идет о юникоде.
Ад пуст, все бесы здесь.
Re[7]: [performance] чего-то я не понимаю в этой жизни
От: Codealot Земля  
Дата: 01.07.22 15:17
Оценка: -1
Здравствуйте, rg45, Вы писали:

R>managed/unmanaged переходы могут быть в таких местах, где ты их совсем не ждешь, в т.ч. и "чисто нативных" функциях. Вот тут есть старая статья на эту тему, ныне покойного McSeem2, рекомендую, если не читал: https://rsdn.org/article/dotnet/templates.xml
Автор(ы): Максим Шеманарев
Дата: 29.03.2003


MC++ — это даже не тот же компилятор.
Ад пуст, все бесы здесь.
Re[12]: [performance] чего-то я не понимаю в этой жизни
От: Codealot Земля  
Дата: 01.07.22 15:17
Оценка: -2
Здравствуйте, rg45, Вы писали:

R>тут было в точности от 0 до INT_MAX. Чем тебя тот вариант не устроил? Тем, что область значений "рваная"?


Да. Неужели в плюсах трудно сделать нормальный рандом в области значений?
Ад пуст, все бесы здесь.
Re[12]: [performance] чего-то я не понимаю в этой жизни
От: Codealot Земля  
Дата: 01.07.22 15:17
Оценка:
Здравствуйте, rg45, Вы писали:

R>Запускаю в релизе и без отладчика: мой пример — 3567 ms, твой:

R>
R>Init: 35.8582711
R>TestPerformanceManaged: 7.8206846
R>


Значит, как-то не так запускаешь. Версия .NET, например?
Ад пуст, все бесы здесь.
Re[4]: [performance] чего-то я не понимаю в этой жизни
От: Codealot Земля  
Дата: 01.07.22 15:17
Оценка: :)
Здравствуйте, rg45, Вы писали:

R>С++ вредоставляет разработчику выбор, с какими строками ему работать, и позволяет решить задачу более эффективно.


Мы уже давно не живем во времена, когда такая экономия на спичках имела смысл. Вреда же от нее — дофига и больше.

R>То, что в сишарпе такой возможности нет — это проблема сишарпа.


Если очень приспичит, то можно. Но не нужно.

R>У нас же это сейчас главная тема обсуждения — какой хороший C# и какой плохой C++ — я правильно понимаю?


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

R>>Запускаю в релизе и без отладчика: мой пример — 3567 ms, твой:

R>>
R>>Init: 35.8582711
R>>TestPerformanceManaged: 7.8206846
R>>


C>Значит, как-то не так запускаешь.


Откомпилировал: Target Platform: "Any CPU", конфигурация ^Release". Все настройки по умолчанию. Запустил из командной строки. Что не так?

C>Версия .NET, например?


4.7.2. А надо?
--
Re[12]: [performance] чего-то я не понимаю в этой жизни
От: Codealot Земля  
Дата: 01.07.22 15:32
Оценка:
Здравствуйте, tryAnother, Вы писали:

A>Раз результат расчета в C# не выводится на экран и не используется

A>не мог ли компилятор выбросить расчеты? а 1.2 секунды крутить цикл например

1) тогда время было бы 0 секунд
2) запись в volatile не оптимизируется
Ад пуст, все бесы здесь.
Re[14]: [performance] чего-то я не понимаю в этой жизни
От: Codealot Земля  
Дата: 01.07.22 15:33
Оценка: -2
Здравствуйте, rg45, Вы писали:

R>Откомпилировал: Target Platform: "Any CPU", конфигурация ^Release". Все настройки по умолчанию. Запустил из командной строки. Что не так?


Ну кто тебя знает.

R>4.7.2. А надо?


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


C>Мы уже давно не живем во времена, когда такая экономия на спичках имела смысл. Вреда же от нее — дофига и больше.

C>Если очень приспичит, то можно. Но не нужно.

А чего ты тогда про яблоки с апльсинами мне тут рассказываешь, если это "экономия на спичках" и ни разу не приспичило?

C>Как говорил кто-то мудрый, нечестивый бежит когда за ним никто не гонится.


Ага, а другой кто-то мудрый сказал: "сделай лицо попроще".
--
Re[2]: [performance] чего-то я не понимаю в этой жизни
От: Codealot Земля  
Дата: 01.07.22 15:35
Оценка:
Здравствуйте, Ip Man, Вы писали:

IM>с использованием simd и прочих вкусняшек


Только HDL, только хардкор.
Ад пуст, все бесы здесь.
Re[6]: [performance] чего-то я не понимаю в этой жизни
От: Codealot Земля  
Дата: 01.07.22 15:37
Оценка:
Здравствуйте, rg45, Вы писали:

R>А чего ты тогда про яблоки с апльсинами мне тут рассказываешь, если это "экономия на спичках" и ни разу не приспичило?


Использовать анси — бессмысленно. Сравнивать его с юникодом — некорректно. Сразу две причины, почему ты сделал не так как надо.
Ад пуст, все бесы здесь.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.