From 6b2b9b434f27bb291d672b99cb9eff8bf823c580 Mon Sep 17 00:00:00 2001 From: Chris Perkins Date: Mon, 14 Sep 2020 16:22:09 -0700 Subject: [PATCH 1/5] releasing of resources from commands that may not have been invoked, or if queue::wait() is not called Signed-off-by: Chris Perkins --- sycl/include/CL/sycl/queue.hpp | 2 ++ sycl/source/detail/queue_impl.hpp | 10 ++++++++++ sycl/source/queue.cpp | 5 +++++ sycl/test/basic_tests/queue/release.cpp | 21 +++++++++++++++++++++ 4 files changed, 38 insertions(+) create mode 100644 sycl/test/basic_tests/queue/release.cpp diff --git a/sycl/include/CL/sycl/queue.hpp b/sycl/include/CL/sycl/queue.hpp index d3b7d3d718cdc..63241119350be 100644 --- a/sycl/include/CL/sycl/queue.hpp +++ b/sycl/include/CL/sycl/queue.hpp @@ -149,6 +149,8 @@ class __SYCL_EXPORT queue { queue(queue &&RHS) = default; + ~queue(); // forward declaration + queue &operator=(const queue &RHS) = default; queue &operator=(queue &&RHS) = default; diff --git a/sycl/source/detail/queue_impl.hpp b/sycl/source/detail/queue_impl.hpp index 7b1bf09317bc1..088abf882ce17 100644 --- a/sycl/source/detail/queue_impl.hpp +++ b/sycl/source/detail/queue_impl.hpp @@ -124,6 +124,16 @@ class queue_impl { } } + /// command resources are usually released from queue.wait(), but + /// if that is not invoked, then they may still need releasing. + void releaseUninvokedResources() { + for (std::weak_ptr &EventImplWeakPtr : MEvents) { + if (std::shared_ptr EventImplPtr = EventImplWeakPtr.lock()) + detail::Scheduler::getInstance().cleanupFinishedCommands( + std::move(EventImplPtr)); + } + } + /// \return an OpenCL interoperability queue handle. cl_command_queue get() { if (!MHostQueue) { diff --git a/sycl/source/queue.cpp b/sycl/source/queue.cpp index 21ec93eb5eb4a..72ab99e3c8664 100644 --- a/sycl/source/queue.cpp +++ b/sycl/source/queue.cpp @@ -66,6 +66,11 @@ queue::queue(const context &SyclContext, const device &SyclDevice, detail::getSyclObjImpl(SyclContext)->get_async_handler(), PropList) {} +queue::~queue() { + if (impl) + impl->releaseUninvokedResources(); +} + cl_command_queue queue::get() const { return impl->get(); } context queue::get_context() const { return impl->get_context(); } diff --git a/sycl/test/basic_tests/queue/release.cpp b/sycl/test/basic_tests/queue/release.cpp new file mode 100644 index 0000000000000..a42a33963bf3b --- /dev/null +++ b/sycl/test/basic_tests/queue/release.cpp @@ -0,0 +1,21 @@ +// RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -o %t.out +// RUN: env SYCL_PI_TRACE=2 %GPU_RUN_PLACEHOLDER %t.out | FileCheck %s +// RUN: env SYCL_PI_TRACE=2 %CPU_RUN_PLACEHOLDER %t.out | FileCheck %s + +#include +int main() { + sycl::queue q; + + q.single_task([]() {}); + // no wait. + + return 0; +} + +//CHECK: ---> piEnqueueKernelLaunch( +//CHECK: ---> piEventRelease( +//CHECK: ---> piQueueRelease( +//CHECK: ---> piProgramRelease( +//CHECK: ---> piContextRelease( +//CHECK: ---> piKernelRelease( +//CHECK: ---> piProgramRelease( \ No newline at end of file From 769ec669c525a9acb778183f2b8534d5e2aa582f Mon Sep 17 00:00:00 2001 From: Chris Perkins Date: Mon, 14 Sep 2020 16:34:50 -0700 Subject: [PATCH 2/5] abi updated Signed-off-by: Chris Perkins --- sycl/test/abi/sycl_symbols_linux.dump | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/sycl/test/abi/sycl_symbols_linux.dump b/sycl/test/abi/sycl_symbols_linux.dump index 323961f0585aa..322f10fcb9291 100644 --- a/sycl/test/abi/sycl_symbols_linux.dump +++ b/sycl/test/abi/sycl_symbols_linux.dump @@ -3645,6 +3645,8 @@ _ZN2cl4sycl5queueC2ERKNS0_7contextERKNS0_15device_selectorERKNS0_13property_list _ZN2cl4sycl5queueC2ERKNS0_7contextERKNS0_15device_selectorERKSt8functionIFvNS0_14exception_listEEERKNS0_13property_listE _ZN2cl4sycl5queueC2ERKNS0_7contextERKNS0_6deviceERKNS0_13property_listE _ZN2cl4sycl5queueC2ERKNS0_7contextERKNS0_6deviceERKSt8functionIFvNS0_14exception_listEEERKNS0_13property_listE +_ZN2cl4sycl5queueD1Ev +_ZN2cl4sycl5queueD2Ev _ZN2cl4sycl6ONEAPI15filter_selectorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE _ZN2cl4sycl6ONEAPI15filter_selectorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE _ZN2cl4sycl6ONEAPI6detail16reduGetMaxWGSizeESt10shared_ptrINS0_6detail10queue_implEEm @@ -3720,6 +3722,9 @@ _ZN2cl4sycl6detail11SYCLMemObjT20getBufSizeForContextERKSt10shared_ptrINS1_12con _ZN2cl4sycl6detail11SYCLMemObjTC1EP7_cl_memRKNS0_7contextEmNS0_5eventESt10unique_ptrINS1_19SYCLMemObjAllocatorESt14default_deleteISA_EE _ZN2cl4sycl6detail11SYCLMemObjTC2EP7_cl_memRKNS0_7contextEmNS0_5eventESt10unique_ptrINS1_19SYCLMemObjAllocatorESt14default_deleteISA_EE _ZN2cl4sycl6detail11buffer_impl11allocateMemESt10shared_ptrINS1_12context_implEEbPvRP9_pi_event +_ZN2cl4sycl6detail11stream_impl15accessGlobalBufERNS0_7handlerE +_ZN2cl4sycl6detail11stream_impl18accessGlobalOffsetERNS0_7handlerE +_ZN2cl4sycl6detail11stream_impl20accessGlobalFlushBufERNS0_7handlerE _ZN2cl4sycl6detail11stream_impl5flushEv _ZN2cl4sycl6detail11stream_implC1EmmRNS0_7handlerE _ZN2cl4sycl6detail11stream_implC2EmmRNS0_7handlerE @@ -4161,6 +4166,3 @@ _ZNK2cl4sycl9exception11has_contextEv _ZNK2cl4sycl9exception4whatEv __sycl_register_lib __sycl_unregister_lib -_ZN2cl4sycl6detail11stream_impl15accessGlobalBufERNS0_7handlerE -_ZN2cl4sycl6detail11stream_impl20accessGlobalFlushBufERNS0_7handlerE -_ZN2cl4sycl6detail11stream_impl18accessGlobalOffsetERNS0_7handlerE From 294622e7dc38d6b33884926121e26a5fda915346 Mon Sep 17 00:00:00 2001 From: Chris Perkins Date: Mon, 14 Sep 2020 19:23:47 -0700 Subject: [PATCH 3/5] had dependencies mis-configured. update to lit-test Signed-off-by: Chris Perkins --- sycl/test/basic_tests/queue/release.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sycl/test/basic_tests/queue/release.cpp b/sycl/test/basic_tests/queue/release.cpp index a42a33963bf3b..42171300741b7 100644 --- a/sycl/test/basic_tests/queue/release.cpp +++ b/sycl/test/basic_tests/queue/release.cpp @@ -2,6 +2,7 @@ // RUN: env SYCL_PI_TRACE=2 %GPU_RUN_PLACEHOLDER %t.out | FileCheck %s // RUN: env SYCL_PI_TRACE=2 %CPU_RUN_PLACEHOLDER %t.out | FileCheck %s + #include int main() { sycl::queue q; @@ -15,7 +16,6 @@ int main() { //CHECK: ---> piEnqueueKernelLaunch( //CHECK: ---> piEventRelease( //CHECK: ---> piQueueRelease( -//CHECK: ---> piProgramRelease( //CHECK: ---> piContextRelease( //CHECK: ---> piKernelRelease( -//CHECK: ---> piProgramRelease( \ No newline at end of file +//CHECK: ---> piProgramRelease( From 06ade1d669c5debe1e9816ba530358765ed61bf8 Mon Sep 17 00:00:00 2001 From: Chris Perkins Date: Mon, 14 Sep 2020 20:12:34 -0700 Subject: [PATCH 4/5] who doesn't love clang-format? Signed-off-by: Chris Perkins --- sycl/test/basic_tests/queue/release.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/sycl/test/basic_tests/queue/release.cpp b/sycl/test/basic_tests/queue/release.cpp index 42171300741b7..5ef745b023ac5 100644 --- a/sycl/test/basic_tests/queue/release.cpp +++ b/sycl/test/basic_tests/queue/release.cpp @@ -2,7 +2,6 @@ // RUN: env SYCL_PI_TRACE=2 %GPU_RUN_PLACEHOLDER %t.out | FileCheck %s // RUN: env SYCL_PI_TRACE=2 %CPU_RUN_PLACEHOLDER %t.out | FileCheck %s - #include int main() { sycl::queue q; From 4d2b60379aacabc0355bd9bea0ca9136c6347c86 Mon Sep 17 00:00:00 2001 From: Chris Perkins Date: Tue, 15 Sep 2020 09:57:54 -0700 Subject: [PATCH 5/5] prep Signed-off-by: Chris Perkins --- sycl/test/basic_tests/queue/release.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/sycl/test/basic_tests/queue/release.cpp b/sycl/test/basic_tests/queue/release.cpp index 5ef745b023ac5..0293d8b580414 100644 --- a/sycl/test/basic_tests/queue/release.cpp +++ b/sycl/test/basic_tests/queue/release.cpp @@ -1,6 +1,5 @@ // RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -o %t.out // RUN: env SYCL_PI_TRACE=2 %GPU_RUN_PLACEHOLDER %t.out | FileCheck %s -// RUN: env SYCL_PI_TRACE=2 %CPU_RUN_PLACEHOLDER %t.out | FileCheck %s #include int main() {