From 04378690d8d56dbca7dfda4d187d8ed28abd8b3e Mon Sep 17 00:00:00 2001 From: chenzupeng Date: Mon, 2 Nov 2020 19:52:10 +0800 Subject: [PATCH] fix bug: init opencl failed back to CPU mode --- mindspore/lite/src/lite_session.cc | 1 + .../src/runtime/kernel/opencl/subgraph_opencl_kernel.cc | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/mindspore/lite/src/lite_session.cc b/mindspore/lite/src/lite_session.cc index 82ec0d8147..446e259f23 100644 --- a/mindspore/lite/src/lite_session.cc +++ b/mindspore/lite/src/lite_session.cc @@ -380,6 +380,7 @@ int LiteSession::Init(const Context *context) { auto opencl_runtime = ocl_runtime_wrap_.GetInstance(); opencl_runtime->SetFp16Enable(gpu_device_info.enable_float16_); if (opencl_runtime->Init() != RET_OK) { + this->context_->device_list_ = {{DT_CPU, {gpu_device_info.enable_float16_, MID_CPU}}}; MS_LOG(WARNING) << "Init OpenCL runtime failed, change to CPU mode."; } else { MS_LOG(INFO) << "Init OpenCL runtime success."; diff --git a/mindspore/lite/src/runtime/kernel/opencl/subgraph_opencl_kernel.cc b/mindspore/lite/src/runtime/kernel/opencl/subgraph_opencl_kernel.cc index 0f23b982fa..c77acbc360 100644 --- a/mindspore/lite/src/runtime/kernel/opencl/subgraph_opencl_kernel.cc +++ b/mindspore/lite/src/runtime/kernel/opencl/subgraph_opencl_kernel.cc @@ -101,6 +101,10 @@ int SubGraphOpenCLKernel::GenToFormatOp(const std::vector &in_te out_convert_ops->clear(); MS_ASSERT(in_tensors.size() == to_kernels.size()); MS_ASSERT(in_tensors.size() == from_kernels.size()); + std::vector> loop_kernels; + if (mem_type == OpenCLMemType::BUF) { + GetKernelFromToTensor(in_tensors, nodes_, &loop_kernels, true); + } ReplaceOutTensorAndKernelToNull(in_tensors, in_kernels, mem_type); @@ -163,8 +167,6 @@ int SubGraphOpenCLKernel::GenToFormatOp(const std::vector &in_te // replace in_tensor of inner kernel which use out tensor if (mem_type == OpenCLMemType::BUF) { - std::vector> loop_kernels; - GetKernelFromToTensor(in_tensors, nodes_, &loop_kernels, true); for (auto &iv : loop_kernels[i]) { auto tensors = iv->in_tensors(); auto jv = std::find(tensors.begin(), tensors.end(), in_tensors.at(i));