diff --git a/projects/clr/hipamd/src/hip_graph_internal.hpp b/projects/clr/hipamd/src/hip_graph_internal.hpp index 2f1c3e8487..d088cf3f5f 100644 --- a/projects/clr/hipamd/src/hip_graph_internal.hpp +++ b/projects/clr/hipamd/src/hip_graph_internal.hpp @@ -825,7 +825,6 @@ class GraphExec : public amd::ReferenceCountedObject, public Graph { for (auto streams : parallel_streams_) { for (auto stream : streams.second) { if (stream != nullptr) { - stream->finish(); constexpr bool kForceDestroy = true; hip::Stream::Destroy(stream, kForceDestroy); } diff --git a/projects/clr/rocclr/device/device.hpp b/projects/clr/rocclr/device/device.hpp index c569c497ec..a367df0e7b 100644 --- a/projects/clr/rocclr/device/device.hpp +++ b/projects/clr/rocclr/device/device.hpp @@ -1253,7 +1253,7 @@ class ThreadTrace : public amd::HeapObject { }; //! A device execution environment. -class VirtualDevice : public amd::HeapObject { +class VirtualDevice : public amd::ReferenceCountedObject { public: //! Construct a new virtual device for the given physical device. VirtualDevice(amd::Device& device) diff --git a/projects/clr/rocclr/device/rocm/rocvirtual.cpp b/projects/clr/rocclr/device/rocm/rocvirtual.cpp index fb73e9b97b..f3e577ab28 100644 --- a/projects/clr/rocclr/device/rocm/rocvirtual.cpp +++ b/projects/clr/rocclr/device/rocm/rocvirtual.cpp @@ -247,6 +247,7 @@ bool HsaAmdSignalHandler(hsa_signal_value_t value, void* arg) { } // Return false, so the callback will not be called again for this signal + gpu->release(); return false; } @@ -552,6 +553,7 @@ hsa_signal_t VirtualGPU::HwQueueTracker::ActiveSignal(hsa_signal_value_t init_va } } gpu_.QueuedAsyncHandlers()++; + ts->gpu()->retain(); hsa_status_t result = Hsa::signal_async_handler( prof_signal->signal_, HSA_SIGNAL_CONDITION_LT, init_value, &HsaAmdSignalHandler, ts); if (HSA_STATUS_SUCCESS != result) { diff --git a/projects/clr/rocclr/platform/commandqueue.hpp b/projects/clr/rocclr/platform/commandqueue.hpp index 213bb6ef8c..ded6c5693b 100644 --- a/projects/clr/rocclr/platform/commandqueue.hpp +++ b/projects/clr/rocclr/platform/commandqueue.hpp @@ -184,7 +184,7 @@ class HostQueue : public CommandQueue { } } - void Release() const { delete virtualDevice_; } + void Release() const { virtualDevice_->release(); } //! Get virtual device for the current thread device::VirtualDevice* vdev() const { return virtualDevice_; }