diff options
| author | Dante Niewenhuis <d.niewenhuis@hotmail.com> | 2024-11-26 11:09:21 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-26 11:09:21 +0100 |
| commit | ec73210b675fd90568c5193e6ae6ef82ce81be6c (patch) | |
| tree | 89b530b53898752f7800e5109548412b84fcd375 /opendc-experiments/opendc-experiments-base/src/main/kotlin | |
| parent | 698a64615d0eef8994fc1eaf0a3b71da194e1dcd (diff) | |
Streamlined the FlowNetwork for better performance (#273)
Diffstat (limited to 'opendc-experiments/opendc-experiments-base/src/main/kotlin')
3 files changed, 18 insertions, 26 deletions
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<Scenario>, - parallelism: Int, -) { +public fun runExperiment(experiment: List<Scenario>) { 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..<scenario.runs) { + println("$ansiBlue Starting seed: $seed $ansiReset") + runScenario(scenario, seed.toLong()) + pb.step() + } } + pb.close() } diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt index 4d6069e4..30c129c2 100644 --- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt +++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt @@ -47,16 +47,13 @@ import java.util.stream.LongStream * The scenario is run multiple times based on the user input * * @param scenario The scenario to run - * @param pool The pool on which to run the scenarios */ -public fun runScenario( - scenario: Scenario, - pool: ForkJoinPool, -) { +public fun runScenario(scenario: Scenario) { val pb = ProgressBarBuilder().setInitialMax(scenario.runs.toLong()).setStyle(ProgressBarStyle.ASCII) .setTaskName("Simulating...").build() + val pool = ForkJoinPool(5) pool.submit { LongStream.range(0, scenario.runs.toLong()).parallel().forEach { runScenario(scenario, scenario.initialSeed + it) |
