From 3aeb22c67604fcbd59ad80a1de2307b16425fbe0 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 17 Nov 2025 13:08:10 +0100 Subject: [PATCH 1/2] GPU CMake: Add option to override deterministic mode --- dependencies/FindO2GPU.cmake | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dependencies/FindO2GPU.cmake b/dependencies/FindO2GPU.cmake index 4813ac18eae72..5815657ff6386 100644 --- a/dependencies/FindO2GPU.cmake +++ b/dependencies/FindO2GPU.cmake @@ -10,7 +10,7 @@ # or submit itself to any jurisdiction. # NOTE!!!! - Whenever this file is changed, move it over to alidist/resources -# FindO2GPU.cmake Version 5 +# FindO2GPU.cmake Version 6 if(NOT DEFINED ENABLE_CUDA) set(ENABLE_CUDA "AUTO") @@ -71,6 +71,9 @@ endfunction() STRING(REGEX REPLACE "\-std=[^ ]*" "" O2_GPU_CMAKE_CXX_FLAGS_NOSTD "${CMAKE_CXX_FLAGS}") # ================================== Fast Math / Deterministic Mode ================================== +if(DEFINED ENV{O2_OVERRIDE_GPUCA_DETERMINISTIC_MODE}) + set(GPUCA_DETERMINISTIC_MODE $ENV{O2_OVERRIDE_GPUCA_DETERMINISTIC_MODE}) +endif() # set(GPUCA_DETERMINISTIC_MODE WHOLEO2) # Override set(GPUCA_DETERMINISTIC_MODE_MAP_OFF 0) set(GPUCA_DETERMINISTIC_MODE_MAP_NO_FAST_MATH 1) # No -ffast-math and similar compile flags for GPU folder From 2764e225051f9b10e8ce07cce0e162ee75b3fba5 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 17 Nov 2025 13:13:16 +0100 Subject: [PATCH 2/2] GPU: If deterministic compile time option set, default for deterministic runtime setting should be 1 --- GPU/GPUTracking/Base/GPUReconstruction.cxx | 4 ++++ GPU/GPUTracking/Definitions/GPUSettingsList.h | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/GPU/GPUTracking/Base/GPUReconstruction.cxx b/GPU/GPUTracking/Base/GPUReconstruction.cxx index 5129ccc4becf1..46729eb7d5601 100644 --- a/GPU/GPUTracking/Base/GPUReconstruction.cxx +++ b/GPU/GPUTracking/Base/GPUReconstruction.cxx @@ -264,7 +264,11 @@ int32_t GPUReconstruction::InitPhaseBeforeDevice() mProcessingSettings->recoTaskTiming = true; } if (GetProcessingSettings().deterministicGPUReconstruction == -1) { +#ifdef GPUCA_DETERMINISTIC_MODE + mProcessingSettings->deterministicGPUReconstruction = 1; +#else mProcessingSettings->deterministicGPUReconstruction = GetProcessingSettings().debugLevel >= 6; +#endif } if (GetProcessingSettings().deterministicGPUReconstruction) { #ifndef GPUCA_DETERMINISTIC_MODE diff --git a/GPU/GPUTracking/Definitions/GPUSettingsList.h b/GPU/GPUTracking/Definitions/GPUSettingsList.h index 2f1eb72cb3d00..61446f6b49f03 100644 --- a/GPU/GPUTracking/Definitions/GPUSettingsList.h +++ b/GPU/GPUTracking/Definitions/GPUSettingsList.h @@ -306,7 +306,7 @@ AddOption(debugMask, uint32_t, (1 << 18) - 1, "debugMask", 0, "Mask for debug ou AddOption(debugLogSuffix, std::string, "", "debugSuffix", 0, "Suffix for debug log files with --debug 6") AddOption(serializeGPU, int8_t, 0, "", 0, "Synchronize after each kernel call (bit 1) and DMA transfer (bit 2) and identify failures") AddOption(recoTaskTiming, bool, 0, "", 0, "Perform summary timing after whole reconstruction tasks") -AddOption(deterministicGPUReconstruction, int32_t, -1, "", 0, "Make CPU and GPU debug output comparable (sort / skip concurrent parts), -1 = automatic if debugLevel >= 6", def(1)) +AddOption(deterministicGPUReconstruction, int32_t, -1, "", 0, "Make CPU and GPU debug output comparable (sort / skip concurrent parts), -1 = automatic if debugLevel >= 6 or deterministic compile flag set", def(1)) AddOption(showOutputStat, bool, false, "", 0, "Print some track output statistics") AddOption(runCompressionStatistics, bool, false, "compressionStat", 0, "Run statistics and verification for cluster compression") AddOption(resetTimers, int8_t, 1, "", 0, "Reset timers every event")