From 8eebf5f6c4323c33ee11ea3d2b990f46bf6dbc5e Mon Sep 17 00:00:00 2001
From: Tianqi Chen <tqchen@users.noreply.github.com>
Date: Fri, 13 Apr 2018 14:59:42 -0700
Subject: [PATCH] [RUNTIME] Fault tolerant vulkan init error (#1107)

---
 src/runtime/vulkan/vulkan_device_api.cc | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/runtime/vulkan/vulkan_device_api.cc b/src/runtime/vulkan/vulkan_device_api.cc
index ce2cea65b..aaf658bba 100644
--- a/src/runtime/vulkan/vulkan_device_api.cc
+++ b/src/runtime/vulkan/vulkan_device_api.cc
@@ -661,13 +661,18 @@ void VulkanWorkspace::Init() {
   std::lock_guard<std::mutex> lock(this->mu);
   if (initialized_) return;
   initialized_ = true;
-  instance_ = CreateInstance();
-  context_ = GetContext(instance_);
-  LOG(INFO) << "Initialzie Vulkan with " << context_.size() << " devices..";
-  for (size_t i = 0; i < context_.size(); ++i) {
-    LOG(INFO) << "vulkan(" << i
-              <<  ")=\'" << context_[i].phy_device_prop.deviceName
-              << "\' phy_dev_id=" << context_[i].phy_device;
+  try {
+    instance_ = CreateInstance();
+    context_ = GetContext(instance_);
+    LOG(INFO) << "Initialzie Vulkan with " << context_.size() << " devices..";
+    for (size_t i = 0; i < context_.size(); ++i) {
+      LOG(INFO) << "vulkan(" << i
+                <<  ")=\'" << context_[i].phy_device_prop.deviceName
+                << "\' phy_dev_id=" << context_[i].phy_device;
+    }
+  } catch (const dmlc::Error& err) {
+    LOG(INFO) << "Cannot initialize vulkan: " << err.what() << "\n"
+              << "You can still compile vulkan module but cannot run locally";
   }
 }
 
-- 
GitLab