Ограничение или определение количества пакетов в IJobS

Программирование на Юнити.

Ограничение или определение количества пакетов в IJobS

Сообщение AlexandrBuryakov 21 июл 2019, 09:45

1) Есть ли способ узнать на сколько пакетов (потоков или как оно там называется), сколько работ распределяется в каком-либо из IJobs?
Простой "IJob" монолитный (не разбивается на куски), но способен работать параллельно другим, если нет с ними зависимости. Как собственно и "Entities.ForEach", только он всегда однопоточный ( в главном потоке) .

В идеале мне бы хотя бы для "Manual iteration" https://docs.unity3d.com/Packages/com.u ... ation.html

2) Причина, мне нужно создавать отдельные массивы (буферы) для каждого потока (пакета или как оно там, в общем на каждое отдельный блок обработки Job), что бы туда записывать данные и избегать условий гонки (возможности одновременной попытки записать в одно и то же место). А потом я просто отдельно сложу все результаты.

3) Вижу пару вариантов, но они сомнительны, но всё же.
3.a)Первый и очень не хочу делать, так как всё сделал в "Manual iteration" и там как то всё понятнее ( явно ). Никогда не ладил с тем, что не знаю как устроено под капотом. Но и узнавать как там под капотом плохо умею, мозг слабоват для этого.
В общем планировать "IJob" вручную, распределять буферы и куски массивов вручную.

3.b) Второй. В "Manual iteration" при планировании "IJobParallelFor" в "...Schedule(chunks.Length, bloks, inputDeps);"
int bloks = ( chunks.Length / System.Environment.ProcessorCount ) + 1; //+1, что бы не создавать условия проверки на ноль.
Но на сколько это хорошее решение, потоки же вообще не в прямой зависимости от ядер делаются? Пакетов от Job-са например может быть 16, а ядра всего 4... ( Умножить System.Environment.ProcessorCount на три перед делением? ) И можно ли так гарантированно знать на сколько пакетов распределится работа?
System.Environment.ProcessorCount - https://docs.microsoft.com/en-us/dotnet ... mework-4.8
:)
AlexandrBuryakov
UNIт
 
Сообщения: 59
Зарегистрирован: 26 янв 2019, 14:36

Re: Ограничение или определение количества пакетов в IJobS

Сообщение lawson 04 авг 2019, 23:36

При разделении работы на части они могут как выполниться в разных потоках так и в одном, все зависит от нагрузки.
Во вторых: вопрос вообще не в ядрах, у вас может быть хоть 100 ядер, но будут задействованы только два из них.
lawson
UNIверсал
 
Сообщения: 481
Зарегистрирован: 14 сен 2012, 21:20


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16