[FIX/DSPM] Use envionment variable to check dspm size
authorDongju Chae <dongju.chae@samsung.com>
Tue, 12 Oct 2021 06:50:12 +0000 (15:50 +0900)
committer채동주/On-Device Lab(SR)/Staff Engineer/삼성전자 <dongju.chae@samsung.com>
Thu, 14 Oct 2021 07:23:33 +0000 (16:23 +0900)
This patch uses envionment variable of libmrpsim to check
the dspm size.

Signed-off-by: Dongju Chae <dongju.chae@samsung.com>
src/core/ne-handler.cc
src/core/npu/NPUdrvAPI_emul.cc

index 71bd999ac46b9da84aaf01fbaab2e4dfeff6b851..aa1f7ba0fed5bb90c617e070271506e63f400436 100644 (file)
@@ -894,8 +894,8 @@ TrinityVision2::checkDspmSize (const Model *model) {
   }
 
   if (npu_dspm_size < model_dspm_size) {
-    logerr (TAG, "The minimum DSPM size of model is %u KiB (NPU: %u KiB)\n", model_dspm_size / 1024,
-            npu_dspm_size / 1024);
+    logerr (TAG, "The minimum DSPM size is %u KiB (vs. DSPM size for vISA: %u KiB)\n",
+            model_dspm_size / 1024, npu_dspm_size / 1024);
     return -ENOMEM;
   }
 
index 5681bb7b2587389916a68ff2e8faebbeb8375855..95c35deb4ca9d990e6c3e776f48c3812f23a074a 100644 (file)
@@ -26,6 +26,8 @@
 
 #define TAG _N94
 #define MAX_EMUL_DEVICES (3)
+#define DEFAULT_DSPM_SIZE (128 * 1024) /* 128 KiB */
+#define RESERVED_DSPM_SIZE (64 * 1024) /* 64 KiB */
 
 static uint64_t global_exec_seq = 0;
 
@@ -229,8 +231,38 @@ TrinityEmulAPI::getDspmSize (uint32_t *dspm) const {
     return -EINVAL;
   }
 
-  /* unlimited size */
-  *dspm = UINT32_MAX;
+  *dspm = DEFAULT_DSPM_SIZE;
+
+  char *dspm_str = getenv ("MRPSIM_SPM_SIZE");
+  if (dspm_str != NULL) {
+    unsigned long val;
+    char *unit = nullptr;
+
+    errno = 0;
+    val = strtoul (dspm_str, &unit, 10);
+    if (errno == 0) {
+      if (unit) {
+        if (*unit == 'K' || *unit == 'k') {
+          val *= 1024;
+        } else if (*unit == 'M' || *unit == 'm') {
+          val *= 1024 * 1024;
+        } else if (*unit == 'G' || *unit == 'g') {
+          val *= 1024 * 1024 * 1024;
+        }
+      }
+
+      /* unlimited size */
+      if (val > UINT32_MAX)
+        val = UINT32_MAX;
+
+      *dspm = static_cast<uint32_t> (val);
+    }
+  }
+
+  if (*dspm > RESERVED_DSPM_SIZE)
+    *dspm -= RESERVED_DSPM_SIZE;
+  else
+    *dspm = 0;
 
   return 0;
 }