NPU 模型的 API 部署流程*
1. 使用 NPU*
通过NPU编译器生成模型文件后,需要把模型文件部署到板子上。 NPU编译器生成的模型文件为 C 文件,配合我们提供的 API 接口,可以实现模型在板子上的运行。 具体使用指南请阅读NPU模型部署指南.
1.1 调用 API 流程*
- 打开 SNPU
- 加载模型和输入数据,运行模型,得到输出数据。
- 关闭 SNPU
gx_snpu.h
/**
* @brief 初始化snpu
*
*
* @return snpu 初始化成功与否
* @retval 0 正常
* @retval -1 失败
*/
int gx_snpu_init(void);
/**
* @brief 关闭snpu
*
*
* @return snpu 关闭成功与否
* @retval 0 正常
* @retval -1 失败
*/
int gx_snpu_exit(void);
/**
* @brief snpu 输入和输出的数据格式,注:GRUS的输出格式可以在编译模型时选择使用float16还是float32
*/
typedef short GX_SNPU_FLOAT;
/**
* @brief snpu工作状态
*/
typedef enum {
GX_SNPU_IDLE, /**< 空闲状态*/
GX_SNPU_BUSY, /**< 工作忙状态*/
GX_SNPU_STALL, /**< 停滞状态*/
} GX_SNPU_STATE;
/**
* @brief snpu 回调函数,任务处理完后,中断里面执行该函数
*/
typedef int (*GX_SNPU_CALLBACK)(int module_id, GX_SNPU_STATE state, void *private_data);
/**
* @brief snpu 工作任务
*/
typedef struct {
int module_id; /**< 模块标识号 module id defined by programmer*/
void *ops; /**< mcu算子信息内容区域 ops_content in model.h*/
void *data; /**< 临时数据内容区域 data_content in model.h*/
void *input; /**< 模型输入数据 input in model.h*/
void *output; /**< 模型输出数据 output in model.h*/
void *cmd; /**< 指令内容区域 cmd_content in model.h*/
void *tmp_mem; /**< 临时数据内容区域 tmp_content in model.h*/
void *weight; /**< 权重内容区域 weight_content in model.h*/
} GX_SNPU_TASK;
/**
* @brief 异步方式运行一个工作任务
*
* @param task 工作任务
* @param callback 回调函数,任务处理完后,中断里面执行该函数
* @param private_data 回调函数的参数
*
* @return snpu 任务工作状态
* @retval 0 正常
* @retval -1 失败
*/
int gx_snpu_run_task(GX_SNPU_TASK *task, GX_SNPU_CALLBACK callback, void *private_data);
/**
* @brief 同步方式运行一个工作任务
*
* @param task 工作任务
*
* @return snpu 任务工作状态
* @retval 0 正常
* @retval -1 失败
*/
int gx_snpu_run_task_sync(GX_SNPU_TASK *task);
/**
* @brief snpu 获得工作状态
*
*
* @return snpu 任务工作状态
* @retval GX_SNPU_IDLE 空闲状态
* @retval GX_SNPU_BUSY 工作忙状态
* @retval GX_SNPU_STALL 停滞状态
*/
GX_SNPU_STATE gx_snpu_get_state(void);