【问题标题】:Why is headless NetLogo simulation running slower on a high end computer cluster than on my desktop?为什么无头 NetLogo 模拟在高端计算机集群上的运行速度比在我的台式机上慢?
【发布时间】:2019-06-22 00:52:21
【问题描述】:

在我大学的高端计算集群上,我使用以下脚本运行 Java 程序 (repls.class):

#$ -S /bin/bash
#$ -q serial
#$ -l h_vmem=10G
source /etc/profile
module add java
export CLASSPATH=$CLASSPATH:`pwd`
java -Xmx3000M -Xms128M -Djava.awt.headless=true -classpath ".:./netlogo/app/netlogo-6.1.0.jar" repls 1 1 1 5 "E,16070608MAT,16070608MAT,L160706-08-MATHS-R3.txt,L160706-08-MATHS.csv"

(集群操作系统为CentOS Linux,作业提交由Grid Engine之子处理。)

“repls.class”启动 NetLogo,无头运行我的程序“VizSim19Calib.nlogo”。它还为运行设置了几个全局变量。 “VizSim19Calib.nlogo”运行许多模拟(复制 - 但测试 5)。

问题是每次模拟都需要大约。运行 3 秒,而在我自己的桌面上,每个模拟大约需要 3 秒。 1.5 秒!

我对虚拟内存、堆或堆栈使用什么设置并不重要——即使将这些设置加倍也没有区别,即:#$ -l h_vmem=20G 和 -Xmx6000M -Xms256M

为什么模拟运行如此缓慢? NetLogo 类和 jar 文件的位置是否有问题?
它们位于我的主文件夹下的目录中。

我的 Java 程序“repls.java”基本上是:

import org.nlogo.headless.HeadlessWorkspace;
public class repls {
    public static void main(String[] args) {
    try {   …
        HeadlessWorkspace workspace =
            HeadlessWorkspace.newInstance() ;
        try {
            workspace.open("VizSim19Calib.nlogo",false);
            workspace.command("startup");
            workspace.command("set Test? false");   
            workspace.command("set SIMULATION-RUN-ID " + args[0]);      
            …
            workspace.command(
              "RunOneLessonParamReps SelectedLessonData #Replications"
                        );
            workspace.dispose();
        }
        catch(Exception ex) {
            …
        }
    }
    catch (NumberFormatException e) { 
        …
    } } }

【问题讨论】:

  • 首先猜测是系统之间的 Java 版本差异。您是否使用在集群上使用的相同/相似脚本在本地获取 1.5s 号码?您的桌面是否运行与集群不同的操作系统?由于这些数字如此之小,它几乎可以是任何东西——从磁盘延迟到操作系统的线程启动时间。由于您已经在运行自定义应用程序来执行模型,您可以添加一些分析语句来查看时间差异在哪里(或者它们是否完全在应用程序之外)。
  • 谢谢。好主意。是的,这并不是一个公平的比较:平均桌面 W10 与较新版本的 Java 与集群上的 Linux。相同的 repls.java 程序,但 Windows 和 Linux 服务器必须使用不同的批处理脚本。但无论如何,我确实希望集群更快。我要运行数百万次复制,所以即使是 0.1 秒也很重要。正如你所建议的那样,我会调查我可以改进的地方。谢谢。

标签: java performance netlogo headless


【解决方案1】:

我意识到 NetLogo 在我的桌面上使用了所有 4 个内核,但默认情况下,在大学集群的单个计算节点之一上只使用了 1 个内核。我将其增加到 4 个然后 8 个内核,速度提高是所希望的!我今晚试试16。我认为这件事已经结束了。

【讨论】:

    猜你喜欢
    • 2011-08-28
    • 2019-06-18
    • 1970-01-01
    • 2020-02-21
    • 2011-07-01
    • 2011-03-30
    • 2011-03-17
    • 2019-06-18
    • 1970-01-01
    相关资源
    最近更新 更多