From a2313625a72c6decfa2484376e7c6581bf66ccb8 Mon Sep 17 00:00:00 2001 From: Dongju Chae Date: Fri, 15 May 2020 18:37:30 +0900 Subject: [PATCH] [Bug/Fix] Fix minor bugs in tizen/arm This patch fixes some minor bugs in tizen/arm. Signed-off-by: Dongju Chae --- src/core/utils/ne-conf.cc | 5 +++-- tests/apptests/example_visa.c | 19 ++----------------- tests/apptests/example_visa_triv2.c | 19 ++----------------- tests/unittests/ne_core_utils_test.cc | 8 ++++---- tests/utils/ne_test_utils.c | 29 +++++++++++++++++++++++++++++ tests/utils/ne_test_utils.h | 7 +++++++ 6 files changed, 47 insertions(+), 40 deletions(-) diff --git a/src/core/utils/ne-conf.cc b/src/core/utils/ne-conf.cc index 0221b77..165709c 100644 --- a/src/core/utils/ne-conf.cc +++ b/src/core/utils/ne-conf.cc @@ -113,7 +113,7 @@ Conf::setResvMemSize (const char *resv_mem_size) { if (resv_mem_size) { unsigned long val; - char *unit = NULL; + char *unit = nullptr; /** the calling program should set errno to 0 before the call */ errno = 0; @@ -162,8 +162,9 @@ Conf::setNumThreads (const char *num_threads) errno = 0; val = strtoul (num_threads, nullptr, 10); - if (errno == 0 && val <= UINT32_MAX) + if (errno == 0 && val <= UINT32_MAX && val > 0) { num_threads_ = static_cast (val); + } } } diff --git a/tests/apptests/example_visa.c b/tests/apptests/example_visa.c index f2fd0c6..8130c2e 100644 --- a/tests/apptests/example_visa.c +++ b/tests/apptests/example_visa.c @@ -126,22 +126,6 @@ compare_output_buffers (const npubin_meta *meta, const char *base_path, return err; } -static void -check_memory_leak (npudev_h dev) -{ - size_t alloc_total = 0; - size_t free_total = 0; - int status; - - status = getNPU_memoryStatus (dev, &alloc_total, &free_total); - if (status != 0) - return; - - if (alloc_total != free_total) - fprintf (stderr, "memory leak check failed (0x%zx != 0x%zx)\n", - free_total, alloc_total); -} - /** @brief run inference for each target visa binary (on sync mode) */ static int run_inference_each (npudev_h dev, const char *base_path, const char *target) @@ -283,7 +267,8 @@ out_free_meta: free (meta); /** ensure that all memory (allocated by libnpuhost APIs) are successfully freed */ - check_memory_leak (dev); + if (err == 0) + err = check_memory_leak (dev); return err; } diff --git a/tests/apptests/example_visa_triv2.c b/tests/apptests/example_visa_triv2.c index 107e0dd..38c635b 100644 --- a/tests/apptests/example_visa_triv2.c +++ b/tests/apptests/example_visa_triv2.c @@ -91,22 +91,6 @@ compare_output_buffers (const npubin_meta *meta, const char *base_path, return err; } -static void -check_memory_leak (npudev_h dev) -{ - size_t alloc_total = 0; - size_t free_total = 0; - int status; - - status = getNPU_memoryStatus (dev, &alloc_total, &free_total); - if (status != 0) - return; - - if (alloc_total != free_total) - fprintf (stderr, "memory leak check failed (0x%zx != 0x%zx)\n", - free_total, alloc_total); -} - /** @brief run inference for each target visa binary (on sync mode) */ static int run_inference_each (npudev_h dev, const char *base_path, const char *target) @@ -224,7 +208,8 @@ out_free_meta: free (meta); /** ensure that all memory (allocated by libnpuhost APIs) are successfully freed */ - check_memory_leak (dev); + if (err == 0) + err = check_memory_leak (dev); return err; } diff --git a/tests/unittests/ne_core_utils_test.cc b/tests/unittests/ne_core_utils_test.cc index a1f6ff2..5992835 100644 --- a/tests/unittests/ne_core_utils_test.cc +++ b/tests/unittests/ne_core_utils_test.cc @@ -140,8 +140,8 @@ TEST (ne_core_utils_test, load_conf_ini_n) ASSERT_EQ (ofs.good(), true); ofs << "[main]\n"; - ofs << "resv_mem_size=asdr\n"; - ofs << "num_threads=-1\n"; + ofs << "resv_mem_size=asdf\n"; + ofs << "num_threads=asdf\n"; ofs.close(); @@ -193,8 +193,8 @@ TEST (ne_core_utils_test, load_conf_env_n) save_and_unset_envvars (envvars); /** from env (wrong values) */ - EXPECT_EQ (setenv("NE_RESV_MEM_SIZE", "ASDF", 1), 0); - EXPECT_EQ (setenv("NE_NUM_THREADS", "-1", 1), 0); + EXPECT_EQ (setenv("NE_RESV_MEM_SIZE", "asdf", 1), 0); + EXPECT_EQ (setenv("NE_NUM_THREADS", "asdf", 1), 0); char long_log_dir_str[MAX_DIR_LEN+1]; for (int i = 0; i < MAX_DIR_LEN; i++) diff --git a/tests/utils/ne_test_utils.c b/tests/utils/ne_test_utils.c index 9d4e6bf..408b340 100644 --- a/tests/utils/ne_test_utils.c +++ b/tests/utils/ne_test_utils.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -205,3 +206,31 @@ off_t get_file_size (const char *file_path) return _stat.st_size; } + +/** @brief check memory leak by calling memory status API */ +int +check_memory_leak (npudev_h dev) +{ + size_t alloc_total = 0; + size_t free_total = 0; + bool rechecked = false; + int status; + +recheck: + status = getNPU_memoryStatus (dev, &alloc_total, &free_total); + if (status != 0) + return status; + + if (alloc_total != free_total) { + if (!rechecked) { + sleep (1); /* there may be a timing issue until all resources are freed */ + goto recheck; + } + + fprintf (stderr, "memory leak check failed (0x%zx != 0x%zx)\n", + free_total, alloc_total); + return -EINVAL; + } + + return 0; +} diff --git a/tests/utils/ne_test_utils.h b/tests/utils/ne_test_utils.h index fe35ce1..f296a01 100644 --- a/tests/utils/ne_test_utils.h +++ b/tests/utils/ne_test_utils.h @@ -73,6 +73,13 @@ int get_model_meta (const char *model_file, npubin_meta *meta); */ off_t get_file_size (const char *file_path); +/** + * @brief check memory leak by calling memory status API + * @param[in] dev npu device handle + * @return 0 if no error, otherwise a negative errno + */ +int check_memory_leak (npudev_h dev); + #if defined(__cplusplus) } #endif -- 2.7.4