Skip to content

Commit 2ddad04

Browse files
committed
GPU CMake: Clean up and collect files / kernels to be compiled in deterministic mode in one place
1 parent 9e23cd3 commit 2ddad04

File tree

6 files changed

+47
-36
lines changed

6 files changed

+47
-36
lines changed

GPU/GPUTracking/Base/cuda/CMakeLists.txt

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -122,20 +122,21 @@ if(ALIGPU_BUILD_TYPE STREQUAL "O2")
122122
${CMAKE_CURRENT_SOURCE_DIR}
123123
TARGETVARNAME targetName)
124124

125-
target_compile_definitions(${targetName} PUBLIC $<TARGET_PROPERTY:O2::GPUTracking,COMPILE_DEFINITIONS>)
126-
127125
install(FILES ${HDRS} DESTINATION include/GPU)
128126
endif()
129127

130128
if(ALIGPU_BUILD_TYPE STREQUAL "Standalone")
131129
set(targetName "${MODULE}")
132130
set(TMP_BASELIB GPUTracking)
133131
add_library(${MODULE} SHARED ${SRCS})
132+
add_library(O2::${MODULE} ALIAS ${MODULE})
134133
target_link_libraries(${MODULE} PUBLIC ${TMP_BASELIB})
135134
install(TARGETS GPUTrackingCUDA)
136135
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
137136
endif()
138137

138+
target_compile_definitions(${targetName} PRIVATE $<TARGET_PROPERTY:O2::GPUTracking,COMPILE_DEFINITIONS>)
139+
139140
# Setting target architecture and adding GPU libraries
140141
target_link_libraries(${targetName} PRIVATE cuda cudart nvrtc)
141142
set_target_cuda_arch(${targetName})
@@ -170,15 +171,6 @@ elseif(GPUCA_CUDA_COMPILE_MODE STREQUAL "perkernel")
170171
target_sources(${targetName} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingCUDAKernelModules.o)
171172
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingCUDAKernelModules.o PROPERTIES EXTERNAL_OBJECT true GENERATED true)
172173

173-
# Disable all non-deterministic floating point to make TPC track model encoding / decoding precise
174-
set_source_files_properties(${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_GPUTPCCompressionKernels_step0attached.cu
175-
${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_GPUTPCCompressionKernels_step1unattached.cu
176-
${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_GPUTPCDecompressionKernels_step0attached.cu
177-
${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_GPUTPCDecompressionKernels_step1unattached.cu
178-
TARGET_DIRECTORY ${targetName}
179-
PROPERTIES
180-
COMPILE_FLAGS "${GPUCA_CUDA_NO_FAST_MATH_FLAGS}"
181-
COMPILE_DEFINITIONS "GPUCA_DETERMINISTIC_MODE")
182174
elseif(GPUCA_CUDA_COMPILE_MODE STREQUAL "rdc")
183175
message(FATAL_ERROR "CUDA RDC compilation of GPUReconstruction ios not yet working!")
184176
target_compile_definitions(${targetName} PRIVATE GPUCA_KERNEL_COMPILE_MODE=2)

GPU/GPUTracking/Base/hip/CMakeLists.txt

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,6 @@ if(ALIGPU_BUILD_TYPE STREQUAL "O2")
160160
${GPUCA_HIP_SOURCE_DIR}
161161
TARGETVARNAME targetName)
162162

163-
target_compile_definitions(${targetName} PUBLIC $<TARGET_PROPERTY:O2::GPUTracking,COMPILE_DEFINITIONS>)
164-
165163
install(FILES ${HDRS} DESTINATION include/GPU)
166164

167165
# o2_add_test(GPUsortHIP NAME test_GPUsortHIP
@@ -175,11 +173,14 @@ if(ALIGPU_BUILD_TYPE STREQUAL "Standalone")
175173
set(targetName "${MODULE}")
176174
set(TMP_BASELIB GPUTracking)
177175
add_library(${MODULE} SHARED ${SRCS})
176+
add_library(O2::${MODULE} ALIAS ${MODULE})
178177
target_link_libraries(${MODULE} PUBLIC ${TMP_BASELIB})
179178
install(TARGETS GPUTrackingHIP)
180179
include_directories(${GPUCA_HIP_SOURCE_DIR})
181180
endif()
182181

182+
target_compile_definitions(${targetName} PRIVATE $<TARGET_PROPERTY:O2::GPUTracking,COMPILE_DEFINITIONS>)
183+
183184
add_library(${MODULE}_CXX OBJECT ${SRCS_CXX}) # Adding a C++ library for the .cxx code of the HIP library, such that it does not link to HIP libraries, and CMake HIP Language doesn't add HIP compile flags.
184185
target_compile_definitions(${MODULE}_CXX PRIVATE $<TARGET_PROPERTY:${TMP_BASELIB},COMPILE_DEFINITIONS>)
185186
target_include_directories(${MODULE}_CXX PRIVATE $<TARGET_PROPERTY:${TMP_BASELIB},INCLUDE_DIRECTORIES>)
@@ -228,15 +229,6 @@ elseif(GPUCA_HIP_COMPILE_MODE STREQUAL "perkernel")
228229
target_sources(${targetName} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingHIPKernelModules.o)
229230
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingHIPKernelModules.o PROPERTIES EXTERNAL_OBJECT true GENERATED true)
230231

231-
# Disable all non-deterministic floating point to make TPC track model encoding / decoding precise
232-
set_source_files_properties(${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_GPUTPCCompressionKernels_step0attached.hip
233-
${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_GPUTPCCompressionKernels_step1unattached.hip
234-
${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_GPUTPCDecompressionKernels_step0attached.hip
235-
${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_GPUTPCDecompressionKernels_step1unattached.hip
236-
TARGET_DIRECTORY ${targetName}
237-
PROPERTIES
238-
COMPILE_FLAGS "${GPUCA_CXX_NO_FAST_MATH_FLAGS}"
239-
COMPILE_DEFINITIONS "GPUCA_DETERMINISTIC_MODE")
240232
elseif(GPUCA_HIP_COMPILE_MODE STREQUAL "rdc")
241233
message(FATAL_ERROR "HIP RDC compilation of GPUReconstruction ios not yet working!")
242234
target_compile_definitions(${targetName} PRIVATE GPUCA_KERNEL_COMPILE_MODE=2)

GPU/GPUTracking/CMakeLists.txt

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -372,16 +372,6 @@ if(ALIGPU_BUILD_TYPE STREQUAL "Standalone")
372372
endif()
373373
endif()
374374

375-
# Disable all non-deterministic floating point to make TPC track model encoding / decoding precise
376-
set_source_files_properties(DataCompression/GPUTPCCompressionTrackModel.cxx
377-
DataCompression/GPUTPCCompressionKernels.cxx
378-
DataCompression/TPCClusterDecompressor.cxx
379-
DataCompression/GPUTPCDecompressionKernels.cxx
380-
TARGET_DIRECTORY ${targetName}
381-
PROPERTIES
382-
COMPILE_FLAGS "${GPUCA_CXX_NO_FAST_MATH_FLAGS}"
383-
COMPILE_DEFINITIONS "GPUCA_DETERMINISTIC_MODE")
384-
385375
# GPUReconstructionLibrary needs to know which GPU backends are enabled for proper error messages
386376
configure_file(Base/GPUReconstructionAvailableBackends.template.h ${CMAKE_CURRENT_BINARY_DIR}/GPUReconstructionAvailableBackends.h)
387377
set_source_files_properties(Base/GPUReconstructionLibrary.cxx
@@ -423,5 +413,19 @@ if(ALIGPU_BUILD_TYPE STREQUAL "O2" OR ALIGPU_BUILD_TYPE STREQUAL "Standalone")
423413
endif()
424414

425415
if(GPUCA_DETERMINISTIC_MODE GREATER_EQUAL ${GPUCA_DETERMINISTIC_MODE_MAP_GPU})
426-
target_compile_definitions(${targetName} PUBLIC GPUCA_DETERMINISTIC_MODE)
416+
target_compile_definitions(${targetName} PRIVATE GPUCA_DETERMINISTIC_MODE)
427417
endif()
418+
419+
# Disable all non-deterministic floating point to make TPC track model encoding / decoding precise
420+
set_source_files_properties(DataCompression/GPUTPCCompressionTrackModel.cxx
421+
DataCompression/GPUTPCCompressionKernels.cxx
422+
DataCompression/TPCClusterDecompressor.cxx
423+
DataCompression/GPUTPCDecompressionKernels.cxx
424+
TARGET_DIRECTORY ${targetName}
425+
PROPERTIES
426+
COMPILE_FLAGS "${GPUCA_CXX_NO_FAST_MATH_FLAGS}"
427+
COMPILE_DEFINITIONS "GPUCA_DETERMINISTIC_MODE")
428+
o2_gpu_kernel_set_deterministic(GPUTPCCompressionKernels_step0attached
429+
GPUTPCCompressionKernels_step1unattached
430+
GPUTPCDecompressionKernels_step0attached
431+
GPUTPCDecompressionKernels_step1unattached)

GPU/GPUTracking/Standalone/Benchmark/CMakeLists.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,9 @@ if(ALIGPU_BUILD_TYPE STREQUAL "Standalone")
2828
add_executable(ca ${SRCS})
2929
set(targetName ca)
3030
target_link_libraries(${targetName} PUBLIC GPUTracking)
31-
3231
endif()
3332

34-
target_compile_definitions(${targetName} PUBLIC $<TARGET_PROPERTY:O2::GPUTracking,COMPILE_DEFINITIONS>)
33+
target_compile_definitions(${targetName} PRIVATE $<TARGET_PROPERTY:O2::GPUTracking,COMPILE_DEFINITIONS>)
3534

3635
if(ROOT_FOUND)
3736
target_sources(${targetName} PRIVATE ../../qa/genEvents.cxx)

GPU/GPUTracking/cmake/kernel_helpers.cmake

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,3 +142,26 @@ function(o2_gpu_kernel_file_list list)
142142
list(REMOVE_DUPLICATES TMP_FILE_LIST)
143143
set_property(TARGET O2_GPU_KERNELS PROPERTY O2_GPU_KERNELS_FILE_LIST_${list} "${TMP_FILE_LIST}")
144144
endfunction()
145+
146+
function(o2_gpu_kernel_set_deterministic)
147+
if(NOT GPUCA_DETERMINISTIC_MODE GREATER_EQUAL ${GPUCA_DETERMINISTIC_MODE_MAP_GPU})
148+
list(LENGTH ARGV n)
149+
math(EXPR n "${n} - 1")
150+
foreach(i RANGE 0 ${n})
151+
if(CUDA_ENABLED AND (NOT DEFINED GPUCA_CUDA_COMPILE_MODE OR GPUCA_CUDA_COMPILE_MODE STREQUAL "perkernel"))
152+
set_source_files_properties("${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_${ARGV${i}}.cu"
153+
TARGET_DIRECTORY O2::GPUTrackingCUDA
154+
PROPERTIES
155+
COMPILE_FLAGS "${GPUCA_CUDA_NO_FAST_MATH_FLAGS}"
156+
COMPILE_DEFINITIONS "GPUCA_DETERMINISTIC_MODE")
157+
endif()
158+
if(HIP_ENABLED AND (NOT DEFINED GPUCA_HIP_COMPILE_MODE OR GPUCA_HIP_COMPILE_MODE STREQUAL "perkernel"))
159+
set_source_files_properties("${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_${ARGV${i}}.hip"
160+
TARGET_DIRECTORY O2::GPUTrackingHIP
161+
PROPERTIES
162+
COMPILE_FLAGS "${GPUCA_CXX_NO_FAST_MATH_FLAGS}"
163+
COMPILE_DEFINITIONS "GPUCA_DETERMINISTIC_MODE")
164+
endif()
165+
endforeach()
166+
endif()
167+
endfunction()

GPU/GPUTracking/display/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,6 @@ if(ALIGPU_BUILD_TYPE STREQUAL "O2")
131131
PUBLIC_INCLUDE_DIRECTORIES .
132132
SOURCES ${SRCS} ${SRCS_NO_H})
133133

134-
target_compile_definitions(${targetName} PRIVATE $<TARGET_PROPERTY:O2::GPUTracking,COMPILE_DEFINITIONS>)
135134
target_compile_definitions(${targetName} PRIVATE GPUCA_BUILD_EVENT_DISPLAY_GLFW GPUCA_DISPLAY_GL3W GPUCA_DISPLAY_OPENGL_CORE)
136135

137136
install(FILES ${HDRS} ${HDRS_INSTALL} DESTINATION include/GPU)
@@ -158,6 +157,8 @@ if(ALIGPU_BUILD_TYPE STREQUAL "Standalone")
158157
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/setinclude.sh PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE DESTINATION displayTrackFilter)
159158
endif()
160159

160+
target_compile_definitions(${targetName} PRIVATE $<TARGET_PROPERTY:O2::GPUTracking,COMPILE_DEFINITIONS>)
161+
161162
message(STATUS "Building GPU Event Display (Vulkan ${GPUCA_EVENT_DISPLAY_VULKAN}, Wayland ${GPUCA_EVENT_DISPLAY_WAYLAND}, Freetype ${GPUCA_EVENT_DISPLAY_FREETYPE}, Fontconfig ${Fontconfig_FOUND}, Qt ${GPUCA_EVENT_DISPLAY_QT})")
162163
target_link_libraries(${targetName} PUBLIC ${GLFW_LIBRARIES} OpenGL::GL)
163164
target_include_directories(${targetName} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})

0 commit comments

Comments
 (0)