Repast Simphony 期间 CPU 和核心使用率低 Java 运行

Low CPU and Core Usage during Repast Simphony Java Run

我正在 Repast 2.7 中构建一个 ABM,我们正在向项目中交付更大的生产数据集以告知我们的模型。

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

Runtime.getRuntime().availableProcessors()

报告有 32 个内核可用。

我想知道是否以及如何配置我的项目以利用更多资源。我知道 HPC 版本可用;然而,在进行另一次重写之前,我首先想看看我是否可以让模拟使用这台机器的所有可用资源(我们从 AnyLogic 来到 Repast。)

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

感谢任何想法!

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

  1. 分析代码以确定哪些部分是计算瓶颈。 Yourkit 是我过去用过的一个很好的 Java 分析器。分析可以帮助确定部分代码是否效率低下 and/or 调用非常频繁。对常用代码的小改进可以显着加快模型速度。

  2. 通过显式使用 Java 线程池来并行化您的模型。如果您的代理逻辑仅在上一步中依赖于代理和环境的状态,那么这是一个非常简单的过程。 Repast“Flock”演示是此概念的一个简单示例。简而言之,您可以创建一个为每个 tick 安排的代理“管理器”,该管理器将根据 CPU 的数量划分代理,并让每批代理并行执行。