Разработчик пошаговой стратегии The Great Tribes провел серию тестов для оптимизации алгоритма генерации ресурсов. Исследование включало 225 замеров, выполненных на трех компьютерах с процессорами AMD Ryzen.
Игра написана на Java с использованием библиотеки LWJGL и поддерживает процедурную генерацию карт, состоящих из сотен тысяч клеток. Задача алгоритма — выбор заданного числа кандидатов с учетом весов вероятности.
В ходе работы сравнивались три реализации алгоритма: последовательная, параллельная с ручным разбиением массива и параллельная с использованием Stream API. Метод с ручным разделением оказался быстрее в большинстве тестов.
При ручном параллельном подходе массив клеток делится по количеству логических процессоров. Каждая задача формирует локальную очередь PriorityQueue из лучших кандидатов, которые затем объединяются в итоговый результат.
Вариант с использованием метода collect в Stream API позволил сделать код более компактным, однако в большинстве измерений он уступил реализации с ручным управлением потоками и границами массива.




