From 1f39c5e1de38b175dd95737778aaa98b72c79952 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 0b232829a..5fe16b772 100644 --- a/include/flamegpu/simulation/CUDASimulation.h +++ b/include/flamegpu/simulation/CUDASimulation.h @@ -109,6 +109,10 @@ class CUDASimulation : public Simulation { * Internal property set by SimRunner to adjust some features required for ensemble performance */ bool is_ensemble = false; + /** + * Internal property set by Submodels to adjust some features required by submodels + */ + bool is_submodel = false; }; /** * Initialise cuda runner diff --git a/src/flamegpu/simulation/CUDASimulation.cu b/src/flamegpu/simulation/CUDASimulation.cu index a5992b691..4a6b3644b 100644 --- a/src/flamegpu/simulation/CUDASimulation.cu +++ b/src/flamegpu/simulation/CUDASimulation.cu @@ -177,7 +177,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(); @@ -525,7 +525,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 @@ -1164,7 +1164,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 @@ -1242,8 +1242,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);