1From 8bf71f29ba289af74a827b9f5ffbbf42907bace5 Mon Sep 17 00:00:00 2001 2From: Zhu Guodong <zhuguodong0001@163.com> 3Date: Wed, 9 Aug 2023 19:52:04 +0800 4Subject: [PATCH] auto-apply 0039-fix-double-destry-nnrt-mode.patch 5 6--- 7 .../runtime/delegate/nnrt/nnrt_delegate.cc | 31 +++++++++---------- 8 1 file changed, 14 insertions(+), 17 deletions(-) 9 10diff --git a/mindspore/lite/src/runtime/delegate/nnrt/nnrt_delegate.cc b/mindspore/lite/src/runtime/delegate/nnrt/nnrt_delegate.cc 11index 15b117ca..fa7b55ff 100644 12--- a/mindspore/lite/src/runtime/delegate/nnrt/nnrt_delegate.cc 13+++ b/mindspore/lite/src/runtime/delegate/nnrt/nnrt_delegate.cc 14@@ -107,19 +107,18 @@ Status NNRTDelegate::BuildKirinNPUModel(DelegateModel<schema::Primitive> *model) 15 } 16 17 size_t extension_size = nnrt_device_info_.extensions_.size(); 18- OH_NN_Extension *extensions = (OH_NN_Extension *)malloc(sizeof(OH_NN_Extension) * extension_size); 19- if (extensions == nullptr) { 20- MS_LOG(ERROR) << "allocate extensions failed"; 21- return kLiteNullptr; 22- } 23- 24+ std::vector<OH_NN_Extension> extensions; 25 MS_LOG_DEBUG << "set extensions, item number: " << extension_size; 26+ const size_t kExtensionNameMax = 128; // This is a length limitation in NNRT API. 27 for (size_t i = 0; i < extension_size; i++) { 28 auto &src_extension = nnrt_device_info_.extensions_[i]; 29- strcpy(extensions[i].name, src_extension.name.c_str()); 30- extensions[i].value = (char *)((void *)src_extension.value.data()); 31- extensions[i].valueSize = src_extension.value.size(); 32- MS_LOG_DEBUG << "set extension, item name: " << extensions[i].name << ", value size: " << extensions[i].valueSize; 33+ OH_NN_Extension dst_extension; 34+ dst_extension.name[kExtensionNameMax - 1] = '\0'; 35+ strncpy(dst_extension.name, src_extension.name.c_str(), kExtensionNameMax - 1); 36+ dst_extension.value = (char *)((void *)src_extension.value.data()); 37+ dst_extension.valueSize = src_extension.value.size(); 38+ extensions.push_back(dst_extension); 39+ MS_LOG_DEBUG << "set extension, item name: " << dst_extension.name << ", value size: " << dst_extension.valueSize; 40 } 41 42 if (IsCustomModel()) { 43@@ -131,8 +130,7 @@ Status NNRTDelegate::BuildKirinNPUModel(DelegateModel<schema::Primitive> *model) 44 } 45 } else { 46 SetKirinModelInputsAndOutputs(nn_model); 47- 48- auto ret = OH_NNModel_BuildFromMetaGraph(nn_model, meta_graph_, extensions, extension_size); 49+ auto ret = OH_NNModel_BuildFromMetaGraph(nn_model, meta_graph_, extensions.data(), extensions.size()); 50 if (ret != OH_NN_SUCCESS) { 51 MS_LOG(ERROR) << "Build NNModel failed, ret: " << ret; 52 OH_NNModel_Destroy(&nn_model); 53@@ -143,7 +141,7 @@ Status NNRTDelegate::BuildKirinNPUModel(DelegateModel<schema::Primitive> *model) 54 auto ret2 = CreateFullModelKernel(model, nn_model); 55 if (ret2 != kSuccess) { 56 MS_LOG(ERROR) << "Create full model kernel failed, ret: " << ret2; 57- OH_NNModel_Destroy(&nn_model); 58+ return kLiteError; 59 } 60 return kSuccess; 61 } 62@@ -185,13 +183,13 @@ Status NNRTDelegate::CreateFullModelKernel(DelegateModel<schema::Primitive> *mod 63 OH_NNModel_Destroy(&nn_model); 64 return kLiteError; 65 } 66+ OH_NNModel_Destroy(&nn_model); 67 MS_LOG(DEBUG) << "NNRTDelegate creates NNCompilation success."; 68 69 auto ret_code = InitNNCompilation(nn_compilation); 70 if (ret_code != kSuccess) { 71 MS_LOG(ERROR) << "Init NNCompilation failed"; 72 OH_NNCompilation_Destroy(&nn_compilation); 73- OH_NNModel_Destroy(&nn_model); 74 return kLiteError; 75 } 76 77@@ -200,18 +198,17 @@ Status NNRTDelegate::CreateFullModelKernel(DelegateModel<schema::Primitive> *mod 78 if (nn_executor == nullptr) { 79 MS_LOG(ERROR) << "Construct NNExecutor failed, ret: " << ret_code; 80 OH_NNCompilation_Destroy(&nn_compilation); 81- OH_NNModel_Destroy(&nn_model); 82 return kLiteError; 83 } 84+ OH_NNCompilation_Destroy(&nn_compilation); 85 86 auto nnrt_model_kernel = new (std::nothrow)NNRTModelKernel(nn_executor, model->inputs(), model->outputs()); 87 if (nnrt_model_kernel == nullptr) { 88+ OH_NNExecutor_Destroy(&nn_executor); 89 MS_LOG(ERROR) << "new NNRTModelKernel failed"; 90 return kLiteError; 91 } 92 model->Replace(model->BeginKernelIterator(), model->EndKernelIterator(), nnrt_model_kernel); 93- OH_NNCompilation_Destroy(&nn_compilation); 94- OH_NNModel_Destroy(&nn_model); 95 return kSuccess; 96 } 97 #endif 98-- 992.34.1 100 101