*/
int
HostHandler::removeRequest (int req_id) {
- return device_->removeRequest (req_id);
+ int status = device_->removeRequest (req_id);
+ if (status == 0)
+ profiler_->removeRequest (req_id);
+ return status;
}
/**
*/
int
HostHandler::submitRequest (int req_id) {
- return device_->submitRequest (req_id);
+ uint32_t model_id;
+ int status = device_->getRequestModel (req_id, &model_id);
+ if (status != 0)
+ return status;
+
+ Model *model = models_.find (model_id);
+ /* internal logic error */
+ assert (model != nullptr);
+
+ status = device_->submitRequest (req_id);
+ if (status == 0)
+ profiler_->appendRequest (req_id, model);
+ return status;
}
/**
*/
int
HostHandler::submitRequestKernel (int req_id) {
- return device_->submitRequestKernel (req_id);
+ uint32_t model_id;
+ int status = device_->getRequestModel (req_id, &model_id);
+ if (status != 0)
+ return status;
+
+ Model *model = models_.find (model_id);
+ /* internal logic error */
+ assert (model != nullptr);
+
+ status = device_->submitRequestKernel (req_id);
+ if (status == 0)
+ profiler_->appendRequest (req_id, model);
+ return status;
}
/**
}
scheduler_->removeRequest (req);
+
return 0;
}
*/
int
HostInputService::remove (const DriverAPI *api, int id) {
+ if (api == nullptr || id < 0) {
+ logerr (TAG, "Invalid arguments\n");
+ return -EINVAL;
+ }
+
+#ifdef ENABLE_EMUL
+ api->stop_target (id);
+#endif
+
return ThreadPool::getInstance ().removeTask (id);
}
}
int
+ModelProfiler::removeRequest (int req_id) {
+ return profile_map_.remove (req_id);
+}
+
+int
ModelProfiler::getProfile (int req_id, const npu_profile_opt &opt, npu_profile *profile) {
ProfileData *data = profile_map_.find (req_id);
if (data == nullptr)
~ModelProfiler ();
int appendRequest (int req_id, const Model *model);
- int getProfile (int req_id, const npu_profile_opt &opt, npu_profile *profile);
+ int removeRequest (int req_id);
+ int getProfile (int req_id, const npu_profile_opt &opt, npu_profile *profile);
void manipulateProfile (HWmem *extended, npu_profile *profile);
private:
size_t size = 4096;
char *data = new char[size];
- generic_buffer buffer;
+ memset (data, '\x00', size);
+ generic_buffer buffer = {0};
+
buffer.type = BUFFER_MAPPED;
buffer.addr = new char[size];
buffer.size = size;
size_t size = 4096;
char *data = new char[size];
- generic_buffer buffer;
+ memset (data, '\x00', size);
+ generic_buffer buffer = {0};
+
buffer.type = BUFFER_MAPPED;
buffer.addr = new char[size];
buffer.size = size;
size_t size = 4096;
char *data = new char[size];
- generic_buffer buffer;
+ memset (data, '\x00', size);
+ generic_buffer buffer = {0};
+
buffer.size = size;
/** not supported */
size_t size = 4096;
char *data = new char[size];
- generic_buffer buffer;
+ memset (data, '\x00', size);
+ generic_buffer buffer = {0};
+
buffer.type = BUFFER_FILE;
buffer.filepath = "/tmp/test.bin";
buffer.size = size;
size_t size = 4096;
char *data = new char[size];
- generic_buffer buffer;
+ memset (data, '\x00', size);
+ generic_buffer buffer = {0};
/** need filepath */
buffer.type = BUFFER_FILE;
size_t size = 4096;
char *data = new char[size];
- generic_buffer buffer;
+ memset (data, '\x00', size);
+ generic_buffer buffer = {0};
+
buffer.type = BUFFER_MAPPED;
buffer.addr = new char[size];
buffer.size = size;
size_t size = 4096;
char *data = new char[size];
- generic_buffer buffer;
+ memset (data, '\x00', size);
+ generic_buffer buffer = {0};
+
buffer.type = BUFFER_MAPPED;
buffer.addr = new char[size];
buffer.size = size;
size_t size = 4096;
char *data = new char[size];
- generic_buffer buffer;
+ memset (data, '\x00', size);
+ generic_buffer buffer = {0};
/** not supported */
buffer.type = BUFFER_FILE;
DATA_TYPE_FLOAT32, DATA_TYPE_FLOAT64};
uint32_t data_dims[] = {1, 1, 1, 1024};
- void *src_data = malloc (4096);
+ void *src_data = calloc (1, 4096);
ASSERT_NE (src_data, nullptr);
- void *dst_data = malloc (4096);
+ void *dst_data = calloc (1, 4096);
if (dst_data == nullptr) {
free (src_data);
ASSERT_NE (dst_data, nullptr);
void *addr = nullptr;
Model *model;
generic_buffer model_buf = {0};
- input_buffers input;
+ input_buffers input = {0};
EXPECT_EQ (triv2->allocMemory (4096, &addr), -EPERM);
EXPECT_EQ (triv2->deallocMemory (0, 4096, addr), -EPERM);
ASSERT_EQ (device->setModel (&model_buf, &model), 0);
/** prepare input buffers */
- input_buffers input_buf;
+ input_buffers input_buf = {0};
create_input_buffers (input_buf);
npu_input_opmode opmode = NPUINPUT_HOST;
ASSERT_EQ (device->setModel (&model_buf, &model), 0);
/** prepare input buffers */
- input_buffers input_buf;
+ input_buffers input_buf = {0};
create_input_buffers (input_buf);
npu_input_opmode opmode = NPUINPUT_HOST;
ASSERT_EQ (device->setModel (&model_buf, &model), 0);
/** prepare input buffers */
- input_buffers input_buf;
+ input_buffers input_buf = {0};
create_input_buffers (input_buf);
/** TRIV2 only allows NPUINPUT_HOST */
ASSERT_EQ (device->setModel (&model_buf, &model), 0);
/** prepare input buffers */
- input_buffers input_buf;
+ input_buffers input_buf = {0};
create_input_buffers (input_buf);
npu_input_opmode opmode = NPUINPUT_HOST;
EXPECT_EQ (handler->registerModel (&model_buf, &modelid), 0);
/** buffer */
- input_buffers input;
+ input_buffers input = {0};
input.num_buffers = 1;
input.bufs[0].type = BUFFER_MAPPED;
input.bufs[0].size = 4096;
EXPECT_EQ (handler->allocGenericBuffer (&input), 0);
/** runModel (sync) from host handler */
- output_buffers output;
- output.num_buffers = 0;
+ output_buffers output = {0};
npu_infer_mode mode = NPU_INFER_BLOCKING;
EXPECT_GE (handler->runModel (modelid, mode, &input), 0);
EXPECT_EQ (handler->registerModel (&model_buf, &modelid), 0);
/** buffer */
- input_buffers input;
+ input_buffers input = {0};
input.num_buffers = 1;
input.bufs[0].type = BUFFER_MAPPED;
input.bufs[0].size = 4096;
EXPECT_EQ (handler->allocGenericBuffer (&input), 0);
- output_buffers output;
- output.num_buffers = 0;
+ output_buffers output = {0};
/** TRIV2 always requires model and input buffers */
npu_infer_mode mode = NPU_INFER_BLOCKING;
EXPECT_EQ (handler->registerModel (&model_buf, &modelid), 0);
/** buffer */
- input_buffers input;
+ input_buffers input = {0};
input.num_buffers = 1;
input.bufs[0].type = BUFFER_MAPPED;
input.bufs[0].size = 4096;
EXPECT_EQ (handler->registerModel (&model_buf, &modelid), 0);
/** buffer */
- input_buffers input;
+ input_buffers input = {0};
input.num_buffers = 1;
input.bufs[0].type = BUFFER_MAPPED;
input.bufs[0].size = 4096;
EXPECT_EQ (free_total, 0);
/** buffer */
- input_buffers input;
+ input_buffers input = {0};
input.num_buffers = 1;
input.bufs[0].type = BUFFER_MAPPED;
input.bufs[0].size = size;
/** saturate requests up to the maximum (in thread pool) */
uint32_t num_threads = ThreadPool::getInstance ().getNumThreads ();
+ Request **requests = new Request *[num_threads + 1];
int req_id = 0;
for (uint32_t i = 0; i < num_threads + 1; i++) {
- std::unique_ptr<Request> req (new Request (7 + i));
+ Request *req = new Request (7 + i);
req->setOpmode (opmode);
req->setModel (model.get ());
req->setInferData (new SegmentTable (new HWmemDevice));
req_id = req->getID ();
- EXPECT_EQ (service.submit (api.get (), req.get (), callback), 0);
+ EXPECT_EQ (service.submit (api.get (), req, callback), 0);
+
+ requests[i] = req;
}
/** remove un-resolved task */
- EXPECT_EQ (service.remove (nullptr, req_id), 0);
+ EXPECT_EQ (service.remove (api.get (), req_id), 0);
wait_callbacks (num_called, num_threads, m, cv);
+
+ for (uint32_t i = 0; i < num_threads + 1; i++) delete requests[i];
+ delete[] requests;
}
/**