[llvm-bugs] [Bug 49207] New: Misuse of libomptarget plugin interface

via llvm-bugs llvm-bugs at lists.llvm.org
Tue Feb 16 08:54:58 PST 2021


https://bugs.llvm.org/show_bug.cgi?id=49207

            Bug ID: 49207
           Summary: Misuse of libomptarget plugin interface
           Product: OpenMP
           Version: unspecified
          Hardware: PC
                OS: All
            Status: NEW
          Severity: release blocker
          Priority: P
         Component: Runtime Library
          Assignee: unassignedbugs at nondot.org
          Reporter: tianshilei1992 at gmail.com
                CC: llvm-bugs at lists.llvm.org

This bug was reported by Guilherme Valarini via Openmp-dev
(openmp-dev at lists.llvm.org). The link is
https://lists.llvm.org/pipermail/openmp-dev/2021-February/003867.html

The following is the bug description.

In both cases, the address to a local variable is passed as the host data to be
copied to the target device, but since this function can be asynchronously
executed, such variables can get out of scope when the actual submission is
done.


```
// File: openmp/libomptarget/src/omptarget.cpp:419
if (arg_types[i] & OMP_TGT_MAPTYPE_PTR_AND_OBJ && !IsHostPtr) {
  DP("Update pointer (" DPxMOD ") -> [" DPxMOD "]\n",
      DPxPTR(PointerTgtPtrBegin), DPxPTR(TgtPtrBegin));
  uint64_t Delta = (uint64_t)HstPtrBegin - (uint64_t)HstPtrBase;
  void *TgtPtrBase = (void *)((uint64_t)TgtPtrBegin - Delta);
  int rt = Device.submitData(PointerTgtPtrBegin, &TgtPtrBase,
                              sizeof(void *), async_info_ptr);
  if (rt != OFFLOAD_SUCCESS) {
    REPORT("Copying data to device failed.\n");
    return OFFLOAD_FAIL;
  }
  // create shadow pointers for this entry
  Device.ShadowMtx.lock();
  Device.ShadowPtrMap[Pointer_HstPtrBegin] = {
      HstPtrBase, PointerTgtPtrBegin, TgtPtrBase};
  Device.ShadowMtx.unlock();
}
```

```
// File: openmp/libomptarget/src/omptarget.cpp:1141
DP("Parent lambda base " DPxMOD "\n", DPxPTR(TgtPtrBase));
uint64_t Delta = (uint64_t)HstPtrBegin - (uint64_t)HstPtrBase;
void *TgtPtrBegin = (void *)((uintptr_t)TgtPtrBase + Delta);
void *PointerTgtPtrBegin = Device.getTgtPtrBegin(
    HstPtrVal, ArgSizes[I], IsLast, false, IsHostPtr);
if (!PointerTgtPtrBegin) {
  DP("No lambda captured variable mapped (" DPxMOD ") - ignored\n",
      DPxPTR(HstPtrVal));
  continue;
}
if (PM->RTLs.RequiresFlags & OMP_REQ_UNIFIED_SHARED_MEMORY &&
    TgtPtrBegin == HstPtrBegin) {
  DP("Unified memory is active, no need to map lambda captured"
      "variable (" DPxMOD ")\n",
      DPxPTR(HstPtrVal));
  continue;
}
DP("Update lambda reference (" DPxMOD ") -> [" DPxMOD "]\n",
    DPxPTR(PointerTgtPtrBegin), DPxPTR(TgtPtrBegin));
Ret = Device.submitData(TgtPtrBegin, &PointerTgtPtrBegin,
                        sizeof(void *), AsyncInfo);
if (Ret != OFFLOAD_SUCCESS) {
  REPORT("Copying data to device failed.\n");
  return OFFLOAD_FAIL;
}
```

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20210216/a86ca959/attachment.html>


More information about the llvm-bugs mailing list