From 71dc7b788a35e6f4e20d519bd1df366f77ce4bd8 Mon Sep 17 00:00:00 2001 From: scott snyder <snyder@bnl.gov> Date: Sat, 25 Jan 2025 23:27:00 +0100 Subject: [PATCH] Compile GeoShapeShift::contains() with optimization, even in dbg builds. This is used heavily by the MC volume() integration. This change speeds up the test in ActsMuonDetectorTest in the dbg build by a factor of more than 30 (from ~8200s to ~250s). --- GeoModelCore/GeoModelKernel/CMakeLists.txt | 3 ++- GeoModelCore/GeoModelKernel/src/GeoShapeShift.cxx | 10 +++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/GeoModelCore/GeoModelKernel/CMakeLists.txt b/GeoModelCore/GeoModelKernel/CMakeLists.txt index f4242540e..3cc3c7114 100644 --- a/GeoModelCore/GeoModelKernel/CMakeLists.txt +++ b/GeoModelCore/GeoModelKernel/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration # Find the header and source files. file( GLOB SOURCES src/*.cxx ) @@ -26,6 +26,7 @@ if ( "${CMAKE_BUILD_TYPE}" STREQUAL "Debug" ) set_source_files_properties( ${CMAKE_CURRENT_SOURCE_DIR}/src/GeoXF.cxx ${CMAKE_CURRENT_SOURCE_DIR}/src/GeoAlignableTransform.cxx + ${CMAKE_CURRENT_SOURCE_DIR}/src/GeoShapeShift.cxx PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}" COMPILE_DEFINITIONS "FLATTEN" ) diff --git a/GeoModelCore/GeoModelKernel/src/GeoShapeShift.cxx b/GeoModelCore/GeoModelKernel/src/GeoShapeShift.cxx index 373a804a1..1d3c7306e 100755 --- a/GeoModelCore/GeoModelKernel/src/GeoShapeShift.cxx +++ b/GeoModelCore/GeoModelKernel/src/GeoShapeShift.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration */ #include "GeoModelKernel/GeoShapeShift.h" @@ -53,6 +53,14 @@ void GeoShapeShift::extent (double& xmin, double& ymin, double& zmin, } } +#if defined(FLATTEN) && defined(__GNUC__) +// We compile this package with optimization, even in debug builds; otherwise, +// the heavy use of Eigen makes it too slow. However, from here we may call +// to out-of-line Eigen code that is linked from other DSOs; in that case, +// it would not be optimized. Avoid this by forcing all Eigen code +// to be inlined here if possible. +__attribute__ ((flatten)) +#endif bool GeoShapeShift::contains (double x, double y, double z) const { const GeoShape* shape = getOp(); const GeoTrf::Transform3D& trans = getX(); -- GitLab