Fix tflite_benchmark_model out-of-memory error (#3706)
author이상규/동작제어Lab(SR)/Principal Engineer/삼성전자 <sg5.lee@samsung.com>
Mon, 26 Nov 2018 11:20:40 +0000 (20:20 +0900)
committer이춘석/동작제어Lab(SR)/Staff Engineer/삼성전자 <chunseok.lee@samsung.com>
Mon, 26 Nov 2018 11:20:40 +0000 (20:20 +0900)
Previously, benchmark_model created nnapi_delegate every run.
Now, nnapi_delegate build graph only once.

Signed-off-by: Sanggyu Lee <sg5.lee@samsung.com>
tools/tflite_benchmark_model/benchmark_tflite_model.cc

index 611bd6a..4d25e77 100644 (file)
@@ -52,6 +52,10 @@ limitations under the License.
 #include "util/profiling/profiling.h"
 #include "support/tflite/nnapi_delegate.h"
 
+namespace {
+  nnfw::NNAPIDelegate nnfw_delegate_;
+}
+
 #ifdef TFLITE_CUSTOM_OPS_HEADER
 void RegisterSelectedOps(::tflite::MutableOpResolver* resolver);
 #endif
@@ -326,6 +330,12 @@ void BenchmarkTfLiteModel::Init() {
 
   interpreter->UseNNAPI(use_nnapi);
 
+  if (use_nnapi) {
+    if (nnfw_delegate_.BuildGraph(interpreter.get()) != kTfLiteOk) {
+      TFLITE_LOG(FATAL) << "Failed to BuildGraph!";
+    }
+  }
+
 #ifdef TFLITE_FLEX
   TFLITE_LOG(INFO) << "Instantiating Flex Delegate";
   delegate_ = FlexDelegate::Create();
@@ -371,7 +381,7 @@ void BenchmarkTfLiteModel::Init() {
 void BenchmarkTfLiteModel::RunImpl() {
   bool use_nnapi = params_.Get<bool>("use_nnapi");
   if (use_nnapi) {
-    if (nnfw::NNAPIDelegate().Invoke(interpreter.get()) != kTfLiteOk) {
+    if (nnfw_delegate_.Invoke(interpreter.get()) != kTfLiteOk) {
       TFLITE_LOG(FATAL) << "Failed to invoke!";
     }
   } else {