This is an automated email from the ASF dual-hosted git repository. tqchen pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-tvm.git
The following commit(s) were added to refs/heads/master by this push: new bc4d5a3 [RUNTIME][VULKAN] Seg fault in WorkspacePool's destructor (#5632) (#5636) bc4d5a3 is described below commit bc4d5a33812fc11a183c677d14eda4078b48e358 Author: Yi Wang <sam...@yahoo.com> AuthorDate: Thu May 21 12:07:54 2020 -0700 [RUNTIME][VULKAN] Seg fault in WorkspacePool's destructor (#5632) (#5636) * [RUNTIME][VULKAN] Seg fault in WorkspacePool's destructor (#5632) * fixed this issue by changing WorkspacePool's destruction order * make line < 100 charactors long --- src/runtime/vulkan/vulkan.cc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/runtime/vulkan/vulkan.cc b/src/runtime/vulkan/vulkan.cc index 207a86a..ef4b9b0 100644 --- a/src/runtime/vulkan/vulkan.cc +++ b/src/runtime/vulkan/vulkan.cc @@ -56,6 +56,8 @@ class VulkanThreadEntry { // the instance and device get destroyed. // The destruction need to be manually called // to ensure the destruction order. + + pool.reset(); streams_.clear(); for (const auto& kv : staging_buffers_) { if (!kv.second) { @@ -75,7 +77,7 @@ class VulkanThreadEntry { } TVMContext ctx; - WorkspacePool pool; + std::unique_ptr<WorkspacePool> pool; VulkanStream* Stream(size_t device_id); VulkanStagingBuffer* StagingBuffer(int device_id, size_t size); @@ -331,11 +333,11 @@ class VulkanDeviceAPI final : public DeviceAPI { } void* AllocWorkspace(TVMContext ctx, size_t size, DLDataType type_hint) final { - return VulkanThreadEntry::ThreadLocal()->pool.AllocWorkspace(ctx, size); + return VulkanThreadEntry::ThreadLocal()->pool->AllocWorkspace(ctx, size); } void FreeWorkspace(TVMContext ctx, void* data) final { - VulkanThreadEntry::ThreadLocal()->pool.FreeWorkspace(ctx, data); + VulkanThreadEntry::ThreadLocal()->pool->FreeWorkspace(ctx, data); } static const std::shared_ptr<VulkanDeviceAPI>& Global() { @@ -999,7 +1001,8 @@ VulkanStagingBuffer* VulkanThreadEntry::StagingBuffer(int device_id, size_t size } VulkanThreadEntry::VulkanThreadEntry() - : pool(static_cast<DLDeviceType>(kDLVulkan), VulkanDeviceAPI::Global()) { + : pool(std::make_unique<WorkspacePool>(static_cast<DLDeviceType>(kDLVulkan), + VulkanDeviceAPI::Global())) { ctx.device_id = 0; ctx.device_type = static_cast<DLDeviceType>(kDLVulkan); }