Стоит ли париться насчет многопоточности (типа рендер в главном потоке,

физика и еще что-нибудь в отдельном потоке) в петпроекте для изучения графона + for fun? В целом планирую делать все в одном потоке пока что, попутно подключая второй поток, если будут очевидные какие-то места для распараллеливания. Могу ли попасть позже на масштабное переписывания кода/другой гемор, если все же решу добавить многопоточность и вообще как часто юзаются и оправданы такие схемы, когда рендер в отдельном потоке, другие задачи в других?
петпроект: тридэ, вулкан.

17 ответов

18 просмотров

я бы рекомендовал пул потоков с тасками

Rewind-Termal Автор вопроса
disba1ancer
я бы рекомендовал пул потоков с тасками

Тобишь, рендерим и фигачим все в одном потоке, и, если есть, что отдать на параллель - кормим пулу потоков и все, независимо от типа задачи и подсистемы (логика, физика, итдитп), верно понимаю?

disba1ancer
вообще всё что можно на пуле потоков

пул должен быть умный и уметь в «широкие» таски

Rewind-Termal Автор вопроса
Лис Электронщик
зависит от того, что ты делаешь

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

disba1ancer
что значит широкие?

это таски которые для оптимального своего выполнения требуют отожрать сразу все вычислительные мощности и потоки

Rewind Termal
Пожалуй, проблема в том, что из-за отсутствия опыт...

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

Лис Электронщик
это таски которые для оптимального своего выполнен...

это очень сложный пул, не думаю что овчинка стоит выделки, я за простоту

Ну это самый простой вариант. Пока один поток считает логику для текущего кадра, другой - рисует предыдущий.

Rewind Termal
Пожалуй, проблема в том, что из-за отсутствия опыт...

в идеале, при полном распараллеливании update и render, первый должен непрерывно с фиксированной частотой (30 раз в сек например), генерировать полный стейт объектов сцены. Рендер тред будет выбирать два последних и интерполировать все поля (позицию, поворот и прочие параметры) между ними по текущему времени. Тогда render и update будут полностью независимы и никто никого ждать не будет. Плюс сам рендер тоже хорошо параллелится на CPU, например заполнение command buffer'ов для depth pre-pass, occlusion test, shadow pass, gbuffer pass, particles и transparent pass. Также можно подумать о GPU распараллеливании на async-compute очереди, например SSAO (tex fetch bound) можно запускать сразу после depth pre-pass, с чем-нибудь что упирается в ALU. Ещё можно подумать про async-present, это когда compute очередь работает параллельно с graphics очередью следующего кадра. Это например, позволит распараллелить постпроцессинг предыдущего кадра с depth prepass и gbuffer pass текущего. В идеале, чтобы всё это щупать и видеть разницу, у тебя должен быть достаточно "богатый" движок с тяжёлой игровой логикой и кучей пассов, а не просто спонза с парой шейдеров.

Timur Gagiev
в идеале, при полном распараллеливании update и re...

А когда объект телепортируется? Флаг весить на это?

Похожие вопросы

Обсуждают сегодня

Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
А в каком формате фреймы? Сам формат сейчас придумываешь, или что-то готовое нужно распарсить?
Okhsunrog
5
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Карта сайта