From 5272d29e2cb7c967c3016fa285f14edc7515d9bf Mon Sep 17 00:00:00 2001 From: Johannes Doerfert Date: Sun, 16 Aug 2020 11:00:33 -0500 Subject: [PATCH] [OpenMP][CUDA] Keep one kernel list per device, not globally. Reviewed By: JonChesterfield Differential Revision: https://reviews.llvm.org/D86039 --- openmp/libomptarget/plugins/cuda/src/rtl.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/openmp/libomptarget/plugins/cuda/src/rtl.cpp b/openmp/libomptarget/plugins/cuda/src/rtl.cpp index 6921c78..a0060db 100644 --- a/openmp/libomptarget/plugins/cuda/src/rtl.cpp +++ b/openmp/libomptarget/plugins/cuda/src/rtl.cpp @@ -89,10 +89,6 @@ struct omptarget_device_environmentTy { int32_t debug_level; }; -/// List that contains all the kernels. -/// FIXME: we may need this to be per device and per library. -std::list KernelsList; - namespace { bool checkResult(CUresult Err, const char *ErrMsg) { if (Err == CUDA_SUCCESS) @@ -121,7 +117,11 @@ int memcpyDtoD(const void *SrcPtr, void *DstPtr, int64_t Size, // Structure contains per-device data struct DeviceDataTy { + /// List that contains all the kernels. + std::list KernelsList; + std::list FuncGblEntries; + CUcontext Context = nullptr; // Device properties int ThreadsPerBlock = 0; @@ -568,6 +568,7 @@ public: const __tgt_offload_entry *HostBegin = Image->EntriesBegin; const __tgt_offload_entry *HostEnd = Image->EntriesEnd; + std::list &KernelsList = DeviceData[DeviceId].KernelsList; for (const __tgt_offload_entry *E = HostBegin; E != HostEnd; ++E) { if (!E->addr) { // We return nullptr when something like this happens, the host should -- 2.7.4