*/
#include <ne_test_utils.h>
-
-#define NPU_TIMEOUT_MS 5000
+#include <iomanip>
using namespace std;
+#define NPU_TIMEOUT_MS 5000
+#define PRINT_STATUS_UNIT 100
+#define PRINT_STATUS_ITERS(iter, max) \
+ if (((iter) % PRINT_STATUS_UNIT) == 0) { \
+ cerr << "Iterations: " << setw (8) << (iter) << " / " << (max) << "\n"; \
+ }
+
/** @brief C++ class to describe how to use npu-engine library */
class Tester : public UtilTRIV2 {
public:
return 0;
}
+ void check_memleak () {
+ size_t alloc_total = 0;
+ size_t free_total = 0;
+
+ if (UtilTRIV2::getMemoryStatus (&alloc_total, &free_total) != 0)
+ return;
+
+ if (alloc_total != free_total)
+ cerr << "Possible memory leak..? (" << alloc_total << " vs. "
+ << free_total << ")\n";
+ }
+
/** @brief configure testing mode */
int config (string mode, string num_iter) {
if (mode == "" || num_iter == "")
/** @brief run the inference */
int run () {
uint32_t model_id;
- if (mode_ == 1) {
- int status = UtilTRIV2::loadModel (model_dir_, &model_id,
- NPU_PRIORITY_MID, NPU_TIMEOUT_MS);
+ int req_id, status;
+
+ if (mode_ == 0) {
+ /* repeat model_register/unregister */
+ for (uint32_t i = 0; i < num_iter_; i++) {
+ PRINT_STATUS_ITERS (i, num_iter_);
+
+ status = UtilTRIV2::loadModel (model_dir_, &model_id, NPU_PRIORITY_MID,
+ NPU_TIMEOUT_MS);
+ if (status != 0)
+ return status;
+
+ status = UtilTRIV2::unloadModel (model_id);
+ if (status != 0)
+ return status;
+
+ check_memleak ();
+ }
+ return test_ret_success;
+ } else if (mode_ == 1) {
+ /* repeat model_inference only */
+ status = UtilTRIV2::loadModel (model_dir_, &model_id, NPU_PRIORITY_MID,
+ NPU_TIMEOUT_MS);
if (status != 0)
return status;
- int req_id = UtilTRIV2::createRequest (model_id);
+ req_id = UtilTRIV2::createRequest (model_id);
if (req_id < 0)
return req_id;
- for (uint32_t i = 0; i < num_iter_; i++)
- UtilTRIV2::submitRequest (model_id);
+ for (uint32_t i = 0; i < num_iter_; i++) {
+ PRINT_STATUS_ITERS (i, num_iter_);
+
+ status = UtilTRIV2::submitRequest (req_id);
+ if (status != 0)
+ break;
+ }
+ status = UtilTRIV2::removeRequest (req_id);
+ if (status != 0)
+ return status;
- UtilTRIV2::removeRequest (req_id);
+ status = UtilTRIV2::unloadModel (model_id);
+ if (status != 0)
+ return status;
+
+ check_memleak ();
return wait () == num_iter_ ? test_ret_success : test_ret_failure;
} else if (mode_ == 2) {
+ /* repeat model_register/inference/unregister */
for (uint32_t i = 0; i < num_iter_; i++) {
- int status = UtilTRIV2::loadModel (model_dir_, &model_id,
- NPU_PRIORITY_MID, NPU_TIMEOUT_MS);
+ PRINT_STATUS_ITERS (i, num_iter_);
+
+ status = UtilTRIV2::loadModel (model_dir_, &model_id, NPU_PRIORITY_MID,
+ NPU_TIMEOUT_MS);
if (status != 0)
return status;
- int req_id = UtilTRIV2::createRequest (model_id);
+ req_id = UtilTRIV2::createRequest (model_id);
if (req_id < 0)
return req_id;
if (status != 0)
return status;
- size_t alloc_total = 0;
- size_t free_total = 0;
-
- status = UtilTRIV2::getMemoryStatus (&alloc_total, &free_total);
- if (status != 0)
- return status;
-
- if (alloc_total != free_total)
- cerr << "Possible memory leak..? (" << alloc_total << " vs. "
- << free_total << ")\n";
+ check_memleak ();
}
return wait () == num_iter_ ? test_ret_success : test_ret_failure;
} else {
- cerr << "Unsupported mode... use 1 (fast) or 2 (slow)\n";
+ cerr << "Unsupported mode... use 0 (model-only), 1 (fast), or 2 (slow)\n";
return test_ret_failure;
}
}