24#include "../utils/pthread_mutex_win32_wrapper.h"
33#define SemLockName "AliceHLTTPCGPUTrackerInitLockSem"
38 GPUFatal(
"Mismatch of C++ object size between GPU compilers!");
47 HANDLE* semLock =
new HANDLE;
48 *semLock = CreateSemaphore(
nullptr, 1, 1,
SemLockName);
49 if (*semLock ==
nullptr) {
50 GPUError(
"Error creating GPUInit Semaphore");
53 WaitForSingleObject(*semLock, INFINITE);
54#elif !defined(__APPLE__)
56 if (semLock == SEM_FAILED) {
57 GPUError(
"Error creating GPUInit Semaphore");
61 clock_gettime(CLOCK_REALTIME, &semtime);
63 while (sem_timedwait(semLock, &semtime) != 0) {
64 GPUError(
"Global Lock for GPU initialisation was not released for 10 seconds, assuming another thread died");
65 GPUWarning(
"Resetting the global lock");
69 void* semLock =
nullptr;
79 HANDLE*
h = (HANDLE*)sem;
80 ReleaseSemaphore(*
h, 1,
nullptr);
83#elif !defined(__APPLE__)
98 GPUError(
"Individual memory allocation strategy unsupported for device\n");
106 void* semLock =
nullptr;
117 GPUImportant(
"GPU Tracker initialization failed");
134 GPUInfo(
"GPU Tracker initialization successfull");
140void* GPUReconstructionDeviceBase::GPUProcessorProcessors::SetPointersDeviceProcessor(
void* mem)
149 int32_t
retVal = ExitDevice_Runtime();
177 auto&
list = getDeviceConstantMemRegistratorsVector();
178 for (uint32_t
i = 0;
i <
list.size();
i++) {
179 mDeviceConstantMemList.emplace_back(
list[
i]());
187 GPUInfo(
"Skipped transfer of non-GPU memory resource: %s",
res->Name());
192 GPUInfo(
"Copying to %s: %s - %ld bytes", toGPU ?
"GPU" :
"Host",
res->Name(), (int64_t)
res->Size());
#define GPUCA_MAX_STREAMS
Class for time synchronization of RawReader instances.
static void computePointerWithAlignment(T *&basePtr, S *&objPtr, size_t nEntries=1)
void InitGPUProcessor(GPUReconstruction *rec, ProcessorType type=PROCESSOR_TYPE_CPU, GPUProcessor *slaveProcessor=nullptr)
GPUConstantMem *& mProcessorsShadow
virtual size_t GPUMemCpy(void *dst, const void *src, size_t size, int32_t stream, int32_t toGPU, deviceEvent *ev=nullptr, deviceEvent *evList=nullptr, int32_t nEvents=1)
int32_t unregisterMemoryForGPU_internal(const void *ptr) override
GPUProcessorProcessors mProcShadow
virtual int32_t InitDevice_Runtime()=0
int32_t ExitDevice() override
size_t TransferMemoryInternal(GPUMemoryResource *res, int32_t stream, deviceEvent *ev, deviceEvent *evList, int32_t nEvents, bool toGPU, const void *src, void *dst) override
void ReleaseGlobalLock(void *sem)
~GPUReconstructionDeviceBase() override
int32_t InitDevice() override
int32_t GetGlobalLock(void *&pLock)
DebugEvents * mDebugEvents
GPUReconstructionDeviceBase(const GPUSettingsDeviceBackend &cfg, size_t sizeCheck)
int32_t registerMemoryForGPU_internal(const void *ptr, size_t size) override
void runConstantRegistrators()
void unregisterRemainingRegisteredMemory()
int32_t unregisterMemoryForGPU_internal(const void *ptr) override
void AddGPUEvents(T *&events)
std::unordered_set< const void * > mRegisteredMemoryPtrs
GPUReconstruction * mMaster
GPUSettingsProcessing mProcessingSettings
int16_t RegisterMemoryAllocation(T *proc, void *(T::*setPtr)(void *), int32_t type, const char *name="", const GPUMemoryReuse &re=GPUMemoryReuse())
void ClearAllocatedMemory(bool clearOutputs=true)
void * mDeviceMemoryPoolEnd
void * mDeviceMemoryPermanent
void * mHostMemoryPoolEnd
void * mHostMemoryPermanent
size_t AllocateRegisteredMemory(GPUProcessor *proc, bool resetCustom=false)
GPUConstantMem * mProcessorsProc
int16_t mMemoryResProcessors