Skip to content

Commit 6a8629c

Browse files
committed
GPU: Add HIP per-kernel compilation mode
1 parent c8d7fde commit 6a8629c

File tree

5 files changed

+36
-10
lines changed

5 files changed

+36
-10
lines changed

GPU/GPUTracking/Base/cuda/CMakeLists.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ if(NOT ALIGPU_BUILD_TYPE STREQUAL "ALIROOT")
4848
else()
4949
set(RTC_CUDA_ARCH "750")
5050
endif()
51-
separate_arguments(GPU_RTC_FLAGS)
51+
set(GPU_RTC_FLAGS_SEPARATED "${GPU_RTC_FLAGS}")
52+
separate_arguments(GPU_RTC_FLAGS_SEPARATED)
5253

5354
# convenience variables
5455
if(ALIGPU_BUILD_TYPE STREQUAL "Standalone")
@@ -74,7 +75,7 @@ if(NOT ALIGPU_BUILD_TYPE STREQUAL "ALIROOT")
7475

7576
add_custom_command(
7677
OUTPUT ${GPU_RTC_BIN}.command
77-
COMMAND echo -n "${CMAKE_CUDA_COMPILER} ${GPU_RTC_FLAGS} ${GPU_RTC_DEFINES} -fatbin" > ${GPU_RTC_BIN}.command
78+
COMMAND echo -n "${CMAKE_CUDA_COMPILER} ${GPU_RTC_FLAGS_SEPARATED} ${GPU_RTC_DEFINES} -fatbin" > ${GPU_RTC_BIN}.command
7879
COMMAND_EXPAND_LISTS
7980
VERBATIM
8081
COMMENT "Preparing CUDA RTC command file ${GPU_RTC_BIN}.command"

GPU/GPUTracking/Base/cuda/GPUReconstructionCUDA.cu

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,12 @@
2626

2727
#if defined(GPUCA_KERNEL_COMPILE_MODE) && GPUCA_KERNEL_COMPILE_MODE == 1
2828
#include "utils/qGetLdBinarySymbols.h"
29-
#define GPUCA_KRNL(x_class, ...) QGET_LD_BINARY_SYMBOLS(GPUCA_M_CAT3(cuda_kernel_module_fatbin_krnl_, GPUCA_M_KRNL_NAME(x_class), _fatbin))
29+
#ifndef __HIPCC__ // CUDA
30+
#define PER_KERNEL_OBJECT_EXT _fatbin
31+
#else // HIP
32+
#define PER_KERNEL_OBJECT_EXT _hip_cxx_o
33+
#endif
34+
#define GPUCA_KRNL(x_class, ...) QGET_LD_BINARY_SYMBOLS(GPUCA_M_CAT3(cuda_kernel_module_fatbin_krnl_, GPUCA_M_KRNL_NAME(x_class), PER_KERNEL_OBJECT_EXT))
3035
#include "GPUReconstructionKernelList.h"
3136
#undef GPUCA_KRNL
3237
#endif
@@ -368,7 +373,7 @@ int GPUReconstructionCUDA::InitDevice_Runtime()
368373
else {
369374
#define GPUCA_KRNL(x_class, ...) \
370375
mInternals->kernelModules.emplace_back(std::make_unique<CUmodule>()); \
371-
GPUFailedMsg(cuModuleLoadData(mInternals->kernelModules.back().get(), GPUCA_M_CAT3(_binary_cuda_kernel_module_fatbin_krnl_, GPUCA_M_KRNL_NAME(x_class), _fatbin_start)));
376+
GPUFailedMsg(cuModuleLoadData(mInternals->kernelModules.back().get(), GPUCA_M_CAT3(_binary_cuda_kernel_module_fatbin_krnl_, GPUCA_M_KRNL_NAME(x_class), GPUCA_M_CAT(PER_KERNEL_OBJECT_EXT, _start))));
372377
#include "GPUReconstructionKernelList.h"
373378
#undef GPUCA_KRNL
374379
loadKernelModules(true, false);

GPU/GPUTracking/Base/hip/CMakeLists.txt

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,8 @@ if(NOT ALIGPU_BUILD_TYPE STREQUAL "ALIROOT")
8080

8181
# build flags to use for RTC
8282
set(GPU_RTC_FLAGS "${CMAKE_HIP_FLAGS} ${CMAKE_HIP_FLAGS_${CMAKE_BUILD_TYPE_UPPER}} -std=c++${CMAKE_HIP_STANDARD}")
83-
separate_arguments(GPU_RTC_FLAGS)
83+
set(GPU_RTC_FLAGS_SEPARATED "${GPU_RTC_FLAGS}")
84+
separate_arguments(GPU_RTC_FLAGS_SEPARATED)
8485

8586
# convenience variables
8687
if(ALIGPU_BUILD_TYPE STREQUAL "Standalone")
@@ -106,7 +107,7 @@ if(NOT ALIGPU_BUILD_TYPE STREQUAL "ALIROOT")
106107

107108
add_custom_command(
108109
OUTPUT ${GPU_RTC_BIN}.command
109-
COMMAND echo -n "${hip_HIPCC_EXECUTABLE} ${GPU_RTC_FLAGS} ${GPU_RTC_DEFINES} --genco" > ${GPU_RTC_BIN}.command
110+
COMMAND echo -n "${hip_HIPCC_EXECUTABLE} ${GPU_RTC_FLAGS_SEPARATED} ${GPU_RTC_DEFINES} --genco" > ${GPU_RTC_BIN}.command
110111
COMMAND_EXPAND_LISTS
111112
VERBATIM
112113
COMMENT "Preparing HIP RTC command file ${GPU_RTC_BIN}.command"
@@ -206,19 +207,23 @@ if(NOT DEFINED GPUCA_HIP_COMPILE_MODE)
206207
if(ALIGPU_BUILD_TYPE STREQUAL "ALIROOT")
207208
set(GPUCA_HIP_COMPILE_MODE "onefile")
208209
else()
209-
set(GPUCA_HIP_COMPILE_MODE "onefile")
210+
set(GPUCA_HIP_COMPILE_MODE "perkernel")
210211
endif()
211212
endif()
212213
if(GPUCA_HIP_COMPILE_MODE STREQUAL "onefile")
213214
target_compile_definitions(${targetName} PRIVATE GPUCA_KERNEL_COMPILE_MODE=0)
214215
elseif(GPUCA_HIP_COMPILE_MODE STREQUAL "perkernel")
215-
add_library(GPUTrackingHIPKernels OBJECT $<JOIN:$<LIST:TRANSFORM,$<LIST:TRANSFORM,$<LIST:TRANSFORM,$<TARGET_PROPERTY:O2_GPU_KERNELS,O2_GPU_KERNEL_NAMES>,REPLACE,[^A-Za-z0-9]+,_>,PREPEND,${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_>,APPEND,.cu>, >)
216-
set_property(TARGET GPUTrackingHIPKernels PROPERTY HIP_FATBIN_COMPILATION ON)
216+
#add_library(GPUTrackingHIPKernels OBJECT $<JOIN:$<LIST:TRANSFORM,$<LIST:TRANSFORM,$<LIST:TRANSFORM,$<TARGET_PROPERTY:O2_GPU_KERNELS,O2_GPU_KERNEL_NAMES>,REPLACE,[^A-Za-z0-9]+,_>,PREPEND,${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_>,APPEND,.cu>, >)
217+
#set_property(TARGET GPUTrackingHIPKernels PROPERTY HIP_FATBIN_COMPILATION ON)
218+
add_subdirectory(per_kernel)
217219
target_compile_options(GPUTrackingHIPKernels PRIVATE $<$<COMPILE_LANGUAGE:HIP>:-fno-gpu-rdc>)
218220
target_link_options(GPUTrackingHIPKernels PRIVATE $<$<COMPILE_LANGUAGE:HIP>:-fno-gpu-rdc>)
219221
target_compile_definitions(${targetName} PRIVATE GPUCA_KERNEL_COMPILE_MODE=1)
220222
target_compile_definitions(GPUTrackingHIPKernels PRIVATE $<TARGET_PROPERTY:${targetName},COMPILE_DEFINITIONS>)
221223
target_include_directories(GPUTrackingHIPKernels PRIVATE $<TARGET_PROPERTY:${targetName},INCLUDE_DIRECTORIES>)
224+
if(NOT DEFINED GPUCA_HIP_HIPIFY_FROM_CUDA OR "${GPUCA_HIP_HIPIFY_FROM_CUDA}")
225+
add_dependencies(GPUTrackingHIPKernels ${MODULE}_HIPIFIED)
226+
endif()
222227
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/hip_kernel_module_fatbin)
223228
add_custom_command(
224229
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingHIPKernelModules.o
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2+
# See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3+
# All rights not expressly granted are reserved.
4+
#
5+
# This software is distributed under the terms of the GNU General Public
6+
# License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7+
#
8+
# In applying this license CERN does not waive the privileges and immunities
9+
# granted to it by virtue of its status as an Intergovernmental Organization
10+
# or submit itself to any jurisdiction.
11+
12+
add_library(GPUTrackingHIPKernels OBJECT $<JOIN:$<LIST:TRANSFORM,$<LIST:TRANSFORM,$<LIST:TRANSFORM,$<TARGET_PROPERTY:O2_GPU_KERNELS,O2_GPU_KERNEL_NAMES>,REPLACE,[^A-Za-z0-9]+,_>,PREPEND,${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_>,APPEND,.hip.cxx>, >)
13+
set(CMAKE_CXX_COMPILER ${hip_HIPCC_EXECUTABLE})
14+
set(CMAKE_CXX_FLAGS "${GPU_RTC_FLAGS} --genco")
15+
unset(CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE_UPPER})

GPU/GPUTracking/cmake/kernel_helpers.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ function(o2_gpu_add_kernel kernel_name kernel_files kernel_bounds kernel_type)
9595
endif()
9696

9797
if(HIP_ENABLED)
98-
set(TMP_FILENAMEA "${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_${TMP_FILENAME}.hip")
98+
set(TMP_FILENAMEA "${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_${TMP_FILENAME}.hip.cxx")
9999
set(O2_GPU_KERNEL_TEMPLATE_REPLACE "${TMP_KERNEL}")
100100
configure_file(${O2_GPU_BASE_DIR}/Base/hip/GPUReconstructionHIPkernel.template.hip ${TMP_FILENAMEA})
101101
endif()

0 commit comments

Comments
 (0)