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

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

Страницы: 111 12 13 14 15 16
#225
12:05, 4 окт 2022

Mirrel
> > попробуй более сложный пример
> попробую, если не забуду.
Откопал свой пример (фрагмент рейтрейсера):
https://gcc.godbolt.org/z/655rMeE61
Их хорошего - векторизует. Из плохого - умеет использовать ровно 2 (два) xmm регистра из 16 возможных, в результате постоянно дёргает стек. Не говоря уже о том, что ему вообще-то AVX указан, а получаем SSE. И корректность работы надо проверять, но сейчас уж лень.
В общем, это лучше, чем совсем никакой векторизации (как у Дельфи), но явно не дотягивает до Си, который может уложить те же вычисления в 5 FMA и 3 сложения:
https://gcc.godbolt.org/z/eKhn6rhzT

#226
(Правка: 18:32) 18:16, 6 окт 2022

  Проведя некоторые оптимизации удалось достичь почти невозможного - код стал быстрее в 2.32 раза! от изначальной скорости. Все еще ручная оптимизация(пока что без векторизации, но избавился даже от целочисленного деления)):

+ Код с финальной оптимизацией
+ Картинко с результатом

  Думаю на этом и остановлюсь. Потом еще сделаю тест со сравнением скорости с алгоритмом от Mikle.

#227
18:53, 6 окт 2022

ArtProg
> Потом еще сделаю тест со сравнением скорости с алгоритмом от Mikle.
Там качественное масштабирование и двойной цикл для каждого пикселя. Обычно это делают в 2 прохода с одинарным циклом, но неважно - любой цикл медленнее, чем совсем без цикла.

#228
(Правка: 19:11) 19:03, 6 окт 2022

  invis, да, я в курсе о качестве. Сравнивал и на спрайтах с большим количеством деталей и на сетках. Оказывается, того же качества можно добиться в один проход тупо усредняя значение с тем, на котором остановилась скан линия, то есть по текущему пикселю. И каждый пиксель служит как бы аккумулятором для финального значения(можно даже математически это доказать, но мне что-то лень расписывать). Более того, приемлемое качество сохраняется, если оставить 2 if-а во внутреннем цикле(как в моем коде) с точным просчетом весовых коеффициентов для площадей и последующей записью в текущий и следующий пиксели, а в два нижних пикселя тупо записывать значение текущего пикселя исходного изображения вобще без усреднений. Ну а там, где качество начинает больше страдать при таких оптимизациях, то добавлены специальные ограничения на множители масштабирования и уже будут вызываться другие функции масштабирования(код выше сохраняет качество при множителе меньшем или равным 0.75, при большем множителе начинают проявляться небольшие рваные пиксели, поэтому масштабирование переключается на стандартное, без сглаживания).

#229
19:55, 6 окт 2022

ArtProg
> код выше сохраняет качество при множителе меньшем или равным 0.75
Ну это известный факт, что для ограниченных масштабов можно применять упрощённые алгоритмы.
В тех же видеокартах встроенное сглаживание - довольно примитивная билинейка по 4-м точкам, но всё-таки у неё допустимый диапазон побольше, увеличение произвольное, уменьшение до 0.5 (для меньших масштабов - мип-мэппинг, заранее уменьшенные в 2,4 и.т.д. раз картинки).
Я хотел сказать, что сравнивать скорость разных алгоритмов нет большого смысла, и так понятно, что упрощённый быстрее. Но не настолько быстрее, как мог бы быть написанный на Си.

#230
20:38, 6 окт 2022

invis
> уменьшение до 0.5 (для меньших масштабов - мип-мэппинг, заранее уменьшенные в
> 2,4 и.т.д. раз картинки).
Мип мапинг начинается как только идёт уменьшение менее 1.0 если не накрутить биас мипмапов. И единственный адексатный способ это мипмапы, а для 3д анизотропные ещё нужны.

Обычно как только люди понимают что делает видюха и как она это делает, перестают пытаться на цпу пиксели рисовать так как это чудовищно, нереально неэффективно, а производительность на цпу ещё много зачем понадобится. Фактически на цпу нужно считать линейный код, а на гпу параллельный. Тот-же парсинг текста на гпу не сделать нормально так как это задача для линейного прохода. А рисование треугольничков это параллельная задача(за исключением dd) и гпу с ней отлично справляется, из-за того что все пиксели треугольника можно запустить на отрендеривание параллельно.

#231
21:53, 6 окт 2022

  samrrr, видюху будет еще чем нагрузить, главное фантазия). Вы ж надеюсь понимаете, что игра это не только рендер. Тот же AI например или физика.

#232
0:03, 7 окт 2022

ArtProg
> samrrr, видюху будет еще чем нагрузить, главное фантазия).
И чем ты видюху нагружаешь?

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

#233
0:22, 7 окт 2022

ArtProg
> Тот же AI например
Аи на шнйдерах? А я бы посмотрел на это)))

ArtProg
> физика
Физика сложнее кубиков на шейдерах? А такое бывает чтоли?)

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

#234
17:53, 7 окт 2022

  samrrr
  >Аи на шнйдерах? А я бы посмотрел на это)))
  Я бы тоже). Есть парочка идей на этот счет, но это уже как-нибудь потом.
  >Физика сложнее кубиков на шейдерах? А такое бывает чтоли?)
  Частицы, в частности симуляция всяких жикостей. На процессоре считать такое наверное будет слишком затратно.

#235
17:58, 7 окт 2022

ArtProg
> Частицы, в частности симуляция всяких жикостей. На процессоре считать такое
> наверное будет слишком затратно.
А знаешь что еще выгодно считать на видеокарте, и что затратно на процессоре?

+ Показать
#236
(Правка: 18:06) 18:04, 7 окт 2022

MrShoor, для 2D пока что с головой хватает. Тяжелые обьекты(типа трехмерных персонажей персонажей, как в ремейке Castlevania или The Darkest Tales, где окружение спрайтовое, кроме персов), если такие и будут, то да, будет присылать видеокарта.

#237
18:07, 7 окт 2022

ArtProg
>   Частицы, в частности симуляция всяких жикостей.
Я же сказал сложнее, а не проще) Частицы то на гпу запросто делаются.

#238
18:13, 7 окт 2022

ArtProg
> для 2D пока что с головой хватает.
Вижу. Настолько хватает, что ты даже топик по оптимизации создал. :)
А делал бы на GPU - подобного топика не было бы, ибо там стократный запас производительности для 2д графики.

#239
18:24, 7 окт 2022

🍬x2

Страницы: 111 12 13 14 15 16
ПрограммированиеФорумГрафика