ПрограммированиеФорумГрафика

Оптимизация. Как еще улучшить внутренние циклы? Масштабирование CSR-спрайтов (13 стр)

Страницы: 112 13 14 15 16 Следующая »
#180
21:33, 30 сен 2022

samrrr
>Ничё не знаю, моя игра на плюсах спокойно 60 фпс играла на том-же ноуте.

Поздравляю. Но на свой ноут много тратить не желаю. Видео на всех ядрах без тормозов и онлайн игру с тормозами тянет, с него и хватит.

>Угу только вот по дефолту они настроены через жопу и постоянно что-то отваливается и неработает. Хоба и сеть накрылась вообще без причин. Начал копать и оказалось что это баг ещё 10 летней давности и никто его и не собирается фиксить. И примерно тоже самое с другими вещами "замечательного" линукса.

А в винде вообще вместо настроек шишь без масла. Старые баги там также исправляют - только те, которые волнуют граждан в жёлтых штанах. Зато анальный зонд всё толще и толще.

>Если ты лубишь по часу в день копаться в оси и пытаться её починить то тебе норм.

Всё что надо было починить, починено давно. В следующий раз чинить и настраивать придётся после апгрейда железа. Сейчас же чинить приходится винду в ноуте. Она такая тупая, что при старте не умеет полечить ошибки на нтфс дисках, потому часто приходится грузить бубунту и запускать диспетчер разделов КДЕ чтобы полечить все нтфс разделы. Лечит он быстро, что и на каком разделе исправляет, по логам так и не понял, влом полчаса его изучать, винда после этого грузится, но однажды процедуру приходится повторять.

>Ты вообще понимаешь, что установки в линуксе идут через компил сорцов с помощью гцц?

Это ты не понимаешь, что кроме гентообразных дистрибутивов, есть дистрибутивы с пакетами, в которых компилировать нужно лишь недостающее и если хочешь пропатчить. А через какое-то время почти ничего нового в линукс через гцц невозможно установить пока не поменяешь обновлениями почти весь линукс - тупо версии будут не совпадать.

>Впервые вижу чтобы кто-то хвастался тем, что либа это целиковый кусок.

Это же замечательно с точки зрения производительности и удобства применения - базовые функции поддерживают максимум базовых типов переменных. А для уменьшения веса бинаря есть умная линковка, которая шинкует скомпиленный код на мелкие кусочки, выбирает нужные и потом линкует - те самые опции -XX -CX в fpc. Время компиляции они удлиняют на копейки. Если кому-то это потом мешает понимать чужую дизасемблированную программу, то это его личные проблемы, у авторов же исходники есть.

>Это тот бенчмарк где кто-то спецом отрубил оптимизацию плюсов? Ты вообще вкурсе как делать бенчмарки?

Это не оптимизация, а лохонизация. В паскале тоже оптимизация было на включена. Цикл выполнялся миллиард раз специально чтобы можно было заметить разницу в производительности просто посмотрев на часы или запустив обе программы разом. Весь миллиард выполнений задуман по сценарию. Если бы нужно было схимичить, то и в паскале мог написать вот такой цикл:

i:=1000000000;
for i:=i to 1000000000 do бла-бла-бла;

А если тебе так нужна эта опция оптимизации, то для подсчёта реальной скорости в код пришлось бы добавить лажу, которая не дала бы ей сработать - компилятор просто не смог бы угадать какие витки цикла понадобятся в будущем. А без этой лажи подсчёт скорости работает более чисто. В том хелловорде оптимизация лишь исправляет то, что компилятор считает невнимательностью программиста, а там невнимательности нет, потому это уже порча кода.

>Я я бы не отказался, хоть прямо сейчас) Только вот пускать русских не хотят.

А кто-то хотел бы на большую землю, вот только тоже не очень пускают и с голой жопой под мостом сидеть не интересно.

#181
8:57, 2 окт 2022

  Ну у вас тут и дискуссия).
  Вынес все циклы в функции избавился полностью от даблов. Из оставшихся оптимизаций это замена div на обращение к precalculated таблице, но после все предыдущих оптимизаций, можно будет выиграть всего лишь 10 миллисекунд).
  Еще одна серьезная оптимизация может снять, по моим расчетам, еще 30-40 секунд, но это нужно уже через ассемблерные вставки векторизировать надо те выражения, о которых упоминал ранее, в посте #52. Заменял даже такие куски на процедуры, как советовал invis, но потеря производительности на 10 мс. в лучшем случае, так что решил просто захардкодить.
  В итоге удалось сократить время с 404 миллисекунд до 253, то есть почти в 1.6 раз, что уже довольно таки неплохо в поставленных задачей рамках:
Sprites_ScaleDown_Optimized | Оптимизация. Как еще улучшить внутренние циклы? Масштабирование CSR-спрайтов

Кто там говорил, что нужно полагаться на компилятор, а ручная оптимизация ничего не решает? И это еще без ассемблера!

  Ну и получившийся код несколько "сократился":

+ Показать

  Всем спасибо за помощь!
P.S. Это еще без клиппинга кстати. С ним простыни кода будут более монструозными, но оно того стоит, так как идет проверка не всех пикселей, а только начала и конца скан линии.

#182
9:04, 2 окт 2022

ArtProg
> 0.5-0.01
повторюсь, компилятор FPC вернее всего не преобразует такие данные и они будут каждый раз вычисляться.

#183
9:08, 2 окт 2022

  Mirrel, ага, забью в константы тогда. Спасибо за заметку!
P.S. Теперь еще осталось подождать, когда добавят в Лазарус SIMD-интринсики).

#184
9:20, 2 окт 2022

ArtProg,

+ часть из того что не оптимизировано.

но на самом деле больше. Позже я ещё много чего нашёл.

#185
9:37, 2 окт 2022

  Mirrel, спасибо за видео! А есть еще, что то на тему SIMD-векторизаций в Лазарусе? 
  Mirrel>Позже я ещё много чего нашёл
  Хоть и не настаиваю, но если будет время, было бы неплохо, если бы Вы рассказали об этом немного подробнее.
  P.S. Можете еще накидать ссылок по SIMD оптимизациям?
  (Если будет, что-то по векторизации в Лазарусе, то будет вобще круто).
  P.S.2.Теперь надо бы и отдохнуть как следует. Так что, если долго не буду отвечать, то либо вижу десятый сон, либо занялся очередной оптимизацией).

#186
9:49, 2 окт 2022

ArtProg
форум 1
форум 2
а вообще, просто по поиску сделай на форуме Lazarus, там немало поднималось тем.

#187
12:38, 2 окт 2022

Skvoznjak
> запустив обе программы разом
Ясно, всё понял, ты живёшь в мире своих иллюзий и необучаемый. Продолжать с тобой диалог бессмысленно.

ArtProg
> В итоге удалось сократить время с 404 миллисекунд до 253, то есть почти в 1.6
> раз,
Лучшеб опенжл изучил, проще, быстрее и рендерит он треугольнички быстрее.

#188
13:09, 2 окт 2022

ArtProg
> Можете еще накидать ссылок по SIMD оптимизациям?
Я уже кидал, если рейтрейсер сам по себе не интересен, см. начало разделов 2 и 3:
https://habr.com/ru/post/685228/
В FPC пытались сделать некое подобие векторных расширений:
http://forum.lazarus.freepascal.org/index.php?topic=32741.0
Но когда я пробовал пару лет назад, оно работало только на элементарных примерах вроде a=b+c, на более сложных падало.
В FPC с бэкэндом LLVM (а также в Oxygene) должна работать автовекторизация.

Но конкретно спрайты рисовать и правда проще через OpenGL. Всякие доп. операции типа поворота/масштабирования/блендинга/сглаживания, которые на CPU нужно отдельно прикручивать, там практически бесплатны. И абсолютно пофиг, на Паскале или Си написано.

#189
13:55, 2 окт 2022

samrrr
>Ясно, всё понял, ты живёшь в мире своих иллюзий и необучаемый. Продолжать с тобой диалог бессмысленно.

У тебя плюсы мозг съели и на парсер большого текста мощностей не хватает, увидел понятный фрагмент текста и сделал по нему вывод о значении всего логического массива. Вот потому на плюсах игры и не пишу - не смогу потом нормально мыслить о чём-то кроме написания кода на плюсах, а рабов художников и дизайнеров у меня нет.

>Продолжать с тобой диалог бессмысленно.

Обмануть не получается, проблема.

#190
14:06, 2 окт 2022

invis
> Но когда я пробовал пару лет назад, оно работало только на элементарных
> примерах вроде a=b+c
Попробовал сейчас - увы, прогресс там скорее отрицательный, в FPC 3.2.2 даже простой пример работает только так:
https://gcc.godbolt.org/z/vqfKh7er5
А например без const уже не компилируется. Из типов поддерживается только Single/Double c командами SSE.

#191
14:17, 2 окт 2022

invis
> которые на CPU нужно отдельно прикручивать
А просто реализовать их так-же как и на видюхе не пробовал?

#192
14:56, 2 окт 2022

invis
> прогресс там скорее отрицательный

        movq    %rdi,%rax
        vmovups (%rax),%xmm0
        addps   (%rsi),%xmm0
        vmovups %xmm0,(%rdx)
        ret

что не так?

#193
18:23, 2 окт 2022

samrrr
> А просто реализовать их так-же как и на видюхе не пробовал?
Так я о том и пишу, что нужно ручками реализовывать. А на видюхе уже есть.
Mirrel
> что не так?
Очень легко ломается, легче, чем в предыдущих версиях компилятора. Убрал const при передаче параметров - уже Internal Error.
Если тебе интересно - ты же топишь за могучий Паскаль - попробуй более сложный пример, у меня раньше ломалось именно на более сложном, компилировалось, но в результате AV.

#194
19:24, 2 окт 2022

invis
> Так я о том и пишу, что нужно ручками реализовывать. А на видюхе уже есть.
Я тебя огорчу, но на видюхе этого нет, видюха не умеет поворачивать масштабировать итд. Она умеет только рисовать треугольники и вычислять текстурные координаты. Ну есть ещё мипмапы и дд.

Страницы: 112 13 14 15 16 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.