BingoBongo
> много данных, которые никак не связаны в момент рендеринга, обрабатываются
> последовательно
а если паралелльно, то синкать не надо?
innuendo
> а если паралелльно, то синкать не надо?
между потоками, выполняющими рендеринг, практически нет. между игровым и остальными потоками синк будет в любом случае.
BingoBongo
> между потоками, выполняющими рендеринг, практически нет
ну если разные потоки что-то считают потом в итоге нужно же делать синк
innuendo
> ну если разные потоки что-то считают потом в итоге нужно же делать синк
а что там синкать? остается синк вида расставить семафоры между коммандбуферами и отправить все в gpu на рендеринг.
BingoBongo
> остается синк вида расставить семафоры между коммандбуферами и отправить все в
> gpu на рендеринг.
это что касается работы с gpu, а потоки на cpu?
innuendo
> а потоки на cpu?
конкретнее, о каких данных идет речь?
BingoBongo
> конкретнее, о каких данных идет речь?
один поток обсчитывает партиклы, другой hiz и прочее - партиклы рисуются после opaque
innuendo
это так сложно синхронизировать?
BingoBongo
> это так сложно синхронизировать?
вопрос же не в сложности - а надо или нет?
innuendo
все что параллелится должно быть распараллелено, если где-то надо синкать - это не значит, что выигрыша не будет. меня больше смущает количество доступных потоков - в одном кадре их будет 4, а в другом уже 1, потому что есть игровые задачи. мне кажется, может получится, что среднее количество свободных потоков может так и остаться на уровне 2 на кадр. в итоге надо делать какой-то умный планировщик, который должен будет выдерживать баланс приоритетов задач. вот это уже непонятно.
innuendo
> > половина тредов под рендер используется,
>
> и для чего там много потоков в рендере?
Самый простой случай - сортировка объектов по дальности. Список можно сортировать многопоточно, в смысле каждую часть списка сначала, например, порезать на 8 частей (ядер). Сортировать каждую часть отдельно. Merge sort так оптимизируется.
Еще примеры.
Пробегать видимые объекты по октри. Каждую ноду в октри отдельным потоком углубляясь.
Искать затронутые объекты источником. Отдельный поток для каждого источника (forward rendering).
betauser
> Самый простой случай - сортировка объектов по дальности. Список можно
> сортировать многопоточно, в смысле каждую часть списка сначала, например,
> порезать на 8 частей (ядер). Сортировать каждую часть отдельно. Merge sort так
> оптимизируется.
ok, 10 K объектов - порезали на 8 ядер - какой профит реально из твоей практики?
betauser
> Отдельный поток для каждого источника (forward rendering).
forward rendering ещё используется где-то кроме обучение api?
FlyOfFly
> > Отдельный поток для каждого источника (forward rendering).
> forward rendering ещё используется где-то кроме обучение api?
В том мире где есть прозрачные объекты
Тема в архиве.