Skip to content

Commit dae62e3

Browse files
committed
GPU RTC: Add RTCoverrideArchitecture option to override RTC architecture compile command line part
1 parent c481ad4 commit dae62e3

5 files changed

Lines changed: 32 additions & 8 deletions

File tree

GPU/GPUTracking/Base/cuda/CMakeLists.txt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,10 @@ if(NOT ALIGPU_BUILD_TYPE STREQUAL "ALIROOT")
3939

4040
# build flags to use for RTC
4141
set(GPU_RTC_FLAGS "${CMAKE_CUDA_FLAGS} ${CMAKE_CUDA_FLAGS_${CMAKE_BUILD_TYPE_UPPER}} -std=c++${CMAKE_CUDA_STANDARD}")
42+
set(GPU_RTC_FLAGS_ARCH "")
4243
if(CUDA_COMPUTETARGET)
4344
foreach(CUDA_ARCH ${CUDA_COMPUTETARGET})
44-
set(GPU_RTC_FLAGS "${GPU_RTC_FLAGS} -gencode arch=compute_${CUDA_ARCH},code=sm_${CUDA_ARCH}")
45+
set(GPU_RTC_FLAGS_ARCH "${GPU_RTC_FLAGS_ARCH} -gencode arch=compute_${CUDA_ARCH},code=sm_${CUDA_ARCH}")
4546
endforeach()
4647
list (GET CUDA_COMPUTETARGET 0 RTC_CUDA_ARCH)
4748
set(RTC_CUDA_ARCH "${RTC_CUDA_ARCH}0")
@@ -85,7 +86,16 @@ if(NOT ALIGPU_BUILD_TYPE STREQUAL "ALIROOT")
8586
)
8687
create_binary_resource(${GPU_RTC_BIN}.command ${GPU_RTC_BIN}.command.o)
8788

88-
set(SRCS ${SRCS} ${GPU_RTC_BIN}.src.o ${GPU_RTC_BIN}.command.o)
89+
add_custom_command(
90+
OUTPUT ${GPU_RTC_BIN}.command.arch
91+
COMMAND echo -n "${GPU_RTC_FLAGS_ARCH}" > ${GPU_RTC_BIN}.command.arch
92+
COMMAND_EXPAND_LISTS
93+
VERBATIM
94+
COMMENT "Preparing CUDA RTC ARCH file ${GPU_RTC_BIN}.command.arch"
95+
)
96+
create_binary_resource(${GPU_RTC_BIN}.command.arch ${GPU_RTC_BIN}.command.arch.o)
97+
98+
set(SRCS ${SRCS} ${GPU_RTC_BIN}.src.o ${GPU_RTC_BIN}.command.o ${GPU_RTC_BIN}.command.arch.o)
8999
endif()
90100
# -------------------------------- End RTC -------------------------------------------------------
91101

GPU/GPUTracking/Base/cuda/GPUReconstructionCUDAGenRTC.cxx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ using namespace GPUCA_NAMESPACE::gpu;
3333
#include "utils/qGetLdBinarySymbols.h"
3434
QGET_LD_BINARY_SYMBOLS(GPUReconstructionCUDArtc_src);
3535
QGET_LD_BINARY_SYMBOLS(GPUReconstructionCUDArtc_command);
36+
QGET_LD_BINARY_SYMBOLS(GPUReconstructionCUDArtc_command_arch);
3637
#endif
3738

3839
int GPUReconstructionCUDA::genRTC(std::string& filename, unsigned int& nCompile)
@@ -53,12 +54,16 @@ int GPUReconstructionCUDA::genRTC(std::string& filename, unsigned int& nCompile)
5354
kernelsall += kernels[i] + "\n";
5455
}
5556

57+
std::string baseCommand = (mProcessingSettings.RTCprependCommand != "" ? (mProcessingSettings.RTCprependCommand + " ") : "");
58+
baseCommand += (getenv("O2_GPU_RTC_OVERRIDE_CMD") ? std::string(getenv("O2_GPU_RTC_OVERRIDE_CMD")) : std::string(_binary_GPUReconstructionCUDArtc_command_start, _binary_GPUReconstructionCUDArtc_command_len));
59+
baseCommand += std::string(" ") + (mProcessingSettings.RTCoverrideArchitecture != "" ? mProcessingSettings.RTCoverrideArchitecture : std::string(_binary_GPUReconstructionCUDArtc_command_arch_start, _binary_GPUReconstructionCUDArtc_command_arch_len));
60+
5661
#ifdef GPUCA_HAVE_O2HEADERS
5762
char shasource[21], shaparam[21], shacmd[21], shakernels[21];
5863
if (mProcessingSettings.rtc.cacheOutput) {
5964
o2::framework::internal::SHA1(shasource, _binary_GPUReconstructionCUDArtc_src_start, _binary_GPUReconstructionCUDArtc_src_len);
6065
o2::framework::internal::SHA1(shaparam, rtcparam.c_str(), rtcparam.size());
61-
o2::framework::internal::SHA1(shacmd, _binary_GPUReconstructionCUDArtc_command_start, _binary_GPUReconstructionCUDArtc_command_len);
66+
o2::framework::internal::SHA1(shacmd, baseCommand.c_str(), baseCommand.size());
6267
o2::framework::internal::SHA1(shakernels, kernelsall.c_str(), kernelsall.size());
6368
}
6469
#endif
@@ -159,8 +164,6 @@ int GPUReconstructionCUDA::genRTC(std::string& filename, unsigned int& nCompile)
159164
}
160165
HighResTimer rtcTimer;
161166
rtcTimer.ResetStart();
162-
std::string baseCommand = (mProcessingSettings.RTCprependCommand != "" ? (mProcessingSettings.RTCprependCommand + " ") : "");
163-
baseCommand += (getenv("O2_GPU_RTC_OVERRIDE_CMD") ? std::string(getenv("O2_GPU_RTC_OVERRIDE_CMD")) : std::string(_binary_GPUReconstructionCUDArtc_command_start, _binary_GPUReconstructionCUDArtc_command_len));
164167
#ifdef WITH_OPENMP
165168
#pragma omp parallel for schedule(dynamic, 1)
166169
#endif

GPU/GPUTracking/Base/hip/CMakeLists.txt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,9 @@ 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+
set(GPU_RTC_FLAGS_ARCH "")
8384
foreach(HIP_ARCH ${CMAKE_HIP_ARCHITECTURES})
84-
set(GPU_RTC_FLAGS "${GPU_RTC_FLAGS} --offload-arch=${HIP_ARCH}")
85+
set(GPU_RTC_FLAGS_ARCH "${GPU_RTC_FLAGS_ARCH} --offload-arch=${HIP_ARCH}")
8586
endforeach()
8687

8788
set(GPU_RTC_FLAGS_SEPARATED "${GPU_RTC_FLAGS}")
@@ -118,7 +119,16 @@ if(NOT ALIGPU_BUILD_TYPE STREQUAL "ALIROOT")
118119
)
119120
create_binary_resource(${GPU_RTC_BIN}.command ${GPU_RTC_BIN}.command.o)
120121

121-
set(SRCS ${SRCS} ${GPU_RTC_BIN}.src.o ${GPU_RTC_BIN}.command.o)
122+
add_custom_command(
123+
OUTPUT ${GPU_RTC_BIN}.command.arch
124+
COMMAND echo -n "${GPU_RTC_FLAGS_ARCH}" > ${GPU_RTC_BIN}.command.arch
125+
COMMAND_EXPAND_LISTS
126+
VERBATIM
127+
COMMENT "Preparing HIP RTC ARCH file ${GPU_RTC_BIN}.command.arch"
128+
)
129+
create_binary_resource(${GPU_RTC_BIN}.command.arch ${GPU_RTC_BIN}.command.arch.o)
130+
131+
set(SRCS ${SRCS} ${GPU_RTC_BIN}.src.o ${GPU_RTC_BIN}.command.o ${GPU_RTC_BIN}.command.arch.o)
122132
endif()
123133
# -------------------------------- End RTC -------------------------------------------------------
124134

GPU/GPUTracking/Base/hip/per_kernel/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@
1111

1212
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>, >)
1313
set(CMAKE_CXX_COMPILER ${hip_HIPCC_EXECUTABLE})
14-
set(CMAKE_CXX_FLAGS "${GPU_RTC_FLAGS} --genco")
14+
set(CMAKE_CXX_FLAGS "${GPU_RTC_FLAGS} ${GPU_RTC_FLAGS_ARCH} --genco")
1515
unset(CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE_UPPER})

GPU/GPUTracking/Definitions/GPUSettingsList.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,7 @@ AddOption(tpcMaxAttachedClustersPerSectorRow, unsigned int, 51000, "", 0, "Maxim
283283
AddOption(tpcUseOldCPUDecoding, bool, false, "", 0, "Enable old CPU-based TPC decoding")
284284
AddOption(RTCcacheFolder, std::string, "./rtccache/", "", 0, "Folder in which the cache file is stored")
285285
AddOption(RTCprependCommand, std::string, "", "", 0, "Prepend RTC compilation commands by this string")
286+
AddOption(RTCoverrideArchitecture, std::string, "", "", 0, "Override arhcitecture part of RTC compilation command line")
286287
AddOption(printSettings, bool, false, "", 0, "Print all settings when initializing")
287288
AddVariable(eventDisplay, GPUCA_NAMESPACE::gpu::GPUDisplayFrontendInterface*, nullptr)
288289
AddSubConfig(GPUSettingsProcessingRTC, rtc)

0 commit comments

Comments
 (0)