为什么无头NetLogo模拟在高端计算机群集上的运行速度比在台式机上慢?

时间:2019-06-21 11:33:38

标签: java performance netlogo headless

在大学的高端计算集群中,我使用以下脚本来运行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的Son处理。)

“ 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) { 
        …
    } } }

1 个答案:

答案 0 :(得分:2)

我意识到NetLogo默认使用我台式机上的所有4个内核,但是在大学集群的单个计算节点之一上只使用1个。我将其增加到4核再到8核,并且速度提高是所希望的!今晚我会尝试16点。我认为此事已经结束。