[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