From ec73210b675fd90568c5193e6ae6ef82ce81be6c Mon Sep 17 00:00:00 2001 From: Dante Niewenhuis Date: Tue, 26 Nov 2024 11:09:21 +0100 Subject: Streamlined the FlowNetwork for better performance (#273) --- .../experiments/base/runner/ExperimentCli.kt | 11 +-------- .../experiments/base/runner/ExperimentRunner.kt | 26 +++++++++++++--------- .../experiments/base/runner/ScenarioRunner.kt | 7 ++---- .../experiments/base/ScenarioIntegrationTest.kt | 8 +++---- 4 files changed, 22 insertions(+), 30 deletions(-) (limited to 'opendc-experiments/opendc-experiments-base') diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentCli.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentCli.kt index e067bf45..f4df7991 100644 --- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentCli.kt +++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentCli.kt @@ -25,11 +25,9 @@ package org.opendc.experiments.base.runner import com.github.ajalt.clikt.core.CliktCommand -import com.github.ajalt.clikt.parameters.options.default import com.github.ajalt.clikt.parameters.options.defaultLazy import com.github.ajalt.clikt.parameters.options.option import com.github.ajalt.clikt.parameters.types.file -import com.github.ajalt.clikt.parameters.types.int import org.opendc.experiments.base.experiment.getExperiment import java.io.File @@ -49,15 +47,8 @@ internal class ExperimentCommand : CliktCommand(name = "experiment") { .file(canBeDir = false, canBeFile = true) .defaultLazy { File("resources/experiment.json") } - /** - * The number of threads to use for parallelism. - */ - private val parallelism by option("-p", "--parallelism", help = "number of worker threads") - .int() - .default(Runtime.getRuntime().availableProcessors() - 1) - override fun run() { val experiment = getExperiment(scenarioPath) - runExperiment(experiment, parallelism) + runExperiment(experiment) } } diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentRunner.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentRunner.kt index 0b45806b..079db6fc 100644 --- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentRunner.kt +++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentRunner.kt @@ -22,35 +22,39 @@ package org.opendc.experiments.base.runner +import me.tongfei.progressbar.ProgressBarBuilder +import me.tongfei.progressbar.ProgressBarStyle import org.opendc.experiments.base.experiment.Scenario -import java.util.concurrent.ForkJoinPool /** * Run scenario when no pool is available for parallel execution * * @param experiment The scenarios to run - * @param parallelism The number of scenarios that can be run in parallel */ -public fun runExperiment( - experiment: List, - parallelism: Int, -) { +public fun runExperiment(experiment: List) { val ansiReset = "\u001B[0m" val ansiGreen = "\u001B[32m" val ansiBlue = "\u001B[34m" setupOutputFolderStructure(experiment[0].outputFolder) + val pb = + ProgressBarBuilder().setInitialMax(experiment.sumOf { scenario -> scenario.runs.toLong() }) + .setStyle(ProgressBarStyle.ASCII) + .setTaskName("Simulating...").build() + for (scenario in experiment) { - val pool = ForkJoinPool(parallelism) println( "\n\n$ansiGreen================================================================================$ansiReset", ) println("$ansiBlue Running scenario: ${scenario.name} $ansiReset") println("$ansiGreen================================================================================$ansiReset") - runScenario( - scenario, - pool, - ) + + for (seed in 0..