From 14440f9ddf625ba0e199609436a89446d1dffdde Mon Sep 17 00:00:00 2001 From: ling Date: Mon, 14 Dec 2020 09:49:12 +0800 Subject: [PATCH] [MSLITE] frame package size --- mindspore/lite/src/kernel_registry.cc | 17 ++++++++++++++++- mindspore/lite/src/kernel_registry.h | 5 ++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/mindspore/lite/src/kernel_registry.cc b/mindspore/lite/src/kernel_registry.cc index 5e536c9b00..3a964e45c4 100644 --- a/mindspore/lite/src/kernel_registry.cc +++ b/mindspore/lite/src/kernel_registry.cc @@ -31,6 +31,14 @@ using mindspore::kernel::KernelKey; namespace mindspore::lite { KernelRegistry *KernelRegistry::GetInstance() { static KernelRegistry instance; + + std::unique_lock malloc_creator_array(instance.lock_); + if (instance.creator_arrays_ == nullptr) { + instance.creator_arrays_ = reinterpret_cast(malloc(array_size_ * sizeof(KernelRegistry))); + if (instance.creator_arrays_ == nullptr) { + return nullptr; + } + } return &instance; } @@ -127,5 +135,12 @@ kernel::LiteKernel *KernelRegistry::GetKernel(const std::vector &in_te return nullptr; } -KernelRegistry::~KernelRegistry() = default; +KernelRegistry::~KernelRegistry() { + KernelRegistry *instance = GetInstance(); + std::unique_lock malloc_creator_array(instance->lock_); + if (instance->creator_arrays_ != nullptr) { + free(instance->creator_arrays_); + instance->creator_arrays_ = nullptr; + } +} } // namespace mindspore::lite diff --git a/mindspore/lite/src/kernel_registry.h b/mindspore/lite/src/kernel_registry.h index 508da3762d..77922c4c35 100644 --- a/mindspore/lite/src/kernel_registry.h +++ b/mindspore/lite/src/kernel_registry.h @@ -50,7 +50,10 @@ class KernelRegistry { static const int data_type_length_{kNumberTypeEnd - kNumberTypeBegin + 1}; static const int op_type_length_{PrimitiveType_MAX - PrimitiveType_MIN + 1}; static const int array_size_{device_type_length_ * data_type_length_ * op_type_length_}; - kernel::KernelCreator creator_arrays_[array_size_] = {nullptr}; + kernel::KernelCreator *creator_arrays_ = nullptr; + + private: + std::mutex lock_; }; class KernelRegistrar {