Repast Simphony Java运行期间的CPU和内核使用率较低

问题描述

我正在Repast 2.7中构建ABM,并且在项目中,我们将交付更大的生产数据集以通知我们的模型。

我在32核工作站上注意到可执行文件仅使用3-12核;平均cpu消耗量稳定在5.5%左右。似乎应该使用更多的内核。或最大化其使用的核心。我意识到这可能是幼稚的猜测。

Runtime.getRuntime().availableProcessors()

报告32个核心可用。

我想知道是否以及如何配置我的项目以利用更多资源。我意识到可以使用HPC版本。但是,我首先想看看是否可以进行仿真以使用此计算机的所有可用资源,然后再进行另一次重写(我们从AnyLogic转到Repast。)

Tick目前仅花费最终版本大小的1/30的数据集大约需要60秒,而我们将在大约100个比较运行中进行上万次迭代。

感谢任何想法!

解决方法

Repast不提供模型代码的自动并行化。 Repast调度程序和代理代码在单个线程中运行,而显示将在单独的线程中运行,因此实际上只有一个CPU在完成模型逻辑的所有工作。为了提高模型性能,我们建议两个重要步骤:

  1. 分析代码以确定哪些部分是计算瓶颈。 Yourkit是我过去使用过的优秀Java分析器。分析可以帮助确定部分代码是否效率低下和/或被频繁调用。对常用代码进行小的改进可以大大加快模型的速度。

  2. 通过显式使用Java线程池来并行化模型。如果您的代理逻辑仅在上一步中才依赖于代理和环境的状态,则此过程非常简单。 Repast“群”演示是此概念的简单示例。简而言之,您可以创建一个针对每个刻度计划的代理“管理器”,管理器将按CPU数量划分代理,并让每批代理并行执行。