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

[Решено] Почему UBO медленнее glProgramUniformMatrix4fv? (21 стр)

Страницы: 117 18 19 20 21 22 Следующая »
#300
(Правка: 1:16) 1:13, 15 янв. 2020

Чувак, перечитай еще раз что ты процитировал, желательно дважды:
MrShoor
> Для скелетки из 16 костей это где-то до 5 трансформаций.
Во-первых - речь о 16 костях, и тут же я пишу что "Минусы - есть оверхед на лишних трансформациях на крайних в иерархии костях." Но вместо того, что подумать почему для 16 костей нужно 5 трансформаций (далее мы это с innuendo обсуждали несколько постов) ты берешь и показываешь самое тупое решение - перебираешь в одном цикле 128 костей, по сути реализовав не 3-й а первый вариант, где я называл еще более жесткие ограничения.

MrShoor
> Сейчас ты вбросил, что можешь в пару строк сделать его в 5 раз быстрее. Я очень
> хочу посмотреть, правда.

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


#301
1:22, 15 янв. 2020

Fantom09
> перебираешь в одном цикле 128 костей
Я не вижу там цикл из 128 костей. А ты точно программист?

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

#302
2:15, 15 янв. 2020

Dampire
> а теперь сам скатился до "GPU быстрее"

я же не утверждал что надо делать только так - вопрос был в якобы неэффективности

> а в том же LiF, которым ты козыряешь,

я не козыряю, а просто пример привожу

#303
(Правка: 2:23) 2:20, 15 янв. 2020

MrShoor
> > ты правда думаешь, что код на cpu и gpu можно сравнивать по O(n)?
> Конечно.

я рад за тебя

у тебя на работе очень много свободного времени как я смотрю

#304
(Правка: 3:09) 2:59, 15 янв. 2020

MrShoor
> Я не вижу там цикл из 128 костей. А ты точно программист?

MrShoor
> Если тот while будет крутиться 128 раз

Глупость заразна. Признаю, сбил ты меня, надо было спорить, я предполагал немного другое решение, хотя я все еще могу выкрутиться, сделав из алгоритма 3 алгоритм 1+))

Суть оптимизации в том, что человек это такая штука, с парой рук, парой ног и головой на палке (принципиальное отличие от иерархии сцены, где нет никакой симметрии, что больше подходит для иерархии сцены. Во втором подходе я это указал, а в третьем - просто забыл упомянуть, просто дав ссылки на презентации).

Каждая такая ветка не зависит от остальных, потому количество потоков нужно было задавать не по количеству костей, а по длине наибольшего пути. Для модели из 16 костей - это 5 суставов, для модели из 64 костей - это 10 суставов. Для модели из 128 костей - хз, будем считать что 26 костей в одну линию, как худший вариант.

Потому, всего за 5 потоков вместо 128 ([numthreads(5, 1, 1)]) можно посчитать все кости, сделав не более 26 умножений в одном цикле, сразу сохраняя промежуточные значения (5 потоков*26 костей=130 умножений).

Если сравнивать с тем алгоритмом, который привел ты (или мой третий), то там будет в худшем случае 1755 умножений, если предположить что все 26 костей расположены по порядку одна за другой. На практике думаю будет раза в 2-3 меньше, так как эти 26 костей вероятнее всего будут распределены по 10 суставам, тоесть где-то 825 умножений (опять же - нужна моделька, чтоб посчитать).

Тоесть заменив всего одну строку я сокращаю количество операций с 1755 до 130, тоесть в 13.5 раз. Если брать равномерное распределение костей по узлам, то это будет где-то 165*5=825 умножений, или в 6,45 раз больше.
Тоесть х5 по количеству умножений достигается элементарно, заменой всего пары цифр.

Так же из твоего алгоритма можно легко (+5-7 строк) получить 4-й вариант, сохраняя промежуточные результаты в шаренную память. Гарантировать порядок невозможно, но 80% инвокаций будет в заданном порядке, если начать так же 5 потоков с кончиков пальцев, то есть большая вероятность что остальные кости уже будут в кеше к моменту когда к ним дойдет очередь, потому, технически, можно так же говорить о порядка 130 умножений+30% промахов в кеше. Что всеравно будет разы быстрее (4,88 раза), относительно варианта, который ты привел.

#305
3:08, 15 янв. 2020

Fantom09
> [numthreads(5, 1, 1)]
Оу оу оу, погоди, ты реально предлагаешь в numthreads ставить 5? А ты точно программист? Знаешь что такое warp, что такое workgroup? По твоему 5 потоков это эффективно на GPU?
Скажи, сколько compute шейдеров ты в своей жизни написал? У меня ощущение, что ты пока еще не писал их вообще.

#306
(Правка: 3:27) 3:27, 15 янв. 2020

MrShoor
> Оу оу оу, погоди
не сомневался что начнется очередной виток бреда... ты неисправим... даже если предположить что это будет не оптимальная утилизация GPU (мы ж усердно забываем что мы вычисляем еще 1000 объектов), сможешь сам догадаться как одной цифрой исправить это страшное недоразумение, чтоб повысить утилизацию с 15% до 100%? )))
За сим позвольте откланяться.

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

#307
(Правка: 3:40) 3:39, 15 янв. 2020

Fantom09
> не сомневался что начнется очередной виток бреда... ты неисправим... даже если предположить что это будет не оптимальная утилизация GPU
Что значит предположить? Ты знаешь что такое WARP (на NVidia) и Wavefront(на AMD) ? Вот серьзено, я хочу услышать твою мотивацию поставить в numthreads 5. Я просто не понимаю, как человек, который имел опыт с CS может предложить поставить туда 5 потоков. Объясни, а?

> (мы ж усердно забываем что мы вычисляем еще 1000 объектов), сможешь сам
> догадаться как одной цифрой исправить это страшное недоразумение, чтоб повысить
> утилизацию с 15% до 100%? )))
А ты усердно забываешь, что это будут разные скелеты, с разным количеством костей, и разным состоянием анимации. Я бы посмотрел, как ты повсишь утилизацию с 15% до 100% в таких условиях. Подозреваю, что никак.

> жду от тебя демку с 1000 актеров по 128 костей, с блендингом анимации между
> кадрами и с отрисовкой всего этого добра без простоя GPU.
А смысл? Такое не нужно ни на CPU, ни на GPU. А то, что реально нужно - это отсилы пару десятков скелетов. Если очень хочется 1000 анимированных персонажей (например это убивца Star Craft 2), то там нужно смотреть предметно. И вполне вероятно, что там даже морфинг зайдет лучше, чем скелетка.
Поэтому давай работать с более реальными цифрами, 20 разных персонажей на 128 костей + скажем 40 объектов окружения на 2-3 кости.

#308
4:09, 15 янв. 2020

MrShoor
> Вот серьзено, я хочу услышать твою мотивацию поставить в numthreads 5
Да вот захотелось мне и поставил, еще вопросы?
Хотя оставил я это специально для тебя, было интересно - ты реально такой тупой или притворяешься?
Я уже даже не намекаю что там больше 1 одной скелетки, тоесть догадаться что в одной группе можно обрабатывать сразу несколько скелеток - это выше твоего ума, тебе это нужно написать и разжевать. Разжую что в одон группе можно обрабатывать 6, 12, 24, 32 и т.д. скелетки - появится новый вопрос (вернее уже появился) - "это будут разные скелеты, с разным количеством костей, и разным состоянием анимации.", разжую что разные скелеты и разное количество костей это одно и тоже, а состояние анимации вообще никаким боком не затрагивает GPU (все считается парой интерполяций в том же компьют шейдере до умножения матриц) появится новый вопрос - что делать с разным количеством костей, разжую что можно мелкие скелетки паковать в один буфер, изменив лишь родителя - появятся новые вопросы и так до бесконечности.

а потом, в конце времён, выяснится - "оно всеравно хуже работает для одной модельки чем кривой алгоритм на CPU с IK, процедурной анимацией, физикой на каждую кость, обновляемую раз в 15мс",
>>>а давай 20 моделек с 40 объектами окружения <======мы сейчас здесь.....

#309
4:10, 15 янв. 2020

Fantom09
> Да вот захотелось мне и поставил
Ясно понятно. Ну жду от тебя демки, которую ты обещал запилить.

#310
8:44, 15 янв. 2020

как пригорело ...

#311
(Правка: 10:47) 9:20, 15 янв. 2020

Fantom09

сделай ему не снизу вверх, а сверху вниз

MrShoor

> а барьеры
шо  за барьеры такие ? покажи

#312
12:38, 15 янв. 2020

MrShoor
> А ты усердно забываешь, что это будут разные скелеты, с разным количеством
> костей, и разным состоянием анимации.
Воу-воу-воу, не мешай оптимизировать. Одной анимации с одним блендстейтом хватит на всех.

#313
12:41, 15 янв. 2020

Fantom09
> (все считается парой интерполяций в том же компьют шейдере до умножения матриц)
Какой парой интерполяций в 2к20? Даже самый убогий блендстейт интерполирует между 4 разными анимациями, и это еще без масок и инверсной кинематики.

#314
12:57, 15 янв. 2020

Dampire
> Воу-воу-воу, не мешай оптимизировать.

подожди, может и просто скининг быстрее считать на CPU?

Страницы: 117 18 19 20 21 22 Следующая »
ПрограммированиеФорумГрафика