【问题标题】:Low CPU and Core Usage during Repast Simphony Java RunRepast Simphony Java 运行期间 CPU 和内核使用率低
【发布时间】:2020-12-16 17:04:36
【问题描述】:

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

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

Runtime.getRuntime().availableProcessors()

报告有 32 个内核可用。

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

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

感谢您的任何想法!

【问题讨论】:

    标签: java repast-simphony


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-30
      相关资源
      最近更新 更多