Skip to content

Commit e5b0021

Browse files
committed
GPU: propagate architecture name and LTO for ITS
Signed-off-by: Felix Schlepper <felix.schlepper@cern.ch>
1 parent 4679fed commit e5b0021

5 files changed

Lines changed: 20 additions & 0 deletions

File tree

Common/DCAFitter/GPU/cuda/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ o2_add_library(DCAFitterCUDA
2020
O2::DetectorsBase
2121
PRIVATE_LINK_LIBRARIES O2::GPUTrackingCUDAExternalProvider)
2222
set_property(TARGET ${targetName} PROPERTY CUDA_SEPARABLE_COMPILATION ON)
23+
# Device LTO, so that the device link can inline across the
24+
# O2::GPUTrackingCUDAExternalProvider objects, which are compiled to LTO IR.
25+
set_property(TARGET ${targetName} PROPERTY INTERPROCEDURAL_OPTIMIZATION ON)
2326
# add_compile_options(-lineinfo)
2427

2528
#o2_add_test(DCAFitterNCUDA

Detectors/ITSMFT/ITS/tracking/GPU/cuda/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ if(CUDA_ENABLED)
3535
# $<$<COMPILE_LANGUAGE:CUDA>:-G;-O0;-Xptxas=-O0>
3636
# $<$<COMPILE_LANGUAGE:CXX>:-O0;-g>
3737
)
38+
# -dlto is incompatible with -G, so device debugging needs it switched off.
39+
set_property(TARGET ${targetName} PROPERTY INTERPROCEDURAL_OPTIMIZATION ON)
3840
# target_compile_definitions(${targetName} PRIVATE ITS_MEASURE_GPU_TIME ITS_GPU_LOG)
3941
target_compile_definitions(${targetName} PRIVATE $<TARGET_PROPERTY:O2::ITStracking,COMPILE_DEFINITIONS>)
4042
endif()

GPU/GPUTracking/Base/cuda/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,4 +204,9 @@ add_library(O2::GPUTrackingCUDAExternalProvider ALIAS GPUTrackingCUDAExternalPro
204204
set_property(TARGET GPUTrackingCUDAExternalProvider PROPERTY CUDA_SEPARABLE_COMPILATION ON)
205205
target_compile_definitions(GPUTrackingCUDAExternalProvider PRIVATE $<TARGET_PROPERTY:${targetName},COMPILE_DEFINITIONS>)
206206
target_include_directories(GPUTrackingCUDAExternalProvider PRIVATE $<TARGET_PROPERTY:${targetName},INCLUDE_DIRECTORIES>)
207+
# Emit LTO IR (code=[compute_XX,lto_XX]) instead of SASS, so that consumers
208+
# device-linking with -dlto can inline across the provider. Consumers doing a
209+
# plain device link still work: nvlink falls back to compiling the IR, it just
210+
# does not get the cross-module inlining.
211+
set_property(TARGET GPUTrackingCUDAExternalProvider PROPERTY INTERPROCEDURAL_OPTIMIZATION ON)
207212
add_dependencies(GPUTrackingCUDAExternalProvider O2::GPUTracking) # must not depend on GPU backend to avoid cyclic dependencies

cmake/O2AddHipifiedExecutable.cmake

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,9 @@ function(o2_add_hipified_executable baseTargetName)
7878
o2_add_executable("${baseTargetName}"
7979
SOURCES ${HIP_SOURCES}
8080
${FORWARD_ARGS})
81+
82+
# Export architecture name
83+
if(A_TARGETVARNAME)
84+
set(${A_TARGETVARNAME} ${${A_TARGETVARNAME}} PARENT_SCOPE)
85+
endif()
8186
endfunction()

cmake/O2AddHipifiedLibrary.cmake

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,9 @@ function(o2_add_hipified_library baseTargetName)
7272
o2_add_library("${baseTargetName}"
7373
SOURCES ${HIP_SOURCES}
7474
${FORWARD_ARGS})
75+
76+
# Export architecture name
77+
if(A_TARGETVARNAME)
78+
set(${A_TARGETVARNAME} ${${A_TARGETVARNAME}} PARENT_SCOPE)
79+
endif()
7580
endfunction()

0 commit comments

Comments
 (0)