Низкая загрузка ЦП и ядра во время запуска Repast Simphony Java

Я создаю ABM в Repast 2.7, и мы подходим к тому моменту в проекте, когда нам доставляют большие производственные наборы данных для информирования нашей модели.

На своей 32-ядерной рабочей станции я замечаю, что исполняемый файл использует только 3–12 ядер; и среднее потребление процессора стабильно на уровне около 5,5%. Кажется, что нужно использовать больше ядер; или максимальное количество ядер, которые он использует. Я понимаю, что это, вероятно, наивное предположение.

Runtime.getRuntime().availableProcessors()

Отчеты 32 ядра доступны.

Мне интересно узнать, можно ли и как настроить мой проект для использования большего количества ресурсов. Я понимаю, что доступна версия HPC; однако сначала я хотел бы увидеть, смогу ли я заставить симуляцию использовать все доступные ресурсы этой машины, прежде чем приступить к следующему переписыванию (мы пришли в Repast из AnyLogic).

Tick ​​в настоящее время занимает около 60 секунд на наборе данных, который составляет всего 1/30 размера окончательной версии, и мы собираемся выполнить 10 тысяч итераций в течение примерно 100 сравнительных прогонов.

Спасибо за любые идеи!


person Thomas Ingham    schedule 27.08.2020    source источник


Ответы (1)


Repast не предусматривает автоматического распараллеливания кода модели. Код планировщика и агента Repast выполняется в одном потоке, а дисплеи будут работать в отдельных потоках, так что на самом деле только один ЦП выполняет всю работу логики модели. Чтобы улучшить производительность модели, мы рекомендуем два важных шага:

  1. Профилируйте код, чтобы определить, какие части являются вычислительными узкими местами. Yourkit - хороший профилировщик Java, которым я пользовался раньше. Профилирование может помочь определить, являются ли части кода неэффективными и / или вызываются ли они очень часто. Небольшие улучшения часто используемого кода могут значительно ускорить модель.

  2. Распараллеливайте свою модель, явно используя пулы потоков Java. Если логика вашего агента зависит от состояния агента и среды только на предыдущем шаге, это очень простой процесс. Демо-версия Repast Flock - простой пример этой концепции. Короче говоря, вы можете создать диспетчер агентов, который запланирован для каждого тика, и этот диспетчер разделит агентов по количеству процессоров, и каждый из пакетов агентов будет выполняться параллельно.

person Eric Tatara    schedule 27.08.2020