История Одного Теста Типа на питоне получилось так же как и на С++. Хотя уже доказано что С++ быстрей питона 400-500 раз. Надо бы ещё на UASM эту задачу решить, графику рисовать OpenGL а может и GDI32 справиться.
Интересное сравнение C++ c C++. Потому что raylib не нейтивная притоновая библиотека, а бинарник, по иронии судьбы написанный на плюсах. И если по большей части производительность теряется в ней, то прямо ну очень показательно.
Так, я бы попросил, рейлиб не на богом проклятых плюсах написана, а чистой, как слеза младенца, православной сишечке.
Rel, на С++ можно написать так, что по скорости не будет отличатся от чистого С. Короче, использовать С++ как просто С с классами, как раньше он и задумывался.
В коде по сути тестируется функция fillFramebuffer, остальное с версией для питона работает почти одинаково: UpdateTexture //копирует массив пикселей в аппаратную структуру texture DrawTexture //рисует эту texture в окно Так что для теста кода можно сделать консольное приложение которое запустит fillFramebuffer, и проверит время выполнения. Тут даже можно printf можно использовать для вывода FPS. ЗЫ Переписал на UASM, но пока работает с ошибками.
Тестируется всё честно - а конкретно тестируется JIT-компилятор Numba: https://en.wikipedia.org/wiki/Numba Хороший инструмент чтобы ускорять функции пайтона занимающиеся интенсивными вычислениями над массивами завёрнутыми в классы numpy. Просто заточка конкретно под это - при вызове функции смотрим заходят ли в неё в качестве параметров типизированные массивы numpy и если так, то для них собираем на лету машинный код не хуже плюсов (да что там говорить - тем же самым LLVM). Собственно вычисление массива множества мандельброта не случайно видимо тут выбрано, как идеально ложащийся на целевое назначение пример - огромное число циклов с простыми числодробилками над типизированными массивами. Просто блеск. Ну вот да, есть такое. Ну и как в видео скромно замечается - подойдёт не только лишь всем.
aa_dav, получается питон компилятор, был интерпретатор, прикрутили намбу, стал компиляторный ЯП. Ну это так можно с любым, сделал транслятор; ваш скриптовый ЯП ---> С; Си компилируем; запускаем; профит!
Ну, справедливости ради, ты далеко не весь петухон-код можешь соптимизировать до уровня плюсов, вне зависимости от того, тот же ллвм у тебя или нет. Динамическая типизация мешает, почти всё должно находится на куче (даже None, True и False - по семантике это объекты синглтоны), числа нефиксированной разрядности, все циклы (формально) через энумераторы и тд. Это утверждение валидно только для какого-то сабсета, у которого типы заранее известны, для которых предопределен набор операций.
Ну так я же и говорю - для типизированных массивов numpy. На видео есть скриншот где такой массив функцией создаётся - тип в массиве скармливается через параметр, ничего другого туда не запихнёшь. Конечно всё чуток сложнее - типы параметров-скаляров тоже принимаются в расчёт, но уже сам этот анализ чреват накладными расходами и в полную силу концепция раскрывается когда числодробятся массивы. --- Сообщение объединено, Mar 31, 2025 at 6:07 PM --- И если кто видео не смотрел - такие функции надо декорировать декораторами которые расскажут Numba к каким функциям надо пытаться применяться. К другим он применяться не будет, по крайней мере по умолчанию, т.к. бездумное его применение может всё только замедлить по вышеозвученным причинам.
Проблему python против c++ можно решить обратившись к фильму чужой против хищника. Сложность заключается в том, что нужно определить, кто из них двоих хищник, а кто ксеноморф. Кто победит, тот и победитель. И спорить тут не о чем.
Доделал свою демку, работает хорошо. ФПС около 8.5 на моём райзене 3600Х. Маловато будет, но сколько есть. Чисто рендер картинки с отключённой fillFramebuffer, аж 950 кадров. Так что рендер картинки очень мало занимает ресурсов, память всего 9.5 МБ. Использую SSE2 инструкции, cos, log2, log10 вычисляют FPU, сделал небольшие оптимизации в точности переставил циклы x и y местами(чтобы кэш меньше конфликтовал из-за разбега данных), что дало заметный прирост, точность по дефолту, возможно стоит задействовать флаги, чтобы уменьшить точность, вплоть до real4, чтобы быстрей вычисляло. Так что демка автора на питоне весьма впечатляет, а С++ удивляет, по идеи всё равно должен быть быстрей на несколько десятков %. Ну и конечно у него CPU по мощней будет. ЗЫ Надо ещё на чистой машине протестировать, отключить ВСЁ что не нужно, и в ТЕСТ! --- Сообщение объединено, Apr 2, 2025 at 8:08 PM --- Кстати, а код можно здорово оптимизировать. Code (C++): const double res = mandelbrot(c_re, c_im); Можно предвычислить в таблицу, а косинус можно запараллелить чтобы сразу вычислять 3 значения, придётся сделать макрос-функцию cosps чтобы разом до 4 косинусов вычислять. Кстати, автор шарит, и неспроста добавил модификатор const для входных и выходных параметров, компилятор должен догадаться предвычислить все значения в таблицу: Code (C++): const double pre_mandelbrot[FormHeight][FormWidth]; //тут мы вычислили все значения для всех x и y По этому код на С++ заметно быстрей, получается и питон такое может, хм. Занятно всё. И всё равно, мне непонятно, какого хрена С++ так проигрывает чёртовому пихтону!!! --- Сообщение объединено, Apr 2, 2025 at 11:45 PM --- В общем, реально С++ и даже этот питон, точней джиткомпиль догадался сделать таблицу mandelbrot. Дальнейшая оптимизация, это самостоятельное вычисление cos с заданной точностью, так как результат усекается до 8 бит, т.е. байта, значит вычислять результат косинуса больше скажем 16 бит, не целесообразно. Это реально ускорит в однопоточном тесте демку. У меня сейчас ФПС 18-25, да, вот так колеблется. У автора где-то так, но ФПС не откланяется. --- Сообщение объединено, Apr 2, 2025 at 11:48 PM --- Кстати, попытался уменьшить точность, но оказалось для косинусов флаги точности не влияют. Только для FADD, FSUB, FSUBR, FMUL, FDIV, FDIVR и FSQRT.
На плюсах можно еще архитектуру проца указывать, поколение команд. Jit тут конечно может подстраиваться на лету. Плюс разницы около единиц процентов могут быть просто статистическим шумом как именно конкретный проц относится к таким тт потокам команд.
aa_dav, на С++ ещё можно использовать интринсики, что даёт максимальное быстродействие на уровне ассма и даже ВЫШЕ. Питухоний это чисто скриптовый вспомогательный ЯП, просто угождают стаду абязян, вот и лепят всякое. По мне проще уже на плюсах или ассемблере разобраться, чем так мучится на питухоне, задавая принудительно типы, а то питухон не так поймёт. И ещё, памяти эта простейшая демка жрёт не мало, на ассме 9-15 МБ, а на питухоне 140 МБ, или сколько там. А если проект будет намного сложней, и целевой комп старый драндулет с 4 ГБ. Так что всё равно фигня этот ваш питохон с джитами. И ещё, мою демку запустил, и она работает, и на питухонии надо сам питух и плюс стадо библиотек, да ещё, что-то может сломаться, и всё пойдёт не так.
Никто не делает на Петухоне сложные вычисления на домашних компах из 2000-ых, ну никто в здравом уме. Стадо обезьян прототипирует алгоритмы, необходимые бизнесу, на Петухоне, чтобы проверить, что все работает так, как нужно, а потом "добавляют типы", чтобы работало быстрее. Если ты можешь, исходя из задач бизнеса, быстро и без ошибок делать алгоритмы на Ассемблере или Плюсах, то... сначала хотел сказать, что ты будешь делать хорошие деньги на этом, но потом понял, что скорее всего нет, тк скорее всего это тоже будет не выгодно бизнесу из-за того, что никто (кроме тебя) не сможет этот код поддерживать и дорабатывать. Опять же это не проблема для того, для чего Петухон используют, но в целом да, забавно, что почему-то у многих сгорает, когда кто-то вдруг заставляет Петухон быть быстрым.
Пока питухон-джигит, тьфу ты, джит, а то джигиты обидятся. UASM обогнал и С++, и тем более пихона-джита в однопоточном тесте. Странно что ФПС меняется так же по синусоиде, как и цвета на демке. Вероятно это связано со временем вычисления косинуса. На кора 2 дуба, ФПС так же не стабильный, но я там не обновил флаги округления, ну с этим завтра.
Когда читаю про алгоритмы необходимые бизнесу на васме, хочется добавить мем с 3-мя школьниками которые обсуждают как делать хорошие деньги. Чтобы коммерческая тайна которая здесь открылась не утекла в широкие массы.
Research, питоний переоценён, его пихают куда ни попадья. А вообще, он абсолютное ЗЛО. Так, решил набросать С++'ов. Code (C++): void fillFramebuffer(float amplitude) { CVector4f vAmplit, vRes, vCos CVector4i vColors; sColor color; vAmplit.set(amplitude, amplitude, amplitude, 0.0); float *pTable = pTableMandelbrot; for (y=0: y<FormHeight: y++){ for (x=0: x<FormWidth: x++){ float res = *pTable++; if (res < MAX_ITER){ vRes.set(res); vRes.mul(0.3, 0.7, 0.9, 0.0); vRes.add(vAmplit); vCos.cosf(vRes); vCos.mul(127.5f).add(127.5f); vColors.set(vCos); color.set(vColors.i0, vColors.i1, vColors.i2); g_BuffTexture->SetPixel(x, y, color); } } } } Это типа псевдо рабочий С++ код. А может даже очень рабочий, надо только поколдовать с интинстиками в классах. Это вам не это, дебильный, не читабельный питухон, какое прототипирования там, что за бред? Берёшь и сразу всё делаешь на С++, можно даже std не подключать, код заработает на чём угодно, ну я имею ввиду по процах с нужной поддержкой инструкций.