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 <[email protected]>
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);
}