* other requests. FIFO is used among the same priority requests.
*/
typedef enum {
- NPU_PRIORITY_LOW =
- 0, /**< Low priority: requests could be delayed or canceled */
- NPU_PRIORITY_MID = 1, /**< Mid priority: requests could be slightly delayed */
- NPU_PRIORITY_HIGH =
- 2, /**< High priority: requests should be issued immediately */
+ NPU_PRIORITY_LOW = 0,
+ /**< Low priority: requests could be delayed or canceled */
+ NPU_PRIORITY_MID = 1,
+ /**< Mid priority: requests could be slightly delayed */
+ NPU_PRIORITY_HIGH = 2,
+ /**< High priority: requests should be issued immediately */
NPU_PRIORITY_PROFILE = NPU_PRIORITY_HIGH /**< Deprecated */
} npu_priority;
/* deprecated, for backward-compatibility */
#define npuConstraint npu_constraint
+/**
+ * @brief Describes the supported NPU Scheduler (in kernel modules)
+ */
+typedef enum {
+ NPU_SCHEDULER_UNKNOWN = 0,
+ NPU_SCHEDULER_SR,
+ NPU_SCHEDULER_VD
+} npu_scheduler;
+
static const uint32_t default_timeout = 3000;
static const npu_priority default_priority = NPU_PRIORITY_MID;
static const npu_notimode default_notimode = NPU_INTERRUPT;
+static const npu_scheduler default_scheduler = NPU_SCHEDULER_SR;
static const uint32_t default_tops = 2;
/**
NPU_LOG_END,
} npu_loglevel;
-typedef struct {
- uint32_t task_handle;
- uint32_t subtask_idx;
- /* TODO: Add more if needed */
-} npumgr_param;
-
#endif /* NPU_TYPEDEF_H__ */
npu_constraint constraint);
/**
- * @brief [OPTIONAL] Set the request's VD NPU manager parameter
+ * @brief [OPTIONAL] Set the request's scheduler
* @param[in] dev The NPU device handle
* @param[in] req_id The request ID
- * @param[in] param npumgr parameter
+ * @param[in] scheduler npu scheduler
* @return 0 if no error. Otherwise a negative errno
+ * @note if this is not called, the default scheduler is used (see typedef.h).
*/
-int setNPU_requestNpumgrParam (npudev_h dev, int req_id, npumgr_param param);
+int setNPU_requestScheduler (npudev_h dev, int req_id,
+ npu_scheduler scheculder);
/**
* @brief Submit the request to the NPU
}
/**
- * @brief Set the request's VD NPU manager parameter
+ * @brief Set the request's scheduler
* @param[in] req_id The request ID
- * @param[in] param npumgr parameter
+ * @param[in] scheduler npu scheduler
* @return 0 if no error. Otherwise a negative errno
*/
int
-HostHandler::setRequestNpumgrParam (int req_id, npumgr_param param) {
- return device_->setRequestNpumgrParam (req_id, param);
+HostHandler::setRequestScheduler (int req_id, npu_scheduler scheduler) {
+ return device_->setRequestScheduler (req_id, scheduler);
}
/**
}
int
-TrinityVision2::setRequestNpumgrParam (int req_id, npumgr_param param) {
+TrinityVision2::setRequestScheduler (int req_id, npu_scheduler scheduler) {
Request *req = scheduler_->findRequest (req_id);
if (req == nullptr) {
logerr (TAG, "Unable to find the request with ID (%d)\n", req_id);
return -ENOENT;
}
- req->setNpumgrParam (param);
+ req->setScheduler (scheduler);
return 0;
}
int setRequestCallback (int req_id, npuOutputNotify cb, void *data);
int setRequestMode (int req_id, npu_infer_mode mode);
int setRequestConstraint (int req_id, npu_constraint constraint);
- int setRequestNpumgrParam (int req_id, npumgr_param param);
+ int setRequestScheduler (int req_id, npu_scheduler scheduler);
int submitRequest (int req_id);
int submitRequestKernel (int req_id);
void *data) = 0;
virtual int setRequestMode (int req_id, npu_infer_mode mode) = 0;
virtual int setRequestConstraint (int req_id, npu_constraint constraint) = 0;
- virtual int setRequestNpumgrParam (int req_id, npumgr_param param) = 0;
+ virtual int setRequestScheduler (int req_id, npu_scheduler scheduler) = 0;
virtual int submitRequest (int req_id) = 0;
virtual int submitRequestKernel (int req_id) = 0;
int setRequestCallback (int req_id, npuOutputNotify cb, void *data);
int setRequestMode (int req_id, npu_infer_mode mode);
int setRequestConstraint (int req_id, npu_constraint constraint);
- int setRequestNpumgrParam (int req_id, npumgr_param param);
+ int setRequestScheduler (int req_id, npu_scheduler scheduler);
int submitRequest (int req_id);
int submitRequestKernel (int req_id);
input_config.activation_offset_addr0 = buffer->getOffset ();
input_config.activation_offset_addr1 = buffer->getOffset ();
- /** npumgr-specific parameters */
- const npumgr_param *param = req->getNpumgrParam ();
- if (param != nullptr) {
- input_config.task_handle = param->task_handle;
- input_config.subtask_idx = param->subtask_idx;
- } else {
+ /** FIXME: update input_config fields */
+ if (req->getScheduler () == NPU_SCHEDULER_SR) {
input_config.task_handle = UINT32_MAX;
input_config.subtask_idx = UINT32_MAX;
+ } else {
+ input_config.task_handle = 0;
+ input_config.subtask_idx = 0;
}
/** run the inference with the input */
input_config.req_id = req->getID ();
input_config.num_segments = segt->getNumTotalSegments ();
- /** npumgr-specific parameters */
- const npumgr_param *param = req->getNpumgrParam ();
- if (param != nullptr) {
- input_config.task_handle = param->task_handle;
- input_config.subtask_idx = param->subtask_idx;
- } else {
+ /** FIXME: update input_config fields */
+ if (req->getScheduler () == NPU_SCHEDULER_SR) {
input_config.task_handle = UINT32_MAX;
input_config.subtask_idx = UINT32_MAX;
+ } else {
+ input_config.task_handle = 0;
+ input_config.subtask_idx = 0;
}
/** set constraints */
input_config.req_id = req->getID ();
input_config.num_segments = segt->getNumTotalSegments ();
- /** npumgr-specific parameters */
- const npumgr_param *param = req->getNpumgrParam ();
- if (param != nullptr) {
- input_config.task_handle = param->task_handle;
- input_config.subtask_idx = param->subtask_idx;
- } else {
+ /** FIXME: update input_config fields */
+ if (req->getScheduler () == NPU_SCHEDULER_SR) {
input_config.task_handle = UINT32_MAX;
input_config.subtask_idx = UINT32_MAX;
+ } else {
+ input_config.task_handle = 0;
+ input_config.subtask_idx = 0;
}
/** set constraints */
cb_ (nullptr),
out_bufs_ (nullptr),
infer_mode_ (NPU_INFER_BLOCKING /* default */),
- npumgr_param_ (nullptr) {
+ sched_ (default_scheduler) {
request_id_ = Request::global_request_id_.fetch_add (1);
}
/** @brief destructor of request class */
Request::~Request () {
- if (npumgr_param_ != nullptr)
- delete npumgr_param_;
-
if (data_ != nullptr)
delete data_;
}
void setInferMode (npu_infer_mode infer_mode) { infer_mode_ = infer_mode; }
npu_infer_mode getInferMode () const { return infer_mode_; }
- void setNpumgrParam (const npumgr_param ¶m) {
- if (npumgr_param_ == nullptr)
- npumgr_param_ = new npumgr_param;
- memcpy (npumgr_param_, ¶m, sizeof (npumgr_param));
- }
- const npumgr_param *getNpumgrParam () const { return npumgr_param_; }
+ void setScheduler (const npu_scheduler &sched) { sched_ = sched; }
+ npu_scheduler getScheduler () const { return sched_; }
private:
static std::atomic<int> global_request_id_;
std::string hw_dev_; /**< HW device path */
npu_infer_mode infer_mode_;
- npumgr_param *npumgr_param_;
+ npu_scheduler sched_;
};
#endif /* NE_REQUEST_H__ */
}
/**
- * @brief [OPTIONAL] Set the request's VD NPU manager parameter
+ * @brief [OPTIONAL] Set the request's scheduler
* @param[in] dev The NPU device handle
* @param[in] req_id The request ID
- * @param[in] param npumgr parameter
+ * @param[in] scheduler npu scheduler
* @return 0 if no error. Otherwise a negative errno
+ * @note if this is not called, the default scheduler is used (see typedef.h).
*/
int
-setNPU_requestNpumgrParam (npudev_h dev, int req_id, npumgr_param param) {
+setNPU_requestScheduler (npudev_h dev, int req_id, npu_scheduler scheduler) {
INIT_HOST_HANDLER (host_handler, dev);
- return host_handler->setRequestNpumgrParam (req_id, param);
+ return host_handler->setRequestScheduler (req_id, scheduler);
}
/**
#define MAX_ITERS 10
/* dummy param */
- npumgr_param param = {.task_handle = 1, .subtask_idx = 0};
int req_ids[MAX_ITERS];
for (int i = 0; i < MAX_ITERS; i++) {
EXPECT_EQ (createNPU_request (dev, modelid, &req_ids[i]), 0);
EXPECT_EQ (setNPU_requestConstraint (dev, req_ids[i], constraint), 0);
- EXPECT_EQ (setNPU_requestNpumgrParam (dev, req_ids[i], param), 0);
+ EXPECT_EQ (setNPU_requestScheduler (dev, req_ids[i], NPU_SCHEDULER_VD), 0);
EXPECT_EQ (submitNPU_requestKernel (dev, req_ids[i]), 0);
}