Python против C++

Тема в разделе "WASM.LANGS", создана пользователем Intro, 30 мар 2025 в 19:18.

Метки:
  1. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    640
    История Одного Теста

    Типа на питоне получилось так же как и на С++.
    Хотя уже доказано что С++ быстрей питона 400-500 раз.
    Надо бы ещё на UASM эту задачу решить, графику рисовать OpenGL а может и GDI32 справиться.
     
  2. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.024
    Интересное сравнение C++ c C++. Потому что raylib не нейтивная притоновая библиотека, а бинарник, по иронии судьбы написанный на плюсах. И если по большей части производительность теряется в ней, то прямо ну очень показательно.
     
  3. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.320
    Так, я бы попросил, рейлиб не на богом проклятых плюсах написана, а чистой, как слеза младенца, православной сишечке.
     
  4. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    640
    Rel, на С++ можно написать так, что по скорости не будет отличатся от чистого С. Короче, использовать С++ как просто С с классами, как раньше он и задумывался.
     
  5. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    200
    Он не мyдак, он хороший человек. Я его знаю как хорошего человека. Да, у него поганая работа

     
    Последнее редактирование: 31 мар 2025 в 04:15
  6. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    640
    В коде по сути тестируется функция fillFramebuffer, остальное с версией для питона работает почти одинаково:
    UpdateTexture //копирует массив пикселей в аппаратную структуру texture
    DrawTexture //рисует эту texture в окно
    Так что для теста кода можно сделать консольное приложение которое запустит fillFramebuffer, и проверит время выполнения. Тут даже можно printf можно использовать для вывода FPS.
    ЗЫ
    Переписал на UASM, но пока работает с ошибками.
     
  7. aa_dav

    aa_dav Active Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    540
    Тестируется всё честно - а конкретно тестируется JIT-компилятор Numba: https://en.wikipedia.org/wiki/Numba
    Хороший инструмент чтобы ускорять функции пайтона занимающиеся интенсивными вычислениями над массивами завёрнутыми в классы numpy. Просто заточка конкретно под это - при вызове функции смотрим заходят ли в неё в качестве параметров типизированные массивы numpy и если так, то для них собираем на лету машинный код не хуже плюсов (да что там говорить - тем же самым LLVM).
    Собственно вычисление массива множества мандельброта не случайно видимо тут выбрано, как идеально ложащийся на целевое назначение пример - огромное число циклов с простыми числодробилками над типизированными массивами. Просто блеск.
    Ну вот да, есть такое. Ну и как в видео скромно замечается - подойдёт не только лишь всем.
     
  8. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    640
    aa_dav, получается питон компилятор, был интерпретатор, прикрутили намбу, стал компиляторный ЯП. Ну это так можно с любым, сделал транслятор; ваш скриптовый ЯП ---> С; Си компилируем; запускаем; профит!
    [​IMG]
     
  9. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.320
    Ну, справедливости ради, ты далеко не весь петухон-код можешь соптимизировать до уровня плюсов, вне зависимости от того, тот же ллвм у тебя или нет. Динамическая типизация мешает, почти всё должно находится на куче (даже None, True и False - по семантике это объекты синглтоны), числа нефиксированной разрядности, все циклы (формально) через энумераторы и тд. Это утверждение валидно только для какого-то сабсета, у которого типы заранее известны, для которых предопределен набор операций.
     
  10. aa_dav

    aa_dav Active Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    540
    Ну так я же и говорю - для типизированных массивов numpy. На видео есть скриншот где такой массив функцией создаётся - тип в массиве скармливается через параметр, ничего другого туда не запихнёшь.
    Конечно всё чуток сложнее - типы параметров-скаляров тоже принимаются в расчёт, но уже сам этот анализ чреват накладными расходами и в полную силу концепция раскрывается когда числодробятся массивы.
    --- Сообщение объединено, 31 мар 2025 в 18:07 ---
    И если кто видео не смотрел - такие функции надо декорировать декораторами которые расскажут Numba к каким функциям надо пытаться применяться. К другим он применяться не будет, по крайней мере по умолчанию, т.к. бездумное его применение может всё только замедлить по вышеозвученным причинам.
     
  11. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    200
    Проблему python против c++ можно решить обратившись к фильму чужой против хищника. Сложность заключается в том, что нужно определить, кто из них двоих хищник, а кто ксеноморф. Кто победит, тот и победитель. И спорить тут не о чем.
     
    Последнее редактирование: 1 апр 2025 в 07:27
  12. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    640
    Доделал свою демку, работает хорошо. ФПС около 8.5 на моём райзене 3600Х. Маловато будет, но сколько есть. Чисто рендер картинки с отключённой fillFramebuffer, аж 950 кадров. Так что рендер картинки очень мало занимает ресурсов, память всего 9.5 МБ. Использую SSE2 инструкции, cos, log2, log10 вычисляют FPU, сделал небольшие оптимизации в точности переставил циклы x и y местами(чтобы кэш меньше конфликтовал из-за разбега данных), что дало заметный прирост, точность по дефолту, возможно стоит задействовать флаги, чтобы уменьшить точность, вплоть до real4, чтобы быстрей вычисляло. Так что демка автора на питоне весьма впечатляет, а С++ удивляет, по идеи всё равно должен быть быстрей на несколько десятков %. Ну и конечно у него CPU по мощней будет.
    ЗЫ
    Надо ещё на чистой машине протестировать, отключить ВСЁ что не нужно, и в ТЕСТ!
    --- Сообщение объединено, 2 апр 2025 в 20:08 ---
    Кстати, а код можно здорово оптимизировать.
    Код (C++):
    1. const double res = mandelbrot(c_re, c_im);
    Можно предвычислить в таблицу, а косинус можно запараллелить чтобы сразу вычислять 3 значения, придётся сделать макрос-функцию cosps чтобы разом до 4 косинусов вычислять. Кстати, автор шарит, и неспроста добавил модификатор const для входных и выходных параметров, компилятор должен догадаться предвычислить все значения в таблицу:
    Код (C++):
    1.  const double   pre_mandelbrot[FormHeight][FormWidth];  //тут мы вычислили все значения для всех x и y
    По этому код на С++ заметно быстрей, получается и питон такое может, хм. Занятно всё.
    И всё равно, мне непонятно, какого хрена С++ так проигрывает чёртовому пихтону!!!:wacko:
    --- Сообщение объединено, 2 апр 2025 в 23:45 ---
    В общем, реально С++ и даже этот питон, точней джиткомпиль догадался сделать таблицу mandelbrot. Дальнейшая оптимизация, это самостоятельное вычисление cos с заданной точностью, так как результат усекается до 8 бит, т.е. байта, значит вычислять результат косинуса больше скажем 16 бит, не целесообразно. Это реально ускорит в однопоточном тесте демку. У меня сейчас ФПС 18-25, да, вот так колеблется. У автора где-то так, но ФПС не откланяется.
    --- Сообщение объединено, 2 апр 2025 в 23:48 ---
    Кстати, попытался уменьшить точность, но оказалось для косинусов флаги точности не влияют. Только для FADD, FSUB, FSUBR, FMUL, FDIV, FDIVR и FSQRT.
     
    Последнее редактирование: 2 апр 2025 в 18:38
  13. aa_dav

    aa_dav Active Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    540
    На плюсах можно еще архитектуру проца указывать, поколение команд.
    Jit тут конечно может подстраиваться на лету.
    Плюс разницы около единиц процентов могут быть просто статистическим шумом как именно конкретный проц относится к таким тт потокам команд.
     
  14. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    640
    aa_dav, на С++ ещё можно использовать интринсики, что даёт максимальное быстродействие на уровне ассма и даже ВЫШЕ. Питухоний это чисто скриптовый вспомогательный ЯП, просто угождают стаду абязян, вот и лепят всякое. По мне проще уже на плюсах или ассемблере разобраться, чем так мучится на питухоне, задавая принудительно типы, а то питухон не так поймёт. И ещё, памяти эта простейшая демка жрёт не мало, на ассме 9-15 МБ, а на питухоне 140 МБ, или сколько там. А если проект будет намного сложней, и целевой комп старый драндулет с 4 ГБ. Так что всё равно фигня этот ваш питохон с джитами. И ещё, мою демку запустил, и она работает, и на питухонии надо сам питух и плюс стадо библиотек, да ещё, что-то может сломаться, и всё пойдёт не так.
     
  15. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.320
    Никто не делает на Петухоне сложные вычисления на домашних компах из 2000-ых, ну никто в здравом уме.

    Стадо обезьян прототипирует алгоритмы, необходимые бизнесу, на Петухоне, чтобы проверить, что все работает так, как нужно, а потом "добавляют типы", чтобы работало быстрее. Если ты можешь, исходя из задач бизнеса, быстро и без ошибок делать алгоритмы на Ассемблере или Плюсах, то... сначала хотел сказать, что ты будешь делать хорошие деньги на этом, но потом понял, что скорее всего нет, тк скорее всего это тоже будет не выгодно бизнесу из-за того, что никто (кроме тебя) не сможет этот код поддерживать и дорабатывать.

    Опять же это не проблема для того, для чего Петухон используют, но в целом да, забавно, что почему-то у многих сгорает, когда кто-то вдруг заставляет Петухон быть быстрым.
     
  16. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    554
    может петухон 3.179 и обгонит С++11 :)
    в году 2030м... :)
     
  17. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    640
    Пока питухон-джигит, тьфу ты, джит, а то джигиты обидятся. UASM обогнал и С++, и тем более пихона-джита в однопоточном тесте.
    скрин_демки.png
    Странно что ФПС меняется так же по синусоиде, как и цвета на демке. Вероятно это связано со временем вычисления косинуса. На кора 2 дуба, ФПС так же не стабильный, но я там не обновил флаги округления, ну с этим завтра.
     
  18. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    200
    Когда читаю про алгоритмы необходимые бизнесу на васме, хочется добавить мем с 3-мя школьниками которые обсуждают как делать хорошие деньги. Чтобы коммерческая тайна которая здесь открылась не утекла в широкие массы.
     
    Последнее редактирование: 3 апр 2025 в 22:11
  19. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    640
    Research, питоний переоценён, его пихают куда ни попадья. А вообще, он абсолютное ЗЛО.:ireful2:

    Так, решил набросать С++'ов.
    Код (C++):
    1. void fillFramebuffer(float amplitude)
    2. {
    3.     CVector4f   vAmplit, vRes, vCos
    4.     CVector4i   vColors;
    5.     sColor      color;
    6.     vAmplit.set(amplitude, amplitude, amplitude, 0.0);
    7.     float *pTable = pTableMandelbrot;
    8.     for (y=0: y<FormHeight: y++){
    9.         for (x=0: x<FormWidth: x++){
    10.             float res = *pTable++;
    11.             if (res < MAX_ITER){
    12.                 vRes.set(res);
    13.                 vRes.mul(0.3, 0.7, 0.9, 0.0);
    14.                 vRes.add(vAmplit);
    15.                 vCos.cosf(vRes);
    16.                 vCos.mul(127.5f).add(127.5f);
    17.                 vColors.set(vCos);
    18.                 color.set(vColors.i0, vColors.i1, vColors.i2);
    19.                 g_BuffTexture->SetPixel(x, y, color);
    20.             }
    21.         }
    22.     }
    23. }
    Это типа псевдо рабочий С++ код. А может даже очень рабочий, надо только поколдовать с интинстиками в классах. Это вам не это, дебильный, не читабельный питухон, какое прототипирования там, что за бред?:umnik: Берёшь и сразу всё делаешь на С++, можно даже std не подключать, код заработает на чём угодно, ну я имею ввиду по процах с нужной поддержкой инструкций.
     
    Последнее редактирование: 3 апр 2025 в 23:44