Найти в Дзене
Виталий Власов

Unity Job System ParallelFor

Оглавление

При планировании заданий может быть только одно задание, выполняющее одну задачу. В игре часто требуется выполнить одну и ту же операцию с большим количеством объектов. Для этого есть отдельный тип задания IJobParallelFor.

Примечание. Задание «ParallelFor» - это собирательный термин в Unity для любой структуры, которая реализует интерфейс IJobParallelFor.

Задание ParallelFor использует NativeArray для данных в качестве источника данных. Задания ParallelFor работают на нескольких ядрах. Существует одно задание на ядро, каждое из которых обрабатывает подмножество рабочей нагрузки. IJobParallelFor ведет себя как IJob, но вместо одного метода Execute он вызывает метод Execute один раз для каждого элемента в источнике данных. В методе Execute есть целочисленный параметр. Этот индекс предназначен для доступа и работы с одним элементом источника данных в рамках реализации задания.

Пример определения задания ParallelFor
Пример определения задания ParallelFor

Планирование ParallelFor заданий

При планировании заданий ParallelFor вы должны указать длину разделяемого источника данных NativeArray. Система заданий Unity C # не может знать, какой NativeArray вы хотите использовать в качестве источника данных, если в структуре их несколько. Длина также сообщает C Job System, сколько методов Execute ожидать.

По ту сторону

Планирование заданий ParallelFor более сложное. При планировании заданий ParallelFor система заданий C # делит работу на партии для распределения между ядрами. Каждый пакет содержит подмножество методов Execute. Затем система заданий C # планирует до одного задания в собственной системе заданий Unity для каждого ядра ЦП и передает этому заданию несколько пакетов для выполнения.

-3

Когда нативное задание завершает свои партии раньше других, оно крадет оставшиеся партии(batch) из других нативных заданий. Он украл только половину оставшихся пакетов нативного задания за раз, чтобы обеспечить локальность кэша.

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

Пример планирования работы ParallelFor

Задание сложения двух значений с плавающей точкой
Задание сложения двух значений с плавающей точкой
Код основного потока
Код основного потока