[test] test both TRIV 2.3 and 2.4
authorYelin Jeong <yelini.jeong@samsung.com>
Fri, 17 Mar 2023 03:03:47 +0000 (12:03 +0900)
committer추지호/SoC Architecture팀(SR)/삼성전자 <jiho.chu@samsung.com>
Tue, 28 Mar 2023 00:54:44 +0000 (09:54 +0900)
This patch fixes meson file and adds unittest to test both TRIV 2.3 and 2.4.

Signed-off-by: Yelin Jeong <yelini.jeong@samsung.com>
18 files changed:
tests/apptests/meson.build
tests/apptests/tvn_triv2_interleave.cc
tests/unittests/meson.build
tests/unittests/ne_core_buffer_test.cc
tests/unittests/ne_core_handler_test.cc
tests/unittests/ne_core_hwmem_test.cc
tests/unittests/ne_core_inputservice_test.cc
tests/unittests/ne_core_mem_test.cc
tests/unittests/ne_core_npu_emul_test.cc [new file with mode: 0644]
tests/unittests/ne_core_npu_test.cc
tests/unittests/ne_core_profiler_emul_test.cc
tests/unittests/ne_core_sched_test.cc
tests/unittests/ne_core_segment_table_test.cc
tests/unittests/ne_libnpuhost_test.cc
tests/utils/ne_test_utils.cc
tests/utils/ne_test_utils.h
utils/resource/model_23.xml [new file with mode: 0644]
utils/resource/model_24.xml [new file with mode: 0644]

index 0c4801f47d821b2d762c146c5ad3bafecf572860..b9c4b8dd05fe354fdf44276a13ece70ddff948d9 100644 (file)
@@ -58,7 +58,6 @@ apptest_tvn_triv2_bulk = executable ('apptest_tvn_triv2_bulk',
   install_rpath : ne_libdir,
   install_dir : join_paths(ne_bindir, 'apptests')
 )
-test('apptest_tvn_triv2_bulk', apptest_tvn_triv2_bulk, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV240') ], timeout: 2000)
 
 apptest_tvn_triv2 = executable ('apptest_tvn_triv2',
   'tvn_triv2.cc',
@@ -69,7 +68,6 @@ apptest_tvn_triv2 = executable ('apptest_tvn_triv2',
   install_rpath : ne_libdir,
   install_dir : join_paths(ne_bindir, 'apptests')
 )
-test('apptest_tvn_triv2', apptest_tvn_triv2, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV240/MOBILENET_V1') ], timeout: 100, suite: ['fast-test'])
 
 apptest_tvn_triv2_dmabuf = executable ('apptest_tvn_triv2_dmabuf',
   'tvn_triv2_dmabuf.cc',
@@ -80,11 +78,6 @@ apptest_tvn_triv2_dmabuf = executable ('apptest_tvn_triv2_dmabuf',
   install_rpath : ne_libdir,
   install_dir : join_paths(ne_bindir, 'apptests')
 )
-test('apptest_tvn_triv2_dmabuf', apptest_tvn_triv2_dmabuf, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV240/MOBILENET_V1') ], timeout : 100, suite: ['fast-test'])
-
-foreach model : models
-  test('apptest_tvn_triv2_dmabuf_all', apptest_tvn_triv2_dmabuf, env: testenv, args: [ model ], timeout : 6000)
-endforeach
 
 ####
 # TODO Disable this test until VD I/F sync. is done
@@ -109,7 +102,6 @@ apptest_tvn_triv2_xml = executable ('apptest_tvn_triv2_xml',
   install_rpath : ne_libdir,
   install_dir : join_paths(ne_bindir, 'apptests')
 )
-test('apptest_tvn_triv2_xml', apptest_tvn_triv2_xml, env: testenv, args: [join_paths(meson.source_root(), 'utils/resource/model.xml')], timeout: 100, suite: ['fast-test'])
 
 apptest_tvn_triv2_profile = executable ('apptest_tvn_triv2_profile',
   'tvn_triv2_profile.cc',
@@ -120,7 +112,6 @@ apptest_tvn_triv2_profile = executable ('apptest_tvn_triv2_profile',
   install_rpath : ne_libdir,
   install_dir : join_paths(ne_bindir, 'apptests')
 )
-test('apptest_tvn_triv2_profile', apptest_tvn_triv2_profile, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV240/MOBILENET_V1'), '-p', 'visa'], timeout: 100, suite: ['fast-test'])
 
 executable ('apptest_tvn_triv2_profile_example',
   'tvn_triv2_profile_example.cc',
@@ -151,14 +142,6 @@ apptest_tvn_triv2_aging = executable ('apptest_tvn_triv2_aging',
   install_rpath : ne_libdir,
   install_dir : join_paths(ne_bindir, 'apptests')
 )
-test('apptest_tvn_triv2_aging_0', apptest_tvn_triv2_aging, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV240/CONV_2D_300'), '1', '10'], suite: ['fast-test'])
-test('apptest_tvn_triv2_aging_1', apptest_tvn_triv2_aging, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV240/CONV_2D_300'), '2', '10'], suite: ['fast-test'])
-test('apptest_tvn_triv2_aging_2', apptest_tvn_triv2_aging, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV240/CONV_2D_300'), '3', '10'], suite: ['fast-test'])
-test('apptest_tvn_triv2_aging_3', apptest_tvn_triv2_aging, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV240/CONV_2D_300'), '4', '10'], suite: ['fast-test'])
-
-foreach model : models
-  test('apptest_tvn_triv2_aging_all', apptest_tvn_triv2_aging, env: testenv, args: [ model, '4', '10' ], timeout : 6000)
-endforeach
 
 apptest_tvn_triv2_interleave = executable ('apptest_tvn_triv2_interleave',
   'tvn_triv2_interleave.cc',
@@ -169,7 +152,6 @@ apptest_tvn_triv2_interleave = executable ('apptest_tvn_triv2_interleave',
   install_rpath : ne_libdir,
   install_dir : join_paths(ne_bindir, 'apptests')
 )
-test('apptest_tvn_triv2_interleave', apptest_tvn_triv2_interleave, env: testenv, args: [ '10', join_paths(ne_datadir, 'testdata/TRIV240/MAX_POOL_2D_000'), join_paths(ne_datadir, 'testdata/TRIV238_2TOPS/CONV_2D_300') ], suite: ['fast-test'])
 
 apptest_tvn_triv2_sigkill = executable ('apptest_tvn_triv2_sigkill',
   'tvn_triv2_sigkill.cc',
@@ -180,8 +162,32 @@ apptest_tvn_triv2_sigkill = executable ('apptest_tvn_triv2_sigkill',
   install_rpath : ne_libdir,
   install_dir : join_paths(ne_bindir, 'apptests')
 )
-test('apptest_tvn_triv2_sigkill', apptest_tvn_triv2_sigkill, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV240/MOBILENET_V1') ], timeout : 200, suite: ['fast-test'])
-
-foreach model : models
-  test('apptest_tvn_triv2_sigkill_all', apptest_tvn_triv2_sigkill, env: testenv, args: [ model ], timeout : 6000)
-endforeach
+# Test TRIV 2.3
+
+test('apptest_tvn_triv23', apptest_tvn_triv2, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV238_2TOPS/CONV_2D_300'), '-v', '2.3' ], timeout: 100, suite: ['fast-test'])
+test('apptest_tvn_triv23_interleave', apptest_tvn_triv2_interleave, env: testenv, args: [ '10', join_paths(ne_datadir, 'testdata/TRIV238_2TOPS/MAX_POOL_2D_000')+','+join_paths(ne_datadir, 'testdata/TRIV238_2TOPS/CONV_2D_300'), '2.3' ], suite: ['fast-test'])
+test('apptest_tvn_triv23_sigkill', apptest_tvn_triv2_sigkill, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV238_2TOPS/MOBILENET_V1'), '-v', '2.3' ], timeout : 200, suite: ['fast-test'])
+test('apptest_tvn_triv23_aging_0', apptest_tvn_triv2_aging, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV238_2TOPS/CONV_2D_300'), '1', '10', '-v', '2.3'], suite: ['fast-test'])
+test('apptest_tvn_triv23_aging_1', apptest_tvn_triv2_aging, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV238_2TOPS/CONV_2D_300'), '2', '10', '-v', '2.3'], suite: ['fast-test'])
+test('apptest_tvn_triv23_aging_2', apptest_tvn_triv2_aging, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV238_2TOPS/CONV_2D_300'), '3', '10', '-v', '2.3'], suite: ['fast-test'])
+test('apptest_tvn_triv23_aging_3', apptest_tvn_triv2_aging, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV238_2TOPS/CONV_2D_300'), '4', '10', '-v', '2.3'], suite: ['fast-test'])
+test('apptest_tvn_triv23_profile', apptest_tvn_triv2_profile, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV238_2TOPS/MOBILENET_V1'), '-p', 'visa', '-v', '2.3'], timeout: 100, suite: ['fast-test'])
+test('apptest_tvn_triv23_dmabuf', apptest_tvn_triv2_dmabuf, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV238_2TOPS/CONV_2D_300') , '-v', '2.3'], timeout : 100, suite: ['fast-test'])
+test('apptest_tvn_triv23_xml', apptest_tvn_triv2_xml, env: testenv, args: [join_paths(meson.source_root(), 'utils/resource/model_23.xml'), '-v', '2.3'], timeout: 100, suite: ['fast-test'])
+
+test('apptest_tvn_triv23_bulk', apptest_tvn_triv2_bulk, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV238_2TOPS'), '-v', '2.3' ], timeout: 2000)
+
+# Test TRIV 2.4
+
+test('apptest_tvn_triv24', apptest_tvn_triv2, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV242/CONV_2D_300'), '-v', '2.4' ], timeout: 100, suite: ['fast-test'])
+test('apptest_tvn_triv24_interleave', apptest_tvn_triv2_interleave, env: testenv, args: [ '10', join_paths(ne_datadir, 'testdata/TRIV242/MAX_POOL_2D_000')+','+join_paths(ne_datadir, 'testdata/TRIV242/CONV_2D_300'), '2.4' ], suite: ['fast-test'])
+test('apptest_tvn_triv24_sigkill', apptest_tvn_triv2_sigkill, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV242/MOBILENET_V1'), '-v', '2.4' ], timeout : 200, suite: ['fast-test'])
+test('apptest_tvn_triv24_aging_0', apptest_tvn_triv2_aging, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV242/CONV_2D_300'), '1', '10', '-v', '2.4'], suite: ['fast-test'])
+test('apptest_tvn_triv24_aging_1', apptest_tvn_triv2_aging, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV242/CONV_2D_300'), '2', '10', '-v', '2.4'], suite: ['fast-test'])
+test('apptest_tvn_triv24_aging_2', apptest_tvn_triv2_aging, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV242/CONV_2D_300'), '3', '10', '-v', '2.4'], suite: ['fast-test'])
+test('apptest_tvn_triv24_aging_3', apptest_tvn_triv2_aging, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV242/CONV_2D_300'), '4', '10', '-v', '2.4'], suite: ['fast-test'])
+test('apptest_tvn_triv24_profile', apptest_tvn_triv2_profile, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV242/MOBILENET_V1'), '-p', 'visa', '-v', '2.4'], timeout: 100, suite: ['fast-test'])
+test('apptest_tvn_triv24_dmabuf', apptest_tvn_triv2_dmabuf, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV242/CONV_2D_300'), '-v', '2.4'], timeout : 100, suite: ['fast-test'])
+test('apptest_tvn_triv24_xml', apptest_tvn_triv2_xml, env: testenv, args: [join_paths(meson.source_root(), 'utils/resource/model_24.xml'), '-v', '2.4'], timeout: 100, suite: ['fast-test'])
+
+test('apptest_tvn_triv24_bulk', apptest_tvn_triv2_bulk, env: testenv, args: [ join_paths(ne_datadir, 'testdata/TRIV242'), '-v', '2.4'], timeout: 2000)
index cd8532f2f0ba4b538c97036488761e95b64dad38..037496d841f132dbabb43ab43be711bcf019911a 100644 (file)
@@ -26,7 +26,7 @@ extern char *__progname;
 static void
 print_help (void) {
   cerr << "Usage: " << __progname;
-  cerr << " [# iters] [comma-seperated modelpath]\n";
+  cerr << " [# iters] [comma-seperated modelpath] [TRIV version]\n";
 }
 
 /** @brief apptest main  */
@@ -37,7 +37,7 @@ main (int argc, char **argv) {
   unique_ptr<int[]> req_ids;
   uint32_t num_models, num_iters;
 
-  if (argc < 3) {
+  if (argc < 4) {
     print_help ();
     cerr << "[APPTEST] " << argv[0] << ": SKIPPED\n";
     return 0;
@@ -79,6 +79,7 @@ main (int argc, char **argv) {
   /* perform interleaving for libnpuhost API calls */
   for (int i = 0; i < num_iters; i++) {
     for (int j = 0; j < num_models; j++) {
+      testers[j].setDeviceType (argv[3]);
       status = testers[j].init (tops);
       if (status != 0) {
         cerr << "Unable to initialize\n";
index eab4b4dd2a6440bdd8582f335b672eade7c4aeac..2e02d16a991030700344603ded3bc0897ada5f31 100644 (file)
@@ -143,5 +143,15 @@ if ne_test_utils_gtest_dep.found()
       install_dir : join_paths(ne_bindir, 'unittests')
     )
     test('unittest_ne_core_profiler', unittest_ne_core_profiler, env: testenv, suite: ['fast-test'])
+
+    unittest_ne_core_npu_emul= executable('unittest_ne_core_npu_emul',
+      ['ne_core_npu_emul_test.cc'],
+      include_directories: [ne_host_inc, ne_common_inc],
+      dependencies: [ne_test_utils_gtest_dep, ne_host_dep, ne_core_dep],
+      install : true,
+      install_rpath : ne_libdir,
+      install_dir : join_paths(ne_bindir, 'unittests')
+    )
+    test('unittest_ne_core_npu_emul', unittest_ne_core_npu_emul, env: testenv, suite: ['fast-test'])
   endif
 endif
index 1da3de955e9954b0541eac3abce7172f3b59bfa1..a8ca7f4fc8147a3fa9f3317435903f62ced2c5d5 100644 (file)
@@ -72,7 +72,7 @@ TEST (ne_core_buffer_test, buffer_primitives) {
   const uint32_t exp_output_num_v1 = 1;
   std::unique_ptr<DriverAPI> api;
 
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   std::unique_ptr<Buffer> buffer (new Buffer (new HWmemDevice));
@@ -145,7 +145,7 @@ TEST (ne_core_buffer_test, buffer_alloc_no_drv_api_n) {
  */
 TEST (ne_core_buffer_test, buffer_create_tensors_n) {
   std::unique_ptr<DriverAPI> api;
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   uint32_t size = 4096;
@@ -163,7 +163,7 @@ TEST (ne_core_buffer_test, buffer_create_tensors_n) {
  */
 TEST (ne_core_buffer_test, buffer_get_tensor_n) {
   std::unique_ptr<DriverAPI> api;
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   std::unique_ptr<Buffer> buffer (new Buffer (new HWmemDevice));
index fd232263209672862cf5798cd1ea001328fa9f40..20b21a624f8cc7b4151015cc1c834b9807dc8512 100644 (file)
@@ -22,7 +22,7 @@
  * @brief test Device's createInstance()
  */
 TEST (ne_core_handler_test, device_create_instance) {
-  dev_type type = NPUCOND_TRIV2_CONN_SOCIP;
+  dev_type type = NPUCOND_TRIV24_CONN_SOCIP;
   int num_devices = HostHandler::getNumDevices (type);
   EXPECT_GT (num_devices, 0);
 
@@ -45,7 +45,7 @@ TEST (ne_core_handler_test, device_create_instance) {
  * @brief test Device's createInstance() with out-of-range id
  */
 TEST (ne_core_handler_test, device_create_instance_out_of_range_n) {
-  dev_type type = NPUCOND_TRIV2_CONN_SOCIP;
+  dev_type type = NPUCOND_TRIV24_CONN_SOCIP;
   int num_devices = HostHandler::getNumDevices (type);
   EXPECT_GT (num_devices, 0);
 
@@ -76,7 +76,7 @@ TEST (ne_core_handler_test, device_create_instance_deprecated_n) {
  * @note Only createInstance() calls init().
  */
 TEST (ne_core_handler_test, device_instance_uninitilized_n) {
-  dev_type type = NPUCOND_TRIV2_CONN_SOCIP;
+  dev_type type = NPUCOND_TRIV24_CONN_SOCIP;
   int num_devices = HostHandler::getNumDevices (type);
   EXPECT_GT (num_devices, 0);
 
@@ -101,7 +101,7 @@ TEST (ne_core_handler_test, device_instance_uninitilized_n) {
  * @brief test Device's alloc/deallocMemory ()
  */
 TEST (ne_core_handler_test, device_memory) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   void *addr;
@@ -115,7 +115,7 @@ TEST (ne_core_handler_test, device_memory) {
  * @brief test Device's allocMemory () with error handling
  */
 TEST (ne_core_handler_test, device_memory_args_n) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   void *addr;
@@ -181,7 +181,7 @@ destroy_model_buffer (generic_buffer &model_buf) {
  * @brief test TRIV2's setModel ()
  */
 TEST (ne_core_handler_test, triv2_set_model) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   generic_buffer model_buf = {};
@@ -199,7 +199,7 @@ TEST (ne_core_handler_test, triv2_set_model) {
  * @brief test TRIV2's setModel () with error handling
  */
 TEST (ne_core_handler_test, triv2_set_model_invalid_args_n) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   generic_buffer model_buf = {};
@@ -217,7 +217,7 @@ TEST (ne_core_handler_test, triv2_set_model_invalid_args_n) {
  * @brief test TRIV2's setModel () with error handling
  */
 TEST (ne_core_handler_test, triv2_set_model_invalid_data_n) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   generic_buffer model_buf = {};
@@ -268,7 +268,7 @@ TEST (ne_core_handler_test, triv2_set_model_invalid_data_n) {
  * @brief test TRIV2's unsetModel () with error handling
  */
 TEST (ne_core_handler_test, triv2_unset_model_n) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
   EXPECT_NE (device->unsetModel (nullptr), 0);
 }
@@ -306,7 +306,7 @@ user_cb (output_buffers *output, int req_id, void *data) {
  * @brief test Device's run ()
  */
 TEST (ne_core_handler_test, triv2_run) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   /** prepare model */
@@ -348,7 +348,7 @@ TEST (ne_core_handler_test, triv2_run) {
  * @brief test TRIV2's run () with error handling
  */
 TEST (ne_core_handler_test, triv2_run_invalid_args_n) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   /** TRIV2 requires valid model and buffer arguments */
@@ -379,7 +379,7 @@ TEST (ne_core_handler_test, triv2_run_invalid_args_n) {
  * @brief test TRIV2's run () with error handling
  */
 TEST (ne_core_handler_test, triv2_run_invalid_opmode_n) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   /** prepare model */
@@ -408,7 +408,7 @@ TEST (ne_core_handler_test, triv2_run_invalid_opmode_n) {
  * @brief test Device's stop ()
  */
 TEST (ne_core_handler_test, triv2_stop) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   /** prepare model */
@@ -451,7 +451,7 @@ TEST (ne_core_handler_test, triv2_stop) {
  * @brief test HostHandler's registerModel ()
  */
 TEST (ne_core_handler_test, handler_register_model) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   HostHandler *handler = device->getHostHandler ();
@@ -494,7 +494,7 @@ TEST (ne_core_handler_test, handler_register_model) {
  * @brief test HostHandler's registerModel () with error handling
  */
 TEST (ne_core_handler_test, handler_register_model_invalid_args_01_n) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   HostHandler *handler = device->getHostHandler ();
@@ -515,7 +515,7 @@ TEST (ne_core_handler_test, handler_register_model_invalid_args_01_n) {
  * @brief test HostHandler's registerModel () with error handling
  */
 TEST (ne_core_handler_test, handler_register_model_invalid_args_02_n) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   HostHandler *handler = device->getHostHandler ();
@@ -536,7 +536,7 @@ TEST (ne_core_handler_test, handler_register_model_invalid_args_02_n) {
  * @brief test HostHandler's unregisterModel () with error handling
  */
 TEST (ne_core_handler_test, handler_unregister_model_invalid_id_n) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   HostHandler *handler = device->getHostHandler ();
@@ -564,7 +564,7 @@ TEST (ne_core_handler_test, handler_unregister_model_invalid_id_n) {
  * @brief test HostHandler's getModel () with error handling
  */
 TEST (ne_core_handler_test, handler_get_model_invalid_id_n) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   HostHandler *handler = device->getHostHandler ();
@@ -589,7 +589,7 @@ TEST (ne_core_handler_test, handler_get_model_invalid_id_n) {
  * @brief test HostHandler's setDataInfo ()
  */
 TEST (ne_core_handler_test, handler_set_data_info) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   HostHandler *handler = device->getHostHandler ();
@@ -617,7 +617,7 @@ TEST (ne_core_handler_test, handler_set_data_info) {
  * @brief test HostHandler's setDataInfo () with error handling
  */
 TEST (ne_core_handler_test, handler_set_data_info_invalid_args_n) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   HostHandler *handler = device->getHostHandler ();
@@ -650,7 +650,7 @@ TEST (ne_core_handler_test, handler_set_data_info_invalid_args_n) {
  * @brief test HostHandler's setConstraint ()
  */
 TEST (ne_core_handler_test, handler_set_constraint) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   HostHandler *handler = device->getHostHandler ();
@@ -682,7 +682,7 @@ TEST (ne_core_handler_test, handler_set_constraint) {
  * @brief test HostHandler's setConstraint () with error handling
  */
 TEST (ne_core_handler_test, handler_set_constraint_invalid_args_n) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   HostHandler *handler = device->getHostHandler ();
@@ -708,7 +708,7 @@ TEST (ne_core_handler_test, handler_set_constraint_invalid_args_n) {
  * @brief test HostHandler's allocGenericBuffer ()
  */
 TEST (ne_core_handler_test, handler_generic_buffer) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   HostHandler *handler = device->getHostHandler ();
@@ -742,7 +742,7 @@ TEST (ne_core_handler_test, handler_generic_buffer) {
  * @brief test HostHandler's allocGenericBuffer () with error handling
  */
 TEST (ne_core_handler_test, handler_generic_buffer_n) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   HostHandler *handler = device->getHostHandler ();
@@ -791,7 +791,7 @@ TEST (ne_core_handler_test, handler_generic_buffer_n) {
  * @brief test HostHandler's allocGenericBuffer () with error handling
  */
 TEST (ne_core_handler_test, handler_generic_buffers_n) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   HostHandler *handler = device->getHostHandler ();
@@ -816,7 +816,7 @@ TEST (ne_core_handler_test, handler_generic_buffers_n) {
  * @brief test HostHandler's runModel (sync)
  */
 TEST (ne_core_handler_test, handler_triv2_run_sync) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   HostHandler *handler = device->getHostHandler ();
@@ -852,7 +852,7 @@ TEST (ne_core_handler_test, handler_triv2_run_sync) {
  * @brief test HostHandler's runModel (sync) with error handling
  */
 TEST (ne_core_handler_test, handler_triv2_run_model_n) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   HostHandler *handler = device->getHostHandler ();
@@ -889,7 +889,7 @@ TEST (ne_core_handler_test, handler_triv2_run_model_n) {
  * @brief test HostHandler's runModel (async)
  */
 TEST (ne_core_handler_test, handler_triv2_run_async) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   HostHandler *handler = device->getHostHandler ();
@@ -926,7 +926,7 @@ TEST (ne_core_handler_test, handler_triv2_run_async) {
  * @brief test HostHandler's runModel (async) with error handling
  */
 TEST (ne_core_handler_test, handler_triv2_run_async_n) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   HostHandler *handler = device->getHostHandler ();
@@ -962,7 +962,7 @@ TEST (ne_core_handler_test, handler_triv2_run_async_n) {
 TEST (ne_core_handler_test, handler_triv2_get_memory_status) {
   // disabled until this feature is implemented
 #if defined(ENABLE_EMUL)
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   HostHandler *handler = device->getHostHandler ();
@@ -1017,7 +1017,7 @@ TEST (ne_core_handler_test, handler_triv2_get_memory_status) {
  * @brief test HostHandler's getMemoryStatus () with error handling
  */
 TEST (ne_core_handler_test, handler_triv2_get_memory_status_n) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   HostHandler *handler = device->getHostHandler ();
@@ -1035,7 +1035,7 @@ TEST (ne_core_handler_test, handler_triv2_get_memory_status_n) {
  * @brief test HostHandler's setProfileModel () with error handling
  */
 TEST (ne_core_handler_test, handler_set_profile_model_n) {
-  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV2_CONN_SOCIP, 0));
+  std::unique_ptr<Device> device (Device::createInstance (NPUCOND_TRIV24_CONN_SOCIP, 0));
   ASSERT_NE (device.get (), nullptr);
 
   HostHandler *handler = device->getHostHandler ();
index 73694b6946c08dc293a6e2ebd12d6d713a175f8d..ffed7ee48ad679b4c398a38cd8343e220c2e89cf 100644 (file)
@@ -24,10 +24,10 @@ constexpr bool is_enabled_emulation = false;
 #endif /* defined (ENABLE_EMUL) */
 
 /** use TRIV driver api for this test */
-#define INIT_TEST_DRIVER_API()                                        \
-  ASSERT_GT (DriverAPI::getNumDevices (NPUCOND_TRIV2_CONN_SOCIP), 0); \
-  std::unique_ptr<DriverAPI> api;                                     \
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);     \
+#define INIT_TEST_DRIVER_API()                                         \
+  ASSERT_GT (DriverAPI::getNumDevices (NPUCOND_TRIV24_CONN_SOCIP), 0); \
+  std::unique_ptr<DriverAPI> api;                                      \
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);     \
   EXPECT_NE (api.get (), nullptr);
 
 #ifndef DRM_RDWR
index f0309465abc81a62d27481125ff81901adc1cbf0..afbda6b47eb8c24bd2648dae01d9ac98cb78483b 100644 (file)
@@ -39,7 +39,7 @@ TEST (ne_core_inputservice_test, submit_host_service) {
   std::unique_ptr<DriverAPI> api;
   npu_input_opmode opmode = NPUINPUT_HOST;
 
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   /** create dummy model */
@@ -90,7 +90,7 @@ TEST (ne_core_inputservice_test, submit_host_service_args_n) {
   std::unique_ptr<DriverAPI> api;
   npu_input_opmode opmode = NPUINPUT_HOST;
 
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   /** create dummy model */
@@ -144,7 +144,7 @@ TEST (ne_core_inputservice_test, submit_hw_service_model_n) {
   std::unique_ptr<DriverAPI> api;
   npu_input_opmode opmode = NPUINPUT_HW_RECURRING;
 
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   /** create dummy model */
@@ -168,7 +168,7 @@ TEST (ne_core_inputservice_test, submit_hw_service_args_n) {
   std::unique_ptr<DriverAPI> api;
   npu_input_opmode opmode = NPUINPUT_HW_RECURRING;
 
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   /** create dummy model */
@@ -218,7 +218,7 @@ TEST (ne_core_inputservice_test, host_submit_unsupported_n) {
  */
 TEST (ne_core_inputservice_test, host_remove) {
   std::unique_ptr<DriverAPI> api;
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   /** create dummy model */
index 827745e221bfe3ccc5113424e9b0b6c038b28080..dfee4f29e7340065d24705aeca1fa4e49eee7ff1 100644 (file)
@@ -23,7 +23,7 @@
  * @brief test primitives of memory allocator default (MemDefault)
  */
 TEST (ne_core_mem_test, mem_default_primitives) {
-  std::unique_ptr<DriverAPI> api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  std::unique_ptr<DriverAPI> api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   /**
@@ -55,7 +55,7 @@ TEST (ne_core_mem_test, mem_default_primitives) {
  * @brief test primitives of memory allocator (unimplemented)
  */
 TEST (ne_core_mem_test, mem_pool_primitives_n) {
-  std::unique_ptr<DriverAPI> api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  std::unique_ptr<DriverAPI> api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   /** 'resv_mem_size' > 0: MemPool (not implemented yet) */
@@ -92,7 +92,7 @@ TEST (ne_core_mem_test, create_instance_no_api_n) {
  * @brief test 0 size error handling
  */
 TEST (ne_core_mem_test, memory_invalid_args_n) {
-  std::unique_ptr<DriverAPI> api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  std::unique_ptr<DriverAPI> api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   /**
@@ -121,7 +121,7 @@ TEST (ne_core_mem_test, memory_invalid_args_n) {
  * @brief test nullptr error handling
  */
 TEST (ne_core_mem_test, alloc_no_impl_n) {
-  std::unique_ptr<DriverAPI> api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  std::unique_ptr<DriverAPI> api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   /**
diff --git a/tests/unittests/ne_core_npu_emul_test.cc b/tests/unittests/ne_core_npu_emul_test.cc
new file mode 100644 (file)
index 0000000..975fe9f
--- /dev/null
@@ -0,0 +1,524 @@
+/* SPDX-License-Identifier: Apache-2.0 */
+/**
+ * Copyright (C) 2023 Samsung Electronics
+ * Copyright (C) 2023 Parichay Kapoor <yelini.jeong@samsung.com>
+ */
+/**
+ * @file ne_core_npu_emul_test.cc
+ * @date 17 Mar 2023
+ * @brief Test npu driver api
+ * @author Yelin Jeong <yelini.jeong@samsung.com>
+ * @bug No known bugs except for NYI items
+ */
+
+#include <gtest/gtest.h>
+#include <NPUdrvAPI.h>
+#include <sys/mman.h>
+
+#include <future>
+#include <mutex>
+#include <thread>
+#include "typedef.h"
+
+#include <ne_test_utils_gtest.h>
+
+/** 2-TOPS TRIV2 v2.3.8 */
+#define TEST_NPU_VERSION (0x04080302)
+
+/**
+ * @brief check getNumDevices()
+ */
+TEST (ne_core_npu_emul_test, get_num_devices) {
+  int num_devices;
+
+  /** supported device types (currently) */
+  num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV23_CONN_UNKNOWN);
+  EXPECT_GT (num_devices, 0);
+  num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV23_CONN_SOCIP);
+  EXPECT_GT (num_devices, 0);
+}
+
+/**
+ * @brief check device dspm size
+ */
+TEST (ne_core_npu_emul_test, check_dev_dspm_size) {
+  int num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV23_CONN_UNKNOWN);
+  ASSERT_GT (num_devices, 0);
+  num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV23_CONN_UNKNOWN);
+  ASSERT_GT (num_devices, 0);
+
+  auto api_23 = DriverAPI::createDriverAPI (NPUCOND_TRIV23_CONN_SOCIP, 0);
+  uint32_t dspm_size;
+  EXPECT_EQ (api_23->getDspmSize (&dspm_size), 0);
+  EXPECT_EQ (dspm_size, 64 * 1024);
+}
+
+/**
+ * @brief check device statuses
+ */
+TEST (ne_core_npu_emul_test, check_dev_status_triv23) {
+  int num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV23_CONN_SOCIP);
+  ASSERT_GT (num_devices, 0);
+
+  std::unique_ptr<DriverAPI> api;
+
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV23_CONN_SOCIP, 0);
+  ASSERT_NE (api.get (), nullptr);
+  EXPECT_GE (api->getDeviceFD (), 0);
+  EXPECT_EQ (api->getDeviceID (), 0);
+  EXPECT_EQ (api->isReady (), device_state_t::TRINITY_STATE_READY);
+
+  /** open same device */
+  std::unique_ptr<DriverAPI> api2;
+  api2 = DriverAPI::createDriverAPI (NPUCOND_TRIV23_CONN_SOCIP, 0);
+  ASSERT_NE (api2.get (), nullptr);
+  EXPECT_GE (api2->getDeviceFD (), 0);
+  EXPECT_EQ (api2->getDeviceID (), 0);
+  EXPECT_EQ (api2->isReady (), device_state_t::TRINITY_STATE_READY);
+
+  EXPECT_EQ (api->getDeviceID (), api2->getDeviceID ());
+  /** file descriptors should be different */
+  EXPECT_NE (api->getDeviceFD (), api2->getDeviceFD ());
+}
+
+/**
+ * @brief check device statuses with error handling
+ */
+TEST (ne_core_npu_emul_test, check_dev_status_triv23_n) {
+  int num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV23_CONN_SOCIP);
+  ASSERT_GT (num_devices, 0);
+
+  std::unique_ptr<DriverAPI> api;
+
+  /** invalid id */
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV23_CONN_SOCIP, -1);
+  EXPECT_EQ (api.get (), nullptr);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV23_CONN_SOCIP, num_devices);
+  EXPECT_EQ (api.get (), nullptr);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV23_CONN_SOCIP, num_devices + 1);
+  EXPECT_EQ (api.get (), nullptr);
+}
+
+/**
+ * @brief create API instances without initailiation
+ */
+TEST (ne_core_npu_emul_test, create_instance_uninitialized_n) {
+  const size_t size = 4096;
+  model_config_t model;
+  input_config_t input;
+  size_t alloc, free;
+
+  input.task_handle = UINT32_MAX;
+
+  /** create driver APIs not using createDriverAPI() */
+  std::unique_ptr<DriverAPI> api (new TrinityVision2API (0));
+
+  api.reset (new TrinityEmulAPI (0, NPUCOND_TRIV23_CONN_SOCIP));
+
+  /** it's possible to do open() */
+  ASSERT_EQ (api->open (), 0);
+  EXPECT_NE (api->open (), 0);
+
+  /** but, not initialized */
+  EXPECT_EQ (api->isReady (), device_state_t::TRINITY_STATE_UNKNOWN);
+  EXPECT_EQ (api->alloc (size), -EPERM);
+  EXPECT_EQ (api->dealloc (0), -EPERM);
+  EXPECT_EQ (api->mmap (0, size), nullptr);
+  EXPECT_EQ (api->munmap (nullptr, size), -EPERM);
+  EXPECT_EQ (api->registerModel (&model), -EPERM);
+  EXPECT_EQ (api->deregisterModel (0), -EPERM);
+  EXPECT_EQ (api->getMemoryStatus (&alloc, &free), -EPERM);
+  EXPECT_EQ (api->runInput (&input), -EPERM);
+}
+
+/**
+ * @brief manage memory blocks using driver api
+ */
+TEST (ne_core_npu_emul_test, manage_mem_triv23) {
+  int num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV23_CONN_SOCIP);
+  ASSERT_GT (num_devices, 0);
+
+  std::unique_ptr<DriverAPI> api;
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV23_CONN_SOCIP, 0);
+  ASSERT_NE (api.get (), nullptr);
+
+  size_t size = 4096;
+  int dmabuf = api->alloc (size);
+  EXPECT_GE (dmabuf, 0);
+
+  void *ptr = api->mmap (dmabuf, size);
+  EXPECT_NE (ptr, nullptr);
+
+  for (size_t i = 0; i < size; i++)
+    static_cast<uint8_t *> (ptr)[i] = static_cast<uint8_t> (i % 256);
+
+  EXPECT_EQ (api->munmap (ptr, size), 0);
+
+  ptr = api->mmap (dmabuf, size);
+  EXPECT_NE (ptr, nullptr);
+
+  for (size_t i = 0; i < size; i++)
+    EXPECT_EQ (static_cast<uint8_t *> (ptr)[i], static_cast<uint8_t> (i % 256));
+
+  EXPECT_EQ (api->munmap (ptr, size), 0);
+  EXPECT_EQ (api->dealloc (dmabuf), 0);
+}
+
+/**
+ * @brief manage memory blocks using driver api (negative cases)
+ */
+TEST (ne_core_npu_emul_test, manage_mem_triv23_n) {
+  int num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV23_CONN_SOCIP);
+  ASSERT_GT (num_devices, 0);
+
+  std::unique_ptr<DriverAPI> api;
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV23_CONN_SOCIP, 0);
+  ASSERT_NE (api.get (), nullptr);
+
+  size_t size = 4096;
+  int dmabuf = api->alloc (size);
+  ASSERT_GE (dmabuf, 0);
+
+  /** alloc */
+  EXPECT_LT (api->alloc (0), 0);
+
+  /** mmap */
+  void *ptr;
+  ptr = api->mmap (dmabuf, 0);
+  EXPECT_EQ (ptr, nullptr);
+  ptr = api->mmap (dmabuf, size + 1);
+  EXPECT_EQ (ptr, nullptr);
+  ptr = api->mmap (dmabuf, size);
+  ASSERT_NE (ptr, nullptr);
+
+  /** munmap */
+  EXPECT_NE (api->munmap (nullptr, size), 0);
+  EXPECT_NE (api->munmap (ptr, 0), 0);
+  EXPECT_EQ (api->munmap (ptr, size), 0);
+
+  /** dealloc */
+  EXPECT_NE (api->dealloc (-1), 0);
+  EXPECT_NE (api->dealloc (dmabuf + 1), 0);
+  EXPECT_EQ (api->dealloc (dmabuf), 0);
+
+  /** mmap after dealloc */
+  ptr = api->mmap (dmabuf, size);
+  EXPECT_EQ (ptr, nullptr);
+}
+
+/**
+ * @brief set model data with error handling
+ */
+TEST (ne_core_npu_emul_test, set_model_data_n) {
+  std::unique_ptr<DriverAPI> api;
+  model_config_t model;
+  int num_devices;
+
+  /** TRIV2 Cases */
+  num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV23_CONN_SOCIP);
+  ASSERT_GT (num_devices, 0);
+
+  api.reset ();
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV23_CONN_SOCIP, 0);
+  ASSERT_NE (api.get (), nullptr);
+
+  /** invalid arguments */
+  EXPECT_NE (api->registerModel (nullptr), 0);
+
+  /** invalid model dmabuf */
+  model.dbuf_fd = -1;
+  EXPECT_NE (api->registerModel (&model), 0);
+}
+
+/**
+ * @brief set input data with error handling
+ */
+TEST (ne_core_npu_emul_test, set_input_data_n) {
+  std::unique_ptr<DriverAPI> api;
+  input_config_t input;
+  int num_devices;
+
+  input.task_handle = UINT32_MAX;
+
+  /** TRIV2 Cases */
+  num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV23_CONN_SOCIP);
+  ASSERT_GT (num_devices, 0);
+
+  api.reset ();
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV23_CONN_SOCIP, 0);
+  ASSERT_NE (api.get (), nullptr);
+
+  /** invalid arguments */
+  EXPECT_NE (api->runInput (nullptr), 0);
+
+  /** invalid buffer dmabuf */
+  input.dbuf_fd = -1;
+  EXPECT_NE (api->runInput (&input), 0);
+
+  /** still invalid model dmabuf */
+  input.dbuf_fd = api->alloc (4096);
+  ASSERT_GE (input.dbuf_fd, 0);
+  input.model_id = -1;
+  EXPECT_NE (api->runInput (&input), 0);
+}
+
+/**
+ * @brief test running inference with valid data
+ */
+TEST (ne_core_npu_emul_test, run_inference_triv23) {
+  const size_t size = 4096;
+  std::unique_ptr<DriverAPI> api;
+  model_config_t model;
+  input_config_t input;
+  int *buf;
+  int buffer_dmabuf;
+  int seg_dmabuf;
+  int model_dmabuf;
+  int num_devices;
+
+  input.task_handle = UINT32_MAX;
+
+  num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV23_CONN_SOCIP);
+  ASSERT_GT (num_devices, 0);
+
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV23_CONN_SOCIP, 0);
+  ASSERT_NE (api.get (), nullptr);
+
+  /** register model data */
+  model_dmabuf = api->alloc (size);
+  EXPECT_GE (model_dmabuf, 0);
+
+  model.version = 3;
+  model.dbuf_fd = model_dmabuf;
+  model.program_offset_addr = 0;
+  model.program_size = 0;
+  model.metadata_dbuf_fd = model_dmabuf; /* dummy */
+
+  EXPECT_EQ (api->registerModel (&model, TEST_NPU_VERSION), 0);
+
+  /** allocate input data */
+  buffer_dmabuf = api->alloc (size);
+  EXPECT_GE (buffer_dmabuf, 0);
+
+  /** configure segment table */
+  buf = (int *) api->mmap (buffer_dmabuf, size);
+  memset (buf, 0, size);
+  seg_dmabuf = api->alloc (size);
+  buf[0] = seg_dmabuf;
+
+  /** run with this model */
+  input.dbuf_fd = buffer_dmabuf;
+  input.model_id = model.id;
+  input.num_segments = 1;
+  input.input_mode = TRINITY_INPUT_CPU;
+  input.output_mode = TRINITY_OUTPUT_CPU_INTR;
+  input.timeout_ms = 100;
+
+  EXPECT_GE (api->runInput (&input), 0);
+  EXPECT_EQ (api->munmap (buf, size), 0);
+  EXPECT_EQ (api->deregisterModel (model.id), 0);
+  EXPECT_EQ (api->dealloc (model_dmabuf), 0);
+  EXPECT_EQ (api->dealloc (buffer_dmabuf), 0);
+}
+
+/**
+ * @brief A test for running inference with a valid model allocated from a
+ *        separate thread
+ */
+TEST (ne_core_npu_emul_test, run_inference_async0_triv23) {
+  const size_t size = 4096;
+  std::unique_ptr<DriverAPI> api;
+  model_config_t model;
+  std::future<int> f_ret;
+  input_config_t input;
+  int seg_dmabuf;
+  int model_dmabuf;
+  int num_devices;
+
+  input.task_handle = UINT32_MAX;
+
+  num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV23_CONN_SOCIP);
+  ASSERT_GT (num_devices, 0);
+
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV23_CONN_SOCIP, 0);
+  ASSERT_NE (api.get (), nullptr);
+
+  /** register model data */
+  model_dmabuf = api->alloc (size);
+  EXPECT_GE (model_dmabuf, 0);
+
+  model.version = 3;
+  model.dbuf_fd = model_dmabuf;
+  model.program_offset_addr = 0;
+  model.program_size = 0;
+  model.metadata_dbuf_fd = model_dmabuf; /* dummy */
+
+  EXPECT_EQ (api->registerModel (&model, TEST_NPU_VERSION), 0);
+
+  int *buf = nullptr;
+  int buffer_dmabuf = -1;
+
+  f_ret = std::async (std::launch::async, [&]() -> int {
+    /** allocate input data */
+    buffer_dmabuf = api->alloc (size);
+    if (buffer_dmabuf < 0)
+      return -ENOMEM;
+
+    /** configure segment table */
+    buf = (int *) api->mmap (buffer_dmabuf, size);
+    memset (buf, 0, size);
+    seg_dmabuf = api->alloc (size);
+    if (seg_dmabuf < 0)
+      return -ENOMEM;
+    buf[0] = seg_dmabuf;
+
+    /** run with this model */
+    input.dbuf_fd = buffer_dmabuf;
+    input.model_id = model.id;
+    input.num_segments = 1;
+    input.input_mode = TRINITY_INPUT_CPU;
+    input.output_mode = TRINITY_OUTPUT_CPU_INTR;
+    input.timeout_ms = 100;
+
+    return api->runInput (&input);
+  });
+
+  EXPECT_GE (f_ret.get (), 0);
+  EXPECT_EQ (api->munmap (buf, size), 0);
+  EXPECT_EQ (api->deregisterModel (model.id), 0);
+  EXPECT_EQ (api->dealloc (model_dmabuf), 0);
+  EXPECT_EQ (api->dealloc (buffer_dmabuf), 0);
+}
+
+/**
+ * @brief A test for running inference using async thread with a valid model
+ */
+TEST (ne_core_npu_emul_test, run_inference_async1_triv23) {
+  const size_t size = 4096;
+  std::unique_ptr<DriverAPI> api;
+  std::future<model_config_t> f_model;
+  model_config_t model;
+  input_config_t input;
+  int *buf;
+  int buffer_dmabuf;
+  int seg_dmabuf;
+  int num_devices;
+
+  input.task_handle = UINT32_MAX;
+
+  num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV23_CONN_SOCIP);
+  ASSERT_GT (num_devices, 0);
+
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV23_CONN_SOCIP, 0);
+  ASSERT_NE (api.get (), nullptr);
+
+  f_model = std::async (std::launch::async, [&]() -> model_config_t {
+    int ret;
+    model_config_t model = {};
+
+    /** register model data */
+    ret = api->alloc (size);
+    model.dbuf_fd = ret;
+    if (ret < 0)
+      return model;
+
+    model.version = 3;
+    model.program_offset_addr = 0;
+    model.program_size = 0;
+    model.metadata_dbuf_fd = ret; /* dummy */
+
+    ret = api->registerModel (&model, TEST_NPU_VERSION);
+    if (ret < 0) {
+      model.dbuf_fd = -1;
+    }
+
+    return model;
+  });
+
+  /** allocate input data */
+  buffer_dmabuf = api->alloc (size);
+  ASSERT_GE (buffer_dmabuf, 0);
+
+  /** configure segment table */
+  buf = (int *) api->mmap (buffer_dmabuf, size);
+  memset (buf, 0, size);
+  seg_dmabuf = api->alloc (size);
+  ASSERT_GE (seg_dmabuf, 0);
+  buf[0] = seg_dmabuf;
+
+  /** run with this model */
+  input.dbuf_fd = buffer_dmabuf;
+  model = f_model.get ();
+
+  ASSERT_GE (model.dbuf_fd, 0);
+  input.model_id = model.id;
+  input.num_segments = 1;
+  input.input_mode = TRINITY_INPUT_CPU;
+  input.output_mode = TRINITY_OUTPUT_CPU_INTR;
+  input.timeout_ms = 100;
+
+  EXPECT_GE (api->runInput (&input), 0);
+  EXPECT_EQ (api->munmap (buf, size), 0);
+  EXPECT_EQ (api->deregisterModel (model.id), 0);
+  EXPECT_EQ (api->dealloc (model.dbuf_fd), 0);
+  EXPECT_EQ (api->dealloc (buffer_dmabuf), 0);
+}
+
+/**
+ * @brief test running inference with invalid segment table
+ */
+TEST (ne_core_npu_emul_test, run_inference_triv23_n) {
+  const size_t size = 8192;
+  std::unique_ptr<DriverAPI> api;
+  model_config_t model;
+  input_config_t input;
+  int buffer_dmabuf;
+  int model_dmabuf;
+  int num_devices;
+
+  input.task_handle = UINT32_MAX;
+
+  num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV23_CONN_SOCIP);
+  ASSERT_GT (num_devices, 0);
+
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV23_CONN_SOCIP, 0);
+  ASSERT_NE (api.get (), nullptr);
+
+  /** register model data */
+  model_dmabuf = api->alloc (size);
+  EXPECT_GE (model_dmabuf, 0);
+
+  model.version = 3;
+  model.dbuf_fd = model_dmabuf;
+  model.program_offset_addr = 0;
+  model.program_size = 4096;
+  model.metadata_dbuf_fd = model_dmabuf; /* dummy */
+
+  EXPECT_EQ (api->registerModel (&model, TEST_NPU_VERSION), 0);
+
+  /** allocate input data */
+  buffer_dmabuf = api->alloc (size);
+  EXPECT_GE (buffer_dmabuf, 0);
+
+  /** run with this model */
+  input.dbuf_fd = buffer_dmabuf;
+  input.model_id = model.id;
+  /** failure case: segments information is not properly set */
+  input.num_segments = 0;
+  input.input_mode = TRINITY_INPUT_CPU;
+  input.output_mode = TRINITY_OUTPUT_CPU_INTR;
+  input.timeout_ms = 100;
+
+  EXPECT_EQ (api->runInput (&input), -EINVAL);
+  EXPECT_EQ (api->deregisterModel (model.id), 0);
+  EXPECT_EQ (api->dealloc (model_dmabuf), 0);
+  EXPECT_EQ (api->dealloc (buffer_dmabuf), 0);
+}
+
+/**
+ * @brief main function for unit test
+ */
+int
+main (int argc, char **argv) {
+  return start_gtest (argc, argv);
+}
index 8a9bd378454c17bd8bc55e32c28d6161d0410886..4864c2d582c1b3ba5fd5767e184d8eba8bb131fc 100644 (file)
@@ -34,9 +34,9 @@ TEST (ne_core_npu_test, get_num_devices) {
   int num_devices;
 
   /** supported device types (currently) */
-  num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV2_CONN_UNKNOWN);
+  num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV24_CONN_UNKNOWN);
   EXPECT_GT (num_devices, 0);
-  num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV2_CONN_SOCIP);
+  num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV24_CONN_SOCIP);
   EXPECT_GT (num_devices, 0);
 }
 
@@ -79,12 +79,8 @@ TEST (ne_core_npu_test, check_dev_dspm_size) {
   num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV24_CONN_UNKNOWN);
   ASSERT_GT (num_devices, 0);
 
-  auto api_23 = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
-  uint32_t dspm_size;
-  EXPECT_EQ (api_23->getDspmSize (&dspm_size), 0);
-  EXPECT_EQ (dspm_size, 64 * 1024);
-
   auto api_24 = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
+  uint32_t dspm_size;
   EXPECT_EQ (api_24->getDspmSize (&dspm_size), 0);
   EXPECT_EQ (dspm_size, 192 * 1024);
 }
@@ -92,13 +88,13 @@ TEST (ne_core_npu_test, check_dev_dspm_size) {
 /**
  * @brief check device statuses
  */
-TEST (ne_core_npu_test, check_dev_status_triv2) {
-  int num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV2_CONN_SOCIP);
+TEST (ne_core_npu_test, check_dev_status_triv24) {
+  int num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV24_CONN_SOCIP);
   ASSERT_GT (num_devices, 0);
 
   std::unique_ptr<DriverAPI> api;
 
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
   EXPECT_GE (api->getDeviceFD (), 0);
   EXPECT_EQ (api->getDeviceID (), 0);
@@ -106,7 +102,7 @@ TEST (ne_core_npu_test, check_dev_status_triv2) {
 
   /** open same device */
   std::unique_ptr<DriverAPI> api2;
-  api2 = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  api2 = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api2.get (), nullptr);
   EXPECT_GE (api2->getDeviceFD (), 0);
   EXPECT_EQ (api2->getDeviceID (), 0);
@@ -120,18 +116,18 @@ TEST (ne_core_npu_test, check_dev_status_triv2) {
 /**
  * @brief check device statuses with error handling
  */
-TEST (ne_core_npu_test, check_dev_status_triv2_n) {
-  int num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV2_CONN_SOCIP);
+TEST (ne_core_npu_test, check_dev_status_triv24_n) {
+  int num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV24_CONN_SOCIP);
   ASSERT_GT (num_devices, 0);
 
   std::unique_ptr<DriverAPI> api;
 
   /** invalid id */
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, -1);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, -1);
   EXPECT_EQ (api.get (), nullptr);
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, num_devices);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, num_devices);
   EXPECT_EQ (api.get (), nullptr);
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, num_devices + 1);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, num_devices + 1);
   EXPECT_EQ (api.get (), nullptr);
 }
 
@@ -190,7 +186,7 @@ TEST (ne_core_npu_test, create_instance_uninitialized_n) {
   EXPECT_EQ (api->runInput (&input), -EPERM);
 
 #ifdef ENABLE_EMUL
-  api.reset (new TrinityEmulAPI (0, NPUCOND_TRIV2_CONN_SOCIP));
+  api.reset (new TrinityEmulAPI (0, NPUCOND_TRIV24_CONN_SOCIP));
 
   /** it's possible to do open() */
   ASSERT_EQ (api->open (), 0);
@@ -212,12 +208,12 @@ TEST (ne_core_npu_test, create_instance_uninitialized_n) {
 /**
  * @brief manage memory blocks using driver api
  */
-TEST (ne_core_npu_test, manage_mem_triv2) {
-  int num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV2_CONN_SOCIP);
+TEST (ne_core_npu_test, manage_mem_triv24) {
+  int num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV24_CONN_SOCIP);
   ASSERT_GT (num_devices, 0);
 
   std::unique_ptr<DriverAPI> api;
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   size_t size = 4096;
@@ -245,12 +241,12 @@ TEST (ne_core_npu_test, manage_mem_triv2) {
 /**
  * @brief manage memory blocks using driver api (negative cases)
  */
-TEST (ne_core_npu_test, manage_mem_triv2_n) {
-  int num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV2_CONN_SOCIP);
+TEST (ne_core_npu_test, manage_mem_triv24_n) {
+  int num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV24_CONN_SOCIP);
   ASSERT_GT (num_devices, 0);
 
   std::unique_ptr<DriverAPI> api;
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   size_t size = 4096;
@@ -293,11 +289,11 @@ TEST (ne_core_npu_test, set_model_data_n) {
   int num_devices;
 
   /** TRIV2 Cases */
-  num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV2_CONN_SOCIP);
+  num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV24_CONN_SOCIP);
   ASSERT_GT (num_devices, 0);
 
   api.reset ();
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   /** invalid arguments */
@@ -319,11 +315,11 @@ TEST (ne_core_npu_test, set_input_data_n) {
   input.task_handle = UINT32_MAX;
 
   /** TRIV2 Cases */
-  num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV2_CONN_SOCIP);
+  num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV24_CONN_SOCIP);
   ASSERT_GT (num_devices, 0);
 
   api.reset ();
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   /** invalid arguments */
@@ -343,7 +339,7 @@ TEST (ne_core_npu_test, set_input_data_n) {
 /**
  * @brief test running inference with valid data
  */
-TEST (ne_core_npu_test, run_inference_triv2) {
+TEST (ne_core_npu_test, run_inference_triv24) {
   const size_t size = 4096;
   std::unique_ptr<DriverAPI> api;
   model_config_t model;
@@ -403,7 +399,7 @@ TEST (ne_core_npu_test, run_inference_triv2) {
  * @brief A test for running inference with a valid model allocated from a
  *        separate thread
  */
-TEST (ne_core_npu_test, run_inference_async0_triv2) {
+TEST (ne_core_npu_test, run_inference_async0_triv24) {
   const size_t size = 4096;
   std::unique_ptr<DriverAPI> api;
   model_config_t model;
@@ -471,7 +467,7 @@ TEST (ne_core_npu_test, run_inference_async0_triv2) {
 /**
  * @brief A test for running inference using async thread with a valid model
  */
-TEST (ne_core_npu_test, run_inference_async1_triv2) {
+TEST (ne_core_npu_test, run_inference_async1_triv24) {
   const size_t size = 4096;
   std::unique_ptr<DriverAPI> api;
   std::future<model_config_t> f_model;
@@ -545,7 +541,7 @@ TEST (ne_core_npu_test, run_inference_async1_triv2) {
 /**
  * @brief test running inference with invalid segment table
  */
-TEST (ne_core_npu_test, run_inference_triv2_n) {
+TEST (ne_core_npu_test, run_inference_triv24_n) {
   const size_t size = 8192;
   std::unique_ptr<DriverAPI> api;
   model_config_t model;
index 3d6f6dfc5233ddc31c88678545ce4a12511d068d..5ab8378f5448fb93065fad64be2bdd3977019e55 100644 (file)
 TEST (ne_core_profiler_test, merge_profile) {
   const npu_profile_opt opt_visa = {.level = PROFILE_LEVEL_VISA};
 
-  int ret, num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV2_CONN_SOCIP);
+  int ret, num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV24_CONN_SOCIP);
   ASSERT_GT (num_devices, 0);
 
-  auto api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  auto api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   std::unique_ptr<ModelProfiler> profiler (new ModelProfiler (api.get ()));
@@ -60,10 +60,10 @@ TEST (ne_core_profiler_test, profile_level_visa_dlp) {
   const npu_profile_opt opt_dlp = {.level = PROFILE_LEVEL_VISA_DLP};
   const npu_profile_opt opt_visa = {.level = PROFILE_LEVEL_VISA};
 
-  int ret, num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV2_CONN_SOCIP);
+  int ret, num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV24_CONN_SOCIP);
   ASSERT_GT (num_devices, 0);
 
-  auto api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  auto api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   std::unique_ptr<ModelProfiler> profiler (new ModelProfiler (api.get ()));
@@ -88,10 +88,10 @@ TEST (ne_core_profiler_test, profile_level_visa_dlp) {
 TEST (ne_core_profiler_test, profile_TRIV23) {
   const npu_profile_opt opt_visa = {.level = PROFILE_LEVEL_VISA};
 
-  int ret, num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV2_CONN_SOCIP);
+  int ret, num_devices = DriverAPI::getNumDevices (NPUCOND_TRIV23_CONN_SOCIP);
   ASSERT_GT (num_devices, 0);
 
-  auto api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  auto api = DriverAPI::createDriverAPI (NPUCOND_TRIV23_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   std::unique_ptr<ModelProfiler> profiler (new ModelProfiler (api.get ()));
index f15c18fa190805f79852323095ea04adeeba5427..f888a4071298f91bc98a0eb2a3b52d4edf4bad85 100644 (file)
@@ -20,7 +20,7 @@
  */
 TEST (ne_core_sched_test, request_set_get_primitives) {
   std::unique_ptr<DriverAPI> api;
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   /** create dummy model */
@@ -62,7 +62,7 @@ TEST (ne_core_sched_test, request_set_get_primitives) {
  */
 TEST (ne_core_sched_test, request_set_get_args_n) {
   std::unique_ptr<DriverAPI> api;
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   bool force_stop = false;
@@ -94,7 +94,7 @@ TEST (ne_core_sched_test, request_set_get_args_n) {
  */
 TEST (ne_core_sched_test, submit_request) {
   std::unique_ptr<DriverAPI> api;
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   /** create dummy model */
@@ -171,7 +171,7 @@ TEST (ne_core_sched_test, create_request_args_n) {
  */
 TEST (ne_core_sched_test, submit_request_args_n) {
   std::unique_ptr<DriverAPI> api;
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   /** create dummy model */
@@ -210,7 +210,7 @@ TEST (ne_core_sched_test, submit_request_args_n) {
  */
 TEST (ne_core_sched_test, submit_request_opmode_n) {
   std::unique_ptr<DriverAPI> api;
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   /** create dummy model */
@@ -257,7 +257,7 @@ TEST (ne_core_sched_test, submit_request_opmode_n) {
  */
 TEST (ne_core_sched_test, submit_request_empty_n) {
   std::unique_ptr<DriverAPI> api;
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   std::unique_ptr<Scheduler> sched (new Scheduler (api.get ()));
index 9d60753cdf9eb72eb35796f21ceff551829db39d..5dabdf6e5519892f9df2ba47680f7a697f16f7c2 100644 (file)
@@ -73,7 +73,7 @@ set_input_buffers (input_buffers *input) {
  */
 TEST (ne_core_segment_table_test, create_segments) {
   std::unique_ptr<DriverAPI> api;
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   std::unique_ptr<Model> model (new Model (new HWmemDevice));
@@ -110,7 +110,7 @@ TEST (ne_core_segment_table_test, create_segments) {
  */
 TEST (ne_core_segment_table_test, primitives_n) {
   std::unique_ptr<DriverAPI> api;
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   std::unique_ptr<Model> model (new Model (new HWmemDevice));
@@ -144,7 +144,7 @@ TEST (ne_core_segment_table_test, primitives_n) {
  */
 TEST (ne_core_segment_table_test, create_segments_n) {
   std::unique_ptr<DriverAPI> api;
-  api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
+  api = DriverAPI::createDriverAPI (NPUCOND_TRIV24_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
   std::unique_ptr<Model> model (new Model (new HWmemDevice));
index 0ed65a3302868956821c9a00e5199f2e72ccb388..f88e5bd4dc6efbdcaafc0bd0542ec38fa592739e 100644 (file)
@@ -21,7 +21,7 @@
 #include <ne_test_utils.h>
 #include <ne_test_utils_gtest.h>
 
-#define BASIC_TEST_MODEL NE_DATADIR "/testdata/TRIV240/CONV_2D_000"
+#define BASIC_TEST_MODEL NE_DATADIR "/testdata/TRIV242/CONV_2D_000"
 
 /**
  * @brief test primitives supported in libnpuhost
index 7dd79789f938f366ca45f0d044c054ada35bb68f..c00e7952622215eba85c12888fe026473e86bc87 100644 (file)
@@ -330,6 +330,19 @@ UtilTrinity::setProfLevel (const std::string level) {
     std::cerr << "Unknown profile level: " << level << std::endl;
   }
 }
+
+/** @brief set profile level */
+void
+UtilTrinity::setDeviceType (const std::string type) {
+  if (type == "2.3")
+    type_ = NPUCOND_TRIV23_CONN_SOCIP;
+  else if (type == "2.4")
+    type_ = NPUCOND_TRIV24_CONN_SOCIP;
+  else {
+    std::cerr << "Unknown device type: " << type << std::endl;
+  }
+}
+
 /** @brief parse/set arguments and get working directory */
 int
 UtilTrinity::parseArgs (int argc, char **argv, const char *param_str, int *index) {
@@ -340,7 +353,7 @@ UtilTrinity::parseArgs (int argc, char **argv, const char *param_str, int *index
 
   optind = 0;
   opterr = 0;
-  while ((c = getopt (argc, argv, "d:n:p:tmsho")) != -1) {
+  while ((c = getopt (argc, argv, "v:d:n:p:tmsho")) != -1) {
     switch (c) {
       case 'd':
         setNodePath (optarg);
@@ -351,6 +364,9 @@ UtilTrinity::parseArgs (int argc, char **argv, const char *param_str, int *index
       case 'p':
         setProfLevel (optarg);
         break;
+      case 'v':
+        setDeviceType (optarg);
+        break;
       case 't':
         setTrinityFormat ();
         break;
@@ -364,8 +380,8 @@ UtilTrinity::parseArgs (int argc, char **argv, const char *param_str, int *index
         setDump ();
         break;
       case '?':
-        if (optopt == 'd' || optopt == 'n' || optopt == 'p')
-          std::cerr << "Option 'd', 'n', or 'p' requires an extra argument";
+        if (optopt == 'd' || optopt == 'n' || optopt == 'p' || optopt == 'v')
+          std::cerr << "Option 'd', 'n', 'p' of 'v' requires an extra argument";
         else
           std::cerr << "Unknown flag: " << c;
         std::cerr << std::endl;
index 7eee2683cc5acfd336055cb70eb639308a1a7b07..9af87ef07b8f39c063647a7d383f6e77fd4a7c57 100644 (file)
@@ -108,6 +108,7 @@ class UtilTrinity {
   void setNotiMode (const std::string mode);
   void setNodePath (const std::string node);
   void setProfLevel (const std::string level);
+  void setDeviceType (const std::string type);
 
   int getTops (std::string model_dir);
   int init (uint32_t tops = default_tops);
diff --git a/utils/resource/model_23.xml b/utils/resource/model_23.xml
new file mode 100644 (file)
index 0000000..b8a738a
--- /dev/null
@@ -0,0 +1,8 @@
+<testcases>
+ <model name="mobilenet_v1" timeout="3000" priority="1">
+  <dirpath>/opt/trinity/share/npu-engine/testdata/TRIV238_2TOPS/MOBILENET_V1</dirpath>
+ </model>
+ <model name="mobilenet_v2" timeout="1000" priority="2">
+  <dirpath>/opt/trinity/share/npu-engine/testdata/TRIV238_2TOPS/MOBILENET_V2</dirpath>
+ </model>
+</testcases>
diff --git a/utils/resource/model_24.xml b/utils/resource/model_24.xml
new file mode 100644 (file)
index 0000000..c6eeee9
--- /dev/null
@@ -0,0 +1,8 @@
+<testcases>
+ <model name="mobilenet_v1" timeout="3000" priority="1">
+  <dirpath>/opt/trinity/share/npu-engine/testdata/TRIV242/MOBILENET_V1</dirpath>
+ </model>
+ <model name="mobilenet_v2" timeout="1000" priority="2">
+  <dirpath>/opt/trinity/share/npu-engine/testdata/TRIV242/MOBILENET_V2</dirpath>
+ </model>
+</testcases>