Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 22 additions & 18 deletions GPU/GPUTracking/Base/cuda/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -159,25 +159,29 @@ endif()
if(GPUCA_CUDA_COMPILE_MODE STREQUAL "onefile")
target_compile_definitions(${targetName} PRIVATE GPUCA_KERNEL_COMPILE_MODE=0)
elseif(GPUCA_CUDA_COMPILE_MODE STREQUAL "perkernel")
add_library(GPUTrackingCUDAKernels 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>, >)
set_property(TARGET GPUTrackingCUDAKernels PROPERTY CUDA_FATBIN_COMPILATION ON)
set_property(TARGET GPUTrackingCUDAKernels PROPERTY CUDA_SEPARABLE_COMPILATION OFF)
target_compile_definitions(${targetName} PRIVATE GPUCA_KERNEL_COMPILE_MODE=1)
target_compile_definitions(GPUTrackingCUDAKernels PRIVATE $<TARGET_PROPERTY:${targetName},COMPILE_DEFINITIONS>)
target_include_directories(GPUTrackingCUDAKernels PRIVATE $<TARGET_PROPERTY:${targetName},INCLUDE_DIRECTORIES>)
target_link_libraries(GPUTrackingCUDAKernels PRIVATE $<TARGET_PROPERTY:${targetName},LINK_LIBRARIES>)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cuda_kernel_module_fatbin)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingCUDAKernelModules.o
COMMAND cp -u $<TARGET_OBJECTS:GPUTrackingCUDAKernels> ${CMAKE_CURRENT_BINARY_DIR}/cuda_kernel_module_fatbin/
COMMAND ${CMAKE_LINKER} -z noexecstack --relocatable --format binary --output ${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingCUDAKernelModules.o $<PATH:RELATIVE_PATH,$<LIST:TRANSFORM,$<PATH:GET_FILENAME,$<TARGET_OBJECTS:GPUTrackingCUDAKernels>>,PREPEND,${CMAKE_CURRENT_BINARY_DIR}/cuda_kernel_module_fatbin/>,${CMAKE_CURRENT_BINARY_DIR}>
DEPENDS GPUTrackingCUDAKernels $<TARGET_OBJECTS:GPUTrackingCUDAKernels>
COMMENT "Compiling fatbin kernels ${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingCUDAKernelModules.o"
VERBATIM
COMMAND_EXPAND_LISTS
)
target_sources(${targetName} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingCUDAKernelModules.o)
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingCUDAKernelModules.o PROPERTIES EXTERNAL_OBJECT true GENERATED true)
if(NOT DEFINED GPUCA_RTC_NO_COMPILED_KERNELS OR NOT GPUCA_RTC_NO_COMPILED_KERNELS)
add_library(GPUTrackingCUDAKernels 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>, >)
set_property(TARGET GPUTrackingCUDAKernels PROPERTY CUDA_FATBIN_COMPILATION ON)
set_property(TARGET GPUTrackingCUDAKernels PROPERTY CUDA_SEPARABLE_COMPILATION OFF)
target_compile_definitions(GPUTrackingCUDAKernels PRIVATE $<TARGET_PROPERTY:${targetName},COMPILE_DEFINITIONS>)
target_include_directories(GPUTrackingCUDAKernels PRIVATE $<TARGET_PROPERTY:${targetName},INCLUDE_DIRECTORIES>)
target_link_libraries(GPUTrackingCUDAKernels PRIVATE $<TARGET_PROPERTY:${targetName},LINK_LIBRARIES>)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cuda_kernel_module_fatbin)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingCUDAKernelModules.o
COMMAND cp -u $<TARGET_OBJECTS:GPUTrackingCUDAKernels> ${CMAKE_CURRENT_BINARY_DIR}/cuda_kernel_module_fatbin/
COMMAND ${CMAKE_LINKER} -z noexecstack --relocatable --format binary --output ${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingCUDAKernelModules.o $<PATH:RELATIVE_PATH,$<LIST:TRANSFORM,$<PATH:GET_FILENAME,$<TARGET_OBJECTS:GPUTrackingCUDAKernels>>,PREPEND,${CMAKE_CURRENT_BINARY_DIR}/cuda_kernel_module_fatbin/>,${CMAKE_CURRENT_BINARY_DIR}>
DEPENDS GPUTrackingCUDAKernels $<TARGET_OBJECTS:GPUTrackingCUDAKernels>
COMMENT "Compiling fatbin kernels ${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingCUDAKernelModules.o"
VERBATIM
COMMAND_EXPAND_LISTS
)
target_sources(${targetName} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingCUDAKernelModules.o)
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingCUDAKernelModules.o PROPERTIES EXTERNAL_OBJECT true GENERATED true)
else()
set_source_files_properties(GPUReconstructionCUDA.cu PROPERTIES COMPILE_DEFINITIONS GPUCA_RTC_NO_COMPILED_KERNELS)
endif()

elseif(GPUCA_CUDA_COMPILE_MODE STREQUAL "rdc")
message(FATAL_ERROR "CUDA RDC compilation of GPUReconstruction ios not yet working!")
Expand Down
7 changes: 7 additions & 0 deletions GPU/GPUTracking/Base/cuda/GPUReconstructionCUDA.cu
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,11 @@
#else // HIP
#define PER_KERNEL_OBJECT_EXT _hip_o
#endif
#ifdef GPUCA_RTC_NO_COMPILED_KERNELS
#define GPUCA_KRNL(x_class, ...) static void* GPUCA_M_CAT3(_binary_cuda_kernel_module_fatbin_krnl_, GPUCA_M_KRNL_NAME(x_class), GPUCA_M_CAT(PER_KERNEL_OBJECT_EXT, _start)) = nullptr;
#else
#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))
#endif
#include "GPUReconstructionKernelList.h"
#undef GPUCA_KRNL
#endif
Expand Down Expand Up @@ -335,6 +339,9 @@ int32_t GPUReconstructionCUDA::InitDevice_Runtime()
}
#if defined(GPUCA_KERNEL_COMPILE_MODE) && GPUCA_KERNEL_COMPILE_MODE == 1
else {
#ifdef GPUCA_RTC_NO_COMPILED_KERNELS
GPUFatal("Compiled with GPUCA_RTC_NO_COMPILED_KERNELS, must run RTC mode!");
#endif
#define GPUCA_KRNL(x_class, ...) \
mInternals->kernelModules.emplace_back(std::make_unique<CUmodule>()); \
GPUChkErr(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))));
Expand Down
46 changes: 25 additions & 21 deletions GPU/GPUTracking/Base/hip/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -223,29 +223,33 @@ endif()
if(GPUCA_HIP_COMPILE_MODE STREQUAL "onefile")
target_compile_definitions(${targetName} PRIVATE GPUCA_KERNEL_COMPILE_MODE=0)
elseif(GPUCA_HIP_COMPILE_MODE STREQUAL "perkernel")
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>, >)
target_compile_options(GPUTrackingHIPKernels PRIVATE "--cuda-device-only")
target_compile_options(GPUTrackingHIPKernels PRIVATE $<$<COMPILE_LANGUAGE:HIP>:-fno-gpu-rdc>)
target_link_options(GPUTrackingHIPKernels PRIVATE $<$<COMPILE_LANGUAGE:HIP>:-fno-gpu-rdc>)
target_compile_definitions(${targetName} PRIVATE GPUCA_KERNEL_COMPILE_MODE=1)
target_compile_definitions(GPUTrackingHIPKernels PRIVATE $<TARGET_PROPERTY:${targetName},COMPILE_DEFINITIONS>)
target_include_directories(GPUTrackingHIPKernels PRIVATE $<TARGET_PROPERTY:${targetName},INCLUDE_DIRECTORIES>)
target_link_libraries(GPUTrackingHIPKernels PRIVATE $<TARGET_PROPERTY:${targetName},LINK_LIBRARIES>)
if(NOT DEFINED GPUCA_HIP_HIPIFY_FROM_CUDA OR "${GPUCA_HIP_HIPIFY_FROM_CUDA}")
add_dependencies(GPUTrackingHIPKernels ${MODULE}_HIPIFIED)
if(NOT DEFINED GPUCA_RTC_NO_COMPILED_KERNELS OR NOT GPUCA_RTC_NO_COMPILED_KERNELS)
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>, >)
target_compile_options(GPUTrackingHIPKernels PRIVATE "--cuda-device-only")
target_compile_options(GPUTrackingHIPKernels PRIVATE $<$<COMPILE_LANGUAGE:HIP>:-fno-gpu-rdc>)
target_link_options(GPUTrackingHIPKernels PRIVATE $<$<COMPILE_LANGUAGE:HIP>:-fno-gpu-rdc>)
target_compile_definitions(GPUTrackingHIPKernels PRIVATE $<TARGET_PROPERTY:${targetName},COMPILE_DEFINITIONS>)
target_include_directories(GPUTrackingHIPKernels PRIVATE $<TARGET_PROPERTY:${targetName},INCLUDE_DIRECTORIES>)
target_link_libraries(GPUTrackingHIPKernels PRIVATE $<TARGET_PROPERTY:${targetName},LINK_LIBRARIES>)
if(NOT DEFINED GPUCA_HIP_HIPIFY_FROM_CUDA OR "${GPUCA_HIP_HIPIFY_FROM_CUDA}")
add_dependencies(GPUTrackingHIPKernels ${MODULE}_HIPIFIED)
endif()
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/hip_kernel_module_fatbin)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingHIPKernelModules.o
COMMAND cp -u $<TARGET_OBJECTS:GPUTrackingHIPKernels> ${CMAKE_CURRENT_BINARY_DIR}/hip_kernel_module_fatbin/
COMMAND ${CMAKE_LINKER} -z noexecstack --relocatable --format binary --output ${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingHIPKernelModules.o $<PATH:RELATIVE_PATH,$<LIST:TRANSFORM,$<PATH:GET_FILENAME,$<TARGET_OBJECTS:GPUTrackingHIPKernels>>,PREPEND,${CMAKE_CURRENT_BINARY_DIR}/hip_kernel_module_fatbin/>,${CMAKE_CURRENT_BINARY_DIR}>
DEPENDS GPUTrackingHIPKernels $<TARGET_OBJECTS:GPUTrackingHIPKernels>
COMMENT "Compiling fatbin kernels ${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingHIPKernelModules.o"
VERBATIM
COMMAND_EXPAND_LISTS
)
target_sources(${targetName} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingHIPKernelModules.o)
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingHIPKernelModules.o PROPERTIES EXTERNAL_OBJECT true GENERATED true)
else()
set_source_files_properties(${GPUCA_HIP_SOURCE_DIR}/GPUReconstructionHIP.hip PROPERTIES COMPILE_DEFINITIONS GPUCA_RTC_NO_COMPILED_KERNELS)
endif()
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/hip_kernel_module_fatbin)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingHIPKernelModules.o
COMMAND cp -u $<TARGET_OBJECTS:GPUTrackingHIPKernels> ${CMAKE_CURRENT_BINARY_DIR}/hip_kernel_module_fatbin/
COMMAND ${CMAKE_LINKER} -z noexecstack --relocatable --format binary --output ${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingHIPKernelModules.o $<PATH:RELATIVE_PATH,$<LIST:TRANSFORM,$<PATH:GET_FILENAME,$<TARGET_OBJECTS:GPUTrackingHIPKernels>>,PREPEND,${CMAKE_CURRENT_BINARY_DIR}/hip_kernel_module_fatbin/>,${CMAKE_CURRENT_BINARY_DIR}>
DEPENDS GPUTrackingHIPKernels $<TARGET_OBJECTS:GPUTrackingHIPKernels>
COMMENT "Compiling fatbin kernels ${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingHIPKernelModules.o"
VERBATIM
COMMAND_EXPAND_LISTS
)
target_sources(${targetName} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingHIPKernelModules.o)
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingHIPKernelModules.o PROPERTIES EXTERNAL_OBJECT true GENERATED true)

elseif(GPUCA_HIP_COMPILE_MODE STREQUAL "rdc")
message(FATAL_ERROR "HIP RDC compilation of GPUReconstruction ios not yet working!")
Expand Down
3 changes: 2 additions & 1 deletion GPU/GPUTracking/Definitions/GPUSettingsList.h
Original file line number Diff line number Diff line change
Expand Up @@ -556,7 +556,8 @@ AddOption(nEvents, int32_t, -1, "", 'n', "Number of events to process (-1; all)"
AddOption(runs, int32_t, 1, "runs", 'r', "Number of iterations to perform (repeat each event)", min(0))
AddOption(runs2, int32_t, 1, "runsExternal", 0, "Number of iterations to perform (repeat full processing)", min(1))
AddOption(runsInit, int32_t, 1, "", 0, "Number of initial iterations excluded from average", min(0))
AddOption(eventsDir, const char*, "pp", "events", 'e', "Directory with events to process", message("Reading events from Directory events/%s"))
AddOption(eventsDir, const char*, "pp", "events", 'e', "Directory with events to process", message("Reading events from Directory %s"))
AddOption(absoluteEventsDir, bool, false, "", 0, "Events directory is absolute, and not inside './events/'")
AddOption(noEvents, bool, false, "", 0, "Run without data (e.g. for field visualization)")
AddOption(eventDisplay, int32_t, 0, "display", 'd', "Show standalone event display", def(1))
AddOption(eventGenerator, bool, false, "", 0, "Run event generator")
Expand Down
32 changes: 13 additions & 19 deletions GPU/GPUTracking/Standalone/Benchmark/standalone.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ extern GPUSettingsStandalone configStandalone;
GPUReconstruction *rec, *recAsync, *recPipeline;
GPUChainTracking *chainTracking, *chainTrackingAsync, *chainTrackingPipeline;
GPUChainITS *chainITS, *chainITSAsync, *chainITSPipeline;
std::string eventsDir;
void unique_ptr_aligned_delete(char* v)
{
operator delete(v, std::align_val_t(GPUCA_BUFFER_ALIGNMENT));
Expand Down Expand Up @@ -277,21 +278,19 @@ int32_t ReadConfiguration(int argc, char** argv)
int32_t SetupReconstruction()
{
if (!configStandalone.eventGenerator) {
char filename[256];
snprintf(filename, 256, "events/%s/", configStandalone.eventsDir);
if (configStandalone.noEvents) {
configStandalone.eventsDir = "NON_EXISTING";
eventsDir = "NON_EXISTING";
configStandalone.rundEdx = false;
} else if (rec->ReadSettings(filename)) {
} else if (rec->ReadSettings(eventsDir.c_str())) {
printf("Error reading event config file\n");
return 1;
}
printf("Read event settings from dir %s (solenoidBz: %f, constBz %d, maxTimeBin %d)\n", filename, rec->GetGRPSettings().solenoidBzNominalGPU, (int32_t)rec->GetGRPSettings().constBz, rec->GetGRPSettings().grpContinuousMaxTimeBin);
printf("Read event settings from dir %s (solenoidBz: %f, constBz %d, maxTimeBin %d)\n", eventsDir.c_str(), rec->GetGRPSettings().solenoidBzNominalGPU, (int32_t)rec->GetGRPSettings().constBz, rec->GetGRPSettings().grpContinuousMaxTimeBin);
if (configStandalone.testSyncAsync) {
recAsync->ReadSettings(filename);
recAsync->ReadSettings(eventsDir.c_str());
}
if (configStandalone.proc.doublePipeline) {
recPipeline->ReadSettings(filename);
recPipeline->ReadSettings(eventsDir.c_str());
}
}

Expand Down Expand Up @@ -504,23 +503,19 @@ int32_t SetupReconstruction()

int32_t ReadEvent(int32_t n)
{
char filename[256];
snprintf(filename, 256, "events/%s/" GPUCA_EVDUMP_FILE ".%d.dump", configStandalone.eventsDir, n);
if (configStandalone.inputcontrolmem && !configStandalone.preloadEvents) {
rec->SetInputControl(inputmemory.get(), configStandalone.inputcontrolmem);
}
int32_t r = chainTracking->ReadData(filename);
int32_t r = chainTracking->ReadData((eventsDir + GPUCA_EVDUMP_FILE "." + std::to_string(n) + ".dump").c_str());
if (r) {
return r;
}
#if defined(GPUCA_TPC_GEOMETRY_O2) && defined(GPUCA_BUILD_QA) && !defined(GPUCA_O2_LIB)
if ((configStandalone.proc.runQA || configStandalone.eventDisplay) && !configStandalone.QA.noMC) {
chainTracking->ForceInitQA();
snprintf(filename, 256, "events/%s/mc.%d.dump", configStandalone.eventsDir, n);
chainTracking->GetQA()->UpdateChain(chainTracking);
if (chainTracking->GetQA()->ReadO2MCData(filename)) {
snprintf(filename, 256, "events/%s/mc.%d.dump", configStandalone.eventsDir, 0);
if (chainTracking->GetQA()->ReadO2MCData(filename) && configStandalone.proc.runQA) {
if (chainTracking->GetQA()->ReadO2MCData((eventsDir + "mc." + std::to_string(n) + ".dump").c_str())) {
if (chainTracking->GetQA()->ReadO2MCData((eventsDir + "mc.0.dump").c_str()) && configStandalone.proc.runQA) {
throw std::runtime_error("Error reading O2 MC dump");
}
}
Expand Down Expand Up @@ -725,6 +720,7 @@ int32_t main(int argc, char** argv)
if (ReadConfiguration(argc, argv)) {
return 1;
}
eventsDir = std::string(configStandalone.absoluteEventsDir ? "" : "events/") + configStandalone.eventsDir + "/";

GPUSettingsDeviceBackend deviceSet;
deviceSet.deviceType = configStandalone.runGPU ? GPUDataTypes::GetDeviceType(configStandalone.gpuType.c_str()) : GPUDataTypes::DeviceType::CPU;
Expand Down Expand Up @@ -787,9 +783,7 @@ int32_t main(int argc, char** argv)

for (nEventsInDirectory = 0; true; nEventsInDirectory++) {
std::ifstream in;
char filename[256];
snprintf(filename, 256, "events/%s/" GPUCA_EVDUMP_FILE ".%d.dump", configStandalone.eventsDir, nEventsInDirectory);
in.open(filename, std::ifstream::binary);
in.open((eventsDir + GPUCA_EVDUMP_FILE "." + std::to_string(nEventsInDirectory) + ".dump").c_str(), std::ifstream::binary);
if (in.fail()) {
break;
}
Expand All @@ -801,7 +795,7 @@ int32_t main(int argc, char** argv)
}

if (configStandalone.eventGenerator) {
genEvents::RunEventGenerator(chainTracking);
genEvents::RunEventGenerator(chainTracking, eventsDir);
return 0;
}

Expand All @@ -811,7 +805,7 @@ int32_t main(int argc, char** argv)
} else {
if (nEvents == -1 || nEvents > nEventsInDirectory) {
if (nEvents >= 0) {
printf("Only %d events available in directors %s (%d events requested)\n", nEventsInDirectory, configStandalone.eventsDir, nEvents);
printf("Only %d events available in directory %s (%d events requested)\n", nEventsInDirectory, eventsDir.c_str(), nEvents);
}
nEvents = nEventsInDirectory;
}
Expand Down
1 change: 1 addition & 0 deletions GPU/GPUTracking/Standalone/cmake/config.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ set(HIP_AMDGPUTARGET "default") # "gfx906;gfx908;gfx90a"
set(CUDA_COMPUTETARGET "default") # 86 89
#set(GPUCA_CUDA_COMPILE_MODE perkernel) # onefile / perkernel / rtc
#set(GPUCA_HIP_COMPILE_MODE perkernel)
#set(GPUCA_RTC_NO_COMPILED_KERNELS 1)
#set(GPUCA_KERNEL_RESOURCE_USAGE_VERBOSE 1)
#set(GPUCA_CONFIG_COMPILER gcc) # gcc / clang
#add_definitions(-DGPUCA_GPU_DEBUG_PRINT)
13 changes: 5 additions & 8 deletions GPU/GPUTracking/qa/genEvents.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ void genEvents::FinishEventGenerator()
}
}

int32_t genEvents::GenerateEvent(const GPUParam& param, char* filename)
int32_t genEvents::GenerateEvent(const GPUParam& param, const char* filename)
{
mRec->ClearIOPointers();
static int32_t iEvent = -1;
Expand Down Expand Up @@ -354,20 +354,17 @@ int32_t genEvents::GenerateEvent(const GPUParam& param, char* filename)
return (0);
}

void genEvents::RunEventGenerator(GPUChainTracking* rec)
void genEvents::RunEventGenerator(GPUChainTracking* rec, const std::string& dir)
{
std::unique_ptr<genEvents> gen(new genEvents(rec));
char dirname[256];
snprintf(dirname, 256, "events/%s/", configStandalone.eventsDir);
mkdir(dirname, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
rec->DumpSettings(dirname);
mkdir(dir.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
rec->DumpSettings(dir.c_str());

gen->InitEventGenerator();

for (int32_t i = 0; i < (configStandalone.nEvents == -1 ? 10 : configStandalone.nEvents); i++) {
GPUInfo("Generating event %d/%d", i, configStandalone.nEvents == -1 ? 10 : configStandalone.nEvents);
snprintf(dirname, 256, "events/%s/" GPUCA_EVDUMP_FILE ".%d.dump", configStandalone.eventsDir, i);
gen->GenerateEvent(rec->GetParam(), dirname);
gen->GenerateEvent(rec->GetParam(), (dir + GPUCA_EVDUMP_FILE "." + std::to_string(i) + ".dump").c_str());
}
gen->FinishEventGenerator();
}
8 changes: 4 additions & 4 deletions GPU/GPUTracking/qa/genEvents.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ class genEvents
public:
genEvents(GPUChainTracking* rec) {}
void InitEventGenerator() {}
int32_t GenerateEvent(const GPUParam& sectorParam, char* filename) { return 1; }
int32_t GenerateEvent(const GPUParam& sectorParam, const char* filename) { return 1; }
void FinishEventGenerator() {}

static void RunEventGenerator(GPUChainTracking* rec) {};
static void RunEventGenerator(GPUChainTracking* rec, const std::string& dir) {};
};

#else
Expand All @@ -41,10 +41,10 @@ class genEvents
public:
genEvents(GPUChainTracking* rec) : mRec(rec) {}
void InitEventGenerator();
int32_t GenerateEvent(const GPUParam& sectorParam, char* filename);
int32_t GenerateEvent(const GPUParam& sectorParam, const char* filename);
void FinishEventGenerator();

static void RunEventGenerator(GPUChainTracking* rec);
static void RunEventGenerator(GPUChainTracking* rec, const std::string& dir);

private:
int32_t GetSector(double GlobalPhi);
Expand Down