[Openmp-commits] [PATCH] D104560: [OpenMP] Fix delete map type in ref count debug messages

Joel E. Denny via Phabricator via Openmp-commits openmp-commits at lists.llvm.org
Fri Jun 18 11:14:41 PDT 2021


jdenny created this revision.
jdenny added reviewers: grokos, AndreyChurbanov, jhuber6, RaviNarayanaswamy, jdoerfert.
Herald added subscribers: guansong, yaxunl.
jdenny requested review of this revision.
Herald added a subscriber: sstefan1.
Herald added a project: OpenMP.

For example, without this patch:

  $ cat test.c
  int main() {
    int x;
    #pragma omp target enter data map(alloc: x)
    #pragma omp target enter data map(alloc: x)
    #pragma omp target enter data map(alloc: x)
    #pragma omp target exit data map(delete: x)
    ;
    return 0;
  }
  $ clang -fopenmp -fopenmp-targets=nvptx64-nvidia-cuda test.c
  $ LIBOMPTARGET_DEBUG=1 ./a.out |& grep 'Creating\|Mapping exists\|last'
  Libomptarget --> Creating new map entry with HstPtrBegin=0x00007ffddf1eaea8, TgtPtrBegin=0x00000000013bb040, Size=4, RefCount=1, Name=unknown
  Libomptarget --> Mapping exists with HstPtrBegin=0x00007ffddf1eaea8, TgtPtrBegin=0x00000000013bb040, Size=4, RefCount=2 (incremented), Name=unknown
  Libomptarget --> Mapping exists with HstPtrBegin=0x00007ffddf1eaea8, TgtPtrBegin=0x00000000013bb040, Size=4, RefCount=3 (incremented), Name=unknown
  Libomptarget --> Mapping exists with HstPtrBegin=0x00007ffddf1eaea8, TgtPtrBegin=0x00000000013bb040, Size=4, RefCount=2 (decremented)
  Libomptarget --> There are 4 bytes allocated at target address 0x00000000013bb040 - is not last

`RefCount` is reported as decremented to 2, but it ought to be reset
because of the `delete` map type, and `is not last` is incorrect.

This patch migrates the reset of reference counts from
`DeviceTy::deallocTgtPtr` to `DeviceTy::getTgtPtrBegin`, which then
correctly reports the reset.  Based on the `IsLast` result from
`DeviceTy::getTgtPtrBegin`, `targetDataEnd` then correctly reports `is 
last` for any deletion.  `DeviceTy::deallocTgtPtr` is responsible only
for the final reference count decrement and mapping removal.

An obscure side effect of this patch is that a `delete` map type when
the reference count is infinite yields `DelEntry=IsLast=false` in
`targetDataEnd` and so no longer results in a
`DeviceTy::deallocTgtPtr` call.  Without this patch, that call is a
no-op anyway besides some unnecessary locking and mapping table
lookups.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D104560

Files:
  openmp/libomptarget/src/device.cpp
  openmp/libomptarget/src/device.h
  openmp/libomptarget/src/omptarget.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D104560.353058.patch
Type: text/x-patch
Size: 4205 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20210618/83e319c8/attachment-0001.bin>


More information about the Openmp-commits mailing list