From 49de8c5413e4376c2163d09ec697163ae8a78d22 Mon Sep 17 00:00:00 2001 From: Robert Chisholm Date: Thu, 6 Jul 2023 09:32:13 +0100 Subject: [PATCH] BugFix: CUDASimulation nolonger reports telemetry when an submodel Closes #1079 --- include/flamegpu/simulation/CUDASimulation.h | 4 ++++ src/flamegpu/simulation/CUDASimulation.cu | 10 +++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/include/flamegpu/simulation/CUDASimulation.h b/include/flamegpu/simulation/CUDASimulation.h index b002fcf7d..104127f90 100644 --- a/include/flamegpu/simulation/CUDASimulation.h +++ b/include/flamegpu/simulation/CUDASimulation.h @@ -106,6 +106,10 @@ class CUDASimulation : public Simulation { bool inLayerConcurrency = true; private: + /** + * Internal property set by Submodels to adjust some features required by submodels + */ + bool is_submodel = false; /** * Internal property set by SimRunner to adjust some features required for ensemble performance */ diff --git a/src/flamegpu/simulation/CUDASimulation.cu b/src/flamegpu/simulation/CUDASimulation.cu index ffe9a3c59..619c5f31d 100644 --- a/src/flamegpu/simulation/CUDASimulation.cu +++ b/src/flamegpu/simulation/CUDASimulation.cu @@ -179,7 +179,7 @@ CUDASimulation::CUDASimulation(const std::shared_ptr &submodel_des // Submodels all run quiet/not verbose by default SimulationConfig().verbosity = Verbosity::Default; SimulationConfig().steps = submodel_desc->max_steps; - CUDAConfig().is_ensemble = true; + CUDAConfig().is_submodel = true; // Determine which agents will be spatially sorted this->determineAgentsToSort(); @@ -533,7 +533,7 @@ bool CUDASimulation::step() { initialiseSingletons(); // Time the individual step, using a CUDAEventTimer if possible, else a steadyClockTimer. - std::unique_ptr stepTimer = getDriverAppropriateTimer(getCUDAConfig().is_ensemble); + std::unique_ptr stepTimer = getDriverAppropriateTimer(getCUDAConfig().is_ensemble || getCUDAConfig().is_submodel); stepTimer->start(); // Init any unset agent IDs @@ -1172,7 +1172,7 @@ void CUDASimulation::simulate() { initialiseSingletons(); // Create the event timing object, using an appropriate timer implementation. - std::unique_ptr simulationTimer = getDriverAppropriateTimer(getCUDAConfig().is_ensemble); + std::unique_ptr simulationTimer = getDriverAppropriateTimer(getCUDAConfig().is_ensemble || getCUDAConfig().is_submodel); simulationTimer->start(); // Create as many streams as required @@ -1250,8 +1250,8 @@ void CUDASimulation::simulate() { } processExitLog(); - // Send Telemetry - if (getSimulationConfig().telemetry) { + // Send Telemetry if not submodel + if (getSimulationConfig().telemetry && !getCUDAConfig().is_submodel) { // Generate some payload items std::map payload_items; payload_items["GPUDevices"] = flamegpu::detail::compute_capability::getDeviceName(deviceInitialised);