В высокопроизводительном вычислительном кластере моего университета я использую следующий скрипт для запуска 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, с передачей заданий, обработанной Son of Grid Engine.)
repls.class запускает NetLogo и запускает мою программу VizSim19Calib.nlogo без головы. Он также устанавливает несколько глобальных переменных для запуска.
«VizSim19Calib.nlogo» выполняет много симуляций (репликации - но тестирование с 5).
Проблема в том, что каждая симуляция занимает ок. 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) {
…
} } }