Changeset View
Changeset View
Standalone View
Standalone View
openmp/libomptarget/DeviceRTL/src/State.cpp
Show First 20 Lines • Show All 490 Lines • ▼ Show 20 Lines | |||||
int omp_get_team_num() { return mapping::getBlockId(); } | int omp_get_team_num() { return mapping::getBlockId(); } | ||||
int omp_get_initial_device(void) { return -1; } | int omp_get_initial_device(void) { return -1; } | ||||
} | } | ||||
extern "C" { | extern "C" { | ||||
__attribute__((noinline)) void *__kmpc_alloc_shared(uint64_t Bytes) { | __attribute__((noinline)) void *__kmpc_alloc_shared(uint64_t Bytes) { | ||||
FunctionTracingRAII(); | |||||
return memory::allocShared(Bytes, "Frontend alloc shared"); | return memory::allocShared(Bytes, "Frontend alloc shared"); | ||||
} | } | ||||
__attribute__((noinline)) void __kmpc_free_shared(void *Ptr, uint64_t Bytes) { | __attribute__((noinline)) void __kmpc_free_shared(void *Ptr, uint64_t Bytes) { | ||||
FunctionTracingRAII(); | |||||
memory::freeShared(Ptr, Bytes, "Frontend free shared"); | memory::freeShared(Ptr, Bytes, "Frontend free shared"); | ||||
} | } | ||||
void *__kmpc_get_dynamic_shared() { return memory::getDynamicBuffer(); } | void *__kmpc_get_dynamic_shared() { return memory::getDynamicBuffer(); } | ||||
void *llvm_omp_get_dynamic_shared() { return __kmpc_get_dynamic_shared(); } | void *llvm_omp_get_dynamic_shared() { return __kmpc_get_dynamic_shared(); } | ||||
/// Allocate storage in shared memory to communicate arguments from the main | /// Allocate storage in shared memory to communicate arguments from the main | ||||
/// thread to the workers in generic mode. If we exceed | /// thread to the workers in generic mode. If we exceed | ||||
/// NUM_SHARED_VARIABLES_IN_SHARED_MEM we will malloc space for communication. | /// NUM_SHARED_VARIABLES_IN_SHARED_MEM we will malloc space for communication. | ||||
constexpr uint64_t NUM_SHARED_VARIABLES_IN_SHARED_MEM = 64; | constexpr uint64_t NUM_SHARED_VARIABLES_IN_SHARED_MEM = 64; | ||||
[[clang::loader_uninitialized]] static void | [[clang::loader_uninitialized]] static void | ||||
*SharedMemVariableSharingSpace[NUM_SHARED_VARIABLES_IN_SHARED_MEM]; | *SharedMemVariableSharingSpace[NUM_SHARED_VARIABLES_IN_SHARED_MEM]; | ||||
#pragma omp allocate(SharedMemVariableSharingSpace) \ | #pragma omp allocate(SharedMemVariableSharingSpace) \ | ||||
allocator(omp_pteam_mem_alloc) | allocator(omp_pteam_mem_alloc) | ||||
[[clang::loader_uninitialized]] static void **SharedMemVariableSharingSpacePtr; | [[clang::loader_uninitialized]] static void **SharedMemVariableSharingSpacePtr; | ||||
#pragma omp allocate(SharedMemVariableSharingSpacePtr) \ | #pragma omp allocate(SharedMemVariableSharingSpacePtr) \ | ||||
allocator(omp_pteam_mem_alloc) | allocator(omp_pteam_mem_alloc) | ||||
void __kmpc_begin_sharing_variables(void ***GlobalArgs, uint64_t nArgs) { | void __kmpc_begin_sharing_variables(void ***GlobalArgs, uint64_t nArgs) { | ||||
FunctionTracingRAII(); | |||||
if (nArgs <= NUM_SHARED_VARIABLES_IN_SHARED_MEM) { | if (nArgs <= NUM_SHARED_VARIABLES_IN_SHARED_MEM) { | ||||
SharedMemVariableSharingSpacePtr = &SharedMemVariableSharingSpace[0]; | SharedMemVariableSharingSpacePtr = &SharedMemVariableSharingSpace[0]; | ||||
} else { | } else { | ||||
SharedMemVariableSharingSpacePtr = (void **)memory::allocGlobal( | SharedMemVariableSharingSpacePtr = (void **)memory::allocGlobal( | ||||
nArgs * sizeof(void *), "new extended args"); | nArgs * sizeof(void *), "new extended args"); | ||||
} | } | ||||
*GlobalArgs = SharedMemVariableSharingSpacePtr; | *GlobalArgs = SharedMemVariableSharingSpacePtr; | ||||
} | } | ||||
void __kmpc_end_sharing_variables() { | void __kmpc_end_sharing_variables() { | ||||
FunctionTracingRAII(); | |||||
if (SharedMemVariableSharingSpacePtr != &SharedMemVariableSharingSpace[0]) | if (SharedMemVariableSharingSpacePtr != &SharedMemVariableSharingSpace[0]) | ||||
memory::freeGlobal(SharedMemVariableSharingSpacePtr, "new extended args"); | memory::freeGlobal(SharedMemVariableSharingSpacePtr, "new extended args"); | ||||
} | } | ||||
void __kmpc_get_shared_variables(void ***GlobalArgs) { | void __kmpc_get_shared_variables(void ***GlobalArgs) { | ||||
FunctionTracingRAII(); | |||||
*GlobalArgs = SharedMemVariableSharingSpacePtr; | *GlobalArgs = SharedMemVariableSharingSpacePtr; | ||||
} | } | ||||
} | } | ||||
#pragma omp end declare target | #pragma omp end declare target |