[PATCH] D97680: [OpenMP] Simplify GPU memory globalization
Joseph Huber via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 1 05:54:51 PST 2021
jhuber6 created this revision.
jhuber6 added a reviewer: jdoerfert.
jhuber6 added projects: LLVM, clang, OpenMP.
Herald added subscribers: jfb, guansong, hiraditya, yaxunl.
jhuber6 requested review of this revision.
Herald added subscribers: llvm-commits, openmp-commits, cfe-commits, sstefan1.
Memory globalization is required to maintain OpenMP standard semantics for data sharing between
worker and master threads. The GPU cannot share data between its threads so must allocate global or
shared memory to store the data in. Currently this is implemented fully in the frontend using the
`__kmpc_data_sharing_push_stack` and __kmpc_data_sharing_pop_stack` functions to emulate standard
CPU stack sharing. The front-end scans the target region for variables that escape the region and
must be shared between the threads. Each variable then has a field created for it in a global record
type.
This patch replaces this functionality with a single allocation command, effectively mimicking an
alloca instruction for the variables that must be shared between the threads. This will be much
slower than the current solution, but makes it much easier to optimize as we can analyze each
variable independently and determine if it is not captured. In the future, we can replace these
calls with an `alloca` and small allocations can be pushed to shared memory.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D97680
Files:
clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
clang/lib/CodeGen/CGOpenMPRuntimeGPU.h
llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
llvm/lib/Transforms/IPO/OpenMPOpt.cpp
openmp/libomptarget/deviceRTLs/common/src/data_sharing.cu
openmp/libomptarget/deviceRTLs/interface.h
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D97680.327087.patch
Type: text/x-patch
Size: 48083 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210301/4735627c/attachment-0001.bin>
More information about the llvm-commits
mailing list