From e5b0021b00a2d489cbedbd1617918728868fca39 Mon Sep 17 00:00:00 2001 From: Felix Schlepper Date: Mon, 17 Aug 2026 21:36:20 +0200 Subject: [PATCH] GPU: propagate architecture name and LTO for ITS Signed-off-by: Felix Schlepper --- Common/DCAFitter/GPU/cuda/CMakeLists.txt | 3 +++ Detectors/ITSMFT/ITS/tracking/GPU/cuda/CMakeLists.txt | 2 ++ GPU/GPUTracking/Base/cuda/CMakeLists.txt | 5 +++++ cmake/O2AddHipifiedExecutable.cmake | 5 +++++ cmake/O2AddHipifiedLibrary.cmake | 5 +++++ 5 files changed, 20 insertions(+) diff --git a/Common/DCAFitter/GPU/cuda/CMakeLists.txt b/Common/DCAFitter/GPU/cuda/CMakeLists.txt index 6b89207279fe0..dfe9b6e515e9f 100644 --- a/Common/DCAFitter/GPU/cuda/CMakeLists.txt +++ b/Common/DCAFitter/GPU/cuda/CMakeLists.txt @@ -20,6 +20,9 @@ o2_add_library(DCAFitterCUDA O2::DetectorsBase PRIVATE_LINK_LIBRARIES O2::GPUTrackingCUDAExternalProvider) set_property(TARGET ${targetName} PROPERTY CUDA_SEPARABLE_COMPILATION ON) +# Device LTO, so that the device link can inline across the +# O2::GPUTrackingCUDAExternalProvider objects, which are compiled to LTO IR. +set_property(TARGET ${targetName} PROPERTY INTERPROCEDURAL_OPTIMIZATION ON) # add_compile_options(-lineinfo) #o2_add_test(DCAFitterNCUDA diff --git a/Detectors/ITSMFT/ITS/tracking/GPU/cuda/CMakeLists.txt b/Detectors/ITSMFT/ITS/tracking/GPU/cuda/CMakeLists.txt index 38f11265682ce..72d70ae0a245a 100644 --- a/Detectors/ITSMFT/ITS/tracking/GPU/cuda/CMakeLists.txt +++ b/Detectors/ITSMFT/ITS/tracking/GPU/cuda/CMakeLists.txt @@ -35,6 +35,8 @@ if(CUDA_ENABLED) # $<$:-G;-O0;-Xptxas=-O0> # $<$:-O0;-g> ) + # -dlto is incompatible with -G, so device debugging needs it switched off. + set_property(TARGET ${targetName} PROPERTY INTERPROCEDURAL_OPTIMIZATION ON) # target_compile_definitions(${targetName} PRIVATE ITS_MEASURE_GPU_TIME ITS_GPU_LOG) target_compile_definitions(${targetName} PRIVATE $) endif() diff --git a/GPU/GPUTracking/Base/cuda/CMakeLists.txt b/GPU/GPUTracking/Base/cuda/CMakeLists.txt index 6e54187332c9b..0202c784d073b 100644 --- a/GPU/GPUTracking/Base/cuda/CMakeLists.txt +++ b/GPU/GPUTracking/Base/cuda/CMakeLists.txt @@ -204,4 +204,9 @@ add_library(O2::GPUTrackingCUDAExternalProvider ALIAS GPUTrackingCUDAExternalPro set_property(TARGET GPUTrackingCUDAExternalProvider PROPERTY CUDA_SEPARABLE_COMPILATION ON) target_compile_definitions(GPUTrackingCUDAExternalProvider PRIVATE $) target_include_directories(GPUTrackingCUDAExternalProvider PRIVATE $) +# Emit LTO IR (code=[compute_XX,lto_XX]) instead of SASS, so that consumers +# device-linking with -dlto can inline across the provider. Consumers doing a +# plain device link still work: nvlink falls back to compiling the IR, it just +# does not get the cross-module inlining. +set_property(TARGET GPUTrackingCUDAExternalProvider PROPERTY INTERPROCEDURAL_OPTIMIZATION ON) add_dependencies(GPUTrackingCUDAExternalProvider O2::GPUTracking) # must not depend on GPU backend to avoid cyclic dependencies diff --git a/cmake/O2AddHipifiedExecutable.cmake b/cmake/O2AddHipifiedExecutable.cmake index c7354fd989e76..14ce37ec526b2 100644 --- a/cmake/O2AddHipifiedExecutable.cmake +++ b/cmake/O2AddHipifiedExecutable.cmake @@ -78,4 +78,9 @@ function(o2_add_hipified_executable baseTargetName) o2_add_executable("${baseTargetName}" SOURCES ${HIP_SOURCES} ${FORWARD_ARGS}) + + # Export architecture name + if(A_TARGETVARNAME) + set(${A_TARGETVARNAME} ${${A_TARGETVARNAME}} PARENT_SCOPE) + endif() endfunction() diff --git a/cmake/O2AddHipifiedLibrary.cmake b/cmake/O2AddHipifiedLibrary.cmake index a9d8602bf87e3..df4f35353a9fc 100644 --- a/cmake/O2AddHipifiedLibrary.cmake +++ b/cmake/O2AddHipifiedLibrary.cmake @@ -72,4 +72,9 @@ function(o2_add_hipified_library baseTargetName) o2_add_library("${baseTargetName}" SOURCES ${HIP_SOURCES} ${FORWARD_ARGS}) + + # Export architecture name + if(A_TARGETVARNAME) + set(${A_TARGETVARNAME} ${${A_TARGETVARNAME}} PARENT_SCOPE) + endif() endfunction()