From 680c1241bfeda5fa102f9fcec8db879b3edfab08 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EC=9D=B4=EC=83=81=EA=B7=9C/On-Device=20Lab=28SR=29/Princip?= =?utf8?q?al=20Engineer/=EC=82=BC=EC=84=B1=EC=A0=84=EC=9E=90?= Date: Fri, 23 Aug 2019 01:35:32 -0400 Subject: [PATCH] [nnpkg_run] verify input and output before prepare and run (#6857) Check input number and input/output types first so that we can do early exit before prepare. Signed-off-by: Sanggyu Lee --- tests/tools/nnpackage_run/src/nnpackage_run.cc | 59 +++++++++++++++++++------- 1 file changed, 43 insertions(+), 16 deletions(-) diff --git a/tests/tools/nnpackage_run/src/nnpackage_run.cc b/tests/tools/nnpackage_run/src/nnpackage_run.cc index 7e0419b..a3ac592 100644 --- a/tests/tools/nnpackage_run/src/nnpackage_run.cc +++ b/tests/tools/nnpackage_run/src/nnpackage_run.cc @@ -78,15 +78,10 @@ int main(const int argc, char **argv) NNPR_ENSURE_STATUS(nnfw_create_session(&session)); NNPR_ENSURE_STATUS(nnfw_load_model_from_file(session, nnpackage_path.c_str())); - uint64_t prepare_ms = NowMicros(); - NNPR_ENSURE_STATUS(nnfw_prepare(session)); - prepare_ms = NowMicros() - prepare_ms; - - // Set input (with random values) uint32_t num_inputs; NNPR_ENSURE_STATUS(nnfw_input_size(session, &num_inputs)); - std::vector> inputs(num_inputs); + // verify input and output if (num_inputs == 0) { @@ -95,17 +90,54 @@ int main(const int argc, char **argv) exit(1); } + auto verifyInputTypes = [session]() { + uint32_t sz; + NNPR_ENSURE_STATUS(nnfw_input_size(session, &sz)); + for (uint32_t i = 0; i < sz; ++i) + { + nnfw_tensorinfo ti; + NNPR_ENSURE_STATUS(nnfw_input_tensorinfo(session, i, &ti)); + if (ti.dtype != NNFW_TYPE_TENSOR_FLOAT32) + { + std::cerr << "Only float 32bit is supported." << std::endl; + exit(-1); + } + } + }; + + auto verifyOutputTypes = [session]() { + uint32_t sz; + NNPR_ENSURE_STATUS(nnfw_output_size(session, &sz)); + + for (uint32_t i = 0; i < sz; ++i) + { + nnfw_tensorinfo ti; + NNPR_ENSURE_STATUS(nnfw_output_tensorinfo(session, i, &ti)); + if (ti.dtype != NNFW_TYPE_TENSOR_FLOAT32) + { + std::cerr << "Only float 32bit is supported." << std::endl; + exit(-1); + } + } + }; + + verifyInputTypes(); + verifyOutputTypes(); + + // prepare execution + + uint64_t prepare_ms = NowMicros(); + NNPR_ENSURE_STATUS(nnfw_prepare(session)); + prepare_ms = NowMicros() - prepare_ms; + + // Set input (with random values) + std::vector> inputs(num_inputs); const int seed = 1; /* TODO Add an option for seed value */ RandomGenerator randgen{seed, 0.0f, 2.0f}; for (uint32_t i = 0; i < num_inputs; ++i) { nnfw_tensorinfo ti; NNPR_ENSURE_STATUS(nnfw_input_tensorinfo(session, i, &ti)); - if (ti.dtype != NNFW_TYPE_TENSOR_FLOAT32) - { - std::cerr << "Only float 32bit is supported." << std::endl; - exit(-1); - } auto input_num_elements = num_elems(&ti); inputs[i] = randomData(randgen, input_num_elements); NNPR_ENSURE_STATUS(nnfw_set_input(session, i, NNFW_TYPE_TENSOR_FLOAT32, inputs[i].data(), @@ -121,11 +153,6 @@ int main(const int argc, char **argv) { nnfw_tensorinfo ti; NNPR_ENSURE_STATUS(nnfw_output_tensorinfo(session, i, &ti)); - if (ti.dtype != NNFW_TYPE_TENSOR_FLOAT32) - { - std::cerr << "Only float 32bit is supported." << std::endl; - exit(-1); - } auto output_num_elements = num_elems(&ti); outputs[i].resize(output_num_elements); NNPR_ENSURE_STATUS(nnfw_set_output(session, i, NNFW_TYPE_TENSOR_FLOAT32, outputs[i].data(), -- 2.7.4