API
1.1 宏定义与结构体

#define MAX_SHAPE_DIM_NUM 4

/* tensor的数据类型 */
#define TENGINE_DT_FP32 0
#define TENGINE_DT_FP16 1
#define TENGINE_DT_INT8 2
#define TENGINE_DT_UINT8 3
#define TENGINE_DT_INT32 4
#define TENGINE_DT_INT16 5

/* layout格式 */
#define TENGINE_LAYOUT_NCHW 0
#define TENGINE_LAYOUT_NHWC 1

/* tensor type: the content changed or not during inference */
#define TENSOR_TYPE_UNKNOWN 0
#define TENSOR_TYPE_VAR 1
#define TENSOR_TYPE_CONST 2
#define TENSOR_TYPE_INPUT 3
#define TENSOR_TYPE_DEP 4

/* node转储操作定义?? */
#define NODE_DUMP_ACTION_DISABLE 0
#define NODE_DUMP_ACTION_ENABLE 1
#define NODE_DUMP_ACTION_START 2
#define NODE_DUMP_ACTION_STOP 3
#define NODE_DUMP_ACTION_GET 4

/* graph性能动作定义 */
#define GRAPH_PERF_STAT_DISABLE 0
#define GRAPH_PERF_STAT_ENABLE 1
#define GRAPH_PERF_STAT_STOP 2
#define GRAPH_PERF_STAT_START 3
#define GRAPH_PERF_STAT_RESET 4
#define GRAPH_PERF_STAT_GET 5

/* 遵循标准的Unix日志级别定义 */
enum log_level
{
LOG_EMERG,
LOG_ALERT,
LOG_CRIT,
LOG_ERR,
LOG_WARNING,
LOG_NOTICE,
LOG_INFO,
LOG_DEBUG
};

/* 注意:Android nn仅定义一个事件?? */
enum graph_exec_event
{
GRAPH_EXEC_START,
GRAPH_EXEC_SUSPEND,
GRAPH_EXEC_RESUME,
GRAPH_EXEC_ABORT,
GRAPH_EXEC_DONE
};

enum graph_exec_stat
{
GRAPH_STAT_CREATED,
GRAPH_STAT_READY,
GRAPH_STAT_RUNNING,
GRAPH_STAT_DONE,
GRAPH_STAT_ERROR
};

enum device_policy

{
DEFAULT_POLICY,
LATENCY_POLICY,
LOW_POWER_POLICY
};

typedef void * context_t;
typedef void * graph_t;
typedef void * tensor_t;
typedef void * node_t;

typedef int (*event_handler_t)(graph_t, int, void* arg);

typedef void (*log_pr int_t)(const char*);


/* 性能分析记录 */
struct perf_info
{
const char* name; /* node 名称 */
const char* dev_name; /* 设备名称 */
uint32_t count;
uint32_t min;
uint32_t max;
uint64_t total_time; /* us或cycle,取决于设备 */
uint32_t base; /* 1ms second time number */
};

struct custom_kernel_tensor
{
int dim[MAX_SHAPE_DIM_NUM]; /* 形状的数组 */
int dim_num; /* valid entry number */
int element_num;
int element_size; /* 由数据类型(data_type)决定 */
int data_type;
int dev_type; /* 表示张量属于 CPU/GPU ... */
int layout_type; /* NCHW 类型或者 NHWC 类型 */

/* quant info */
int quant_type; /* int8, int16 or int32 */
float* scale;
int* zero_point;
int* quant_number;

void* data; /* pointer to host memory (virtual address) */
void* dev_mem; /* refers to device memory block */
void* mapped_mem; /* the mapped dress for device memory block */
};
//
/* 供用户添加用户定义的Kernel */
struct custom_kernel_ops
{
const char* kernel_name; /* kernel名称 */
const char* op; /* 要实现的op的名称 */
int force; /* if not set, when bind() failed,
try to use other kernel implementations*/
void* kernel_param; /* 用于内核实现的函数 */
int kernel_param_size;

/*!
* @brief 根据输入形状生成输出形状
*        如果未实现,请将其设置为NULL。
*
* @param [in] ops: 自定义kernel的指针。
* @param [in]  inputs[]:  指向输入张量形状的指针数组。
*                         形状为MAX_SHAPE_DIM_NUM元素,
*                         值为0的元素表示形状的结尾。
* @param [in]  input_num: 输入张量的数目。

* @param [out] outputs[]: 指向已分配内存的输出张量形状的指针数组。
* @param [in]  output_num: 输出张量的数目
* @param [in]  layout: 图形布局为NHWC或NCHW
*
* @return 0: success, -1: fail.
*/
int (*infer_shape)(struct custom_kernel_ops* ops, const int* inputs[],
int input_num, int* outputs[],int output_num, int layout);

/*!
* @brief Get the inplace input tensor index for an output tensor.
*
* @param [in] ops: 自定义内核的指针。
* @param [in] output_idx: 自定义内核输出的索引。
*
* @return the inplace input tensor index for an output tensor.
*         if the output tensor is not an inplace one, return -1.
*/
int (*inplace_info)(struct custom_kernel_ops* ops, int output_idx); // 可选项

/*!
* @brief 检查内核是否可以处理输入和输出形状。
*
* @param [in] ops: 自定义kernel的指针。
* @param [in] inputs[]: 用于输入的自定义kernel的tensor
* @param [in] input_num: input tensors的数目
* @param [in] outputs[]: 自定义kernel的output tensor
* @param [in] output_num: output tensors的数目
*
* @return 0 if the input and output are supported
*         otherwise, return -1.
*
* notes: If not implemented, set it NULL, which means always return 0.
*/
int (*bind)( struct custom_kernel_ops* ops,
const struct custom_kernel_tensor* inputs[], int input_num,
const struct custom_kernel_tensor* outputs[], int output_num);

/*!
* @brief 预运行 graph.
*        dynamic_shape 意味着 input_num 为零时不是异常情况。
*
* @param [in] ops: 自定义kernel的指针。
* @param [in] inputs[]: 自定义kernel的input tensor
* @param [in] input_num: 自定义kernel的input tensor的数目
* @param [in] outputs[]: 自定义kernel的output tensor
* @param [in] output_num: 自定义kernel的output tensor的数目
* @param [in] dynamic_shape: It is not an abnormal case when input_num is zero.??
*
* @return 0: success, -1: fail.
*/
int (*prerun)(struct custom_kernel_ops* ops,
struct custom_kernel_tensor* inputs[], int input_num,
struct custom_kernel_tensor* outputs[], int output_num,
int dynamic_shape);
/*!
* @brief Reshape the graph.
*
* @param [in] ops: 自定义kernel的指针.
* @param [in] inputs[]: 自定义kernel的input tensor
* @param [in] input_num: 自定义kernel的input tensor的数目
* @param [in] outputs[]: 自定义kernel的output tensor
* @param [in] output_num: 自定义kernel的output tensor的数目

*
* @return 0: success, -1: fail.
*
* notes: 当输入形状更改时,将被调用它。
*        调用prerun()后,需要回收并重新分配运行时
*        资源取决于输入形状
*/
int (*reshape)(struct custom_kernel_ops* ops,
struct custom_kernel_tensor* inputs[], int input_num,
struct custom_kernel_tensor* outputs[], int output_num);

/*!
* @brief 运行 graph.
*
* @param [in] ops: 自定义kernel的指针.
* @param [in] inputs[]: 自定义kernel的input tensor
* @param [in] input_num: 自定义kernel的input tensor的数目
* @param [in] outputs[]: 自定义kernel的output tensor
* @param [in] output_num: 自定义kernel的output tensor的数目
*
* @return 0: success, -1: fail.
*/
int (*run)(struct custom_kernel_ops* ops,
struct custom_kernel_tensor* inputs[], int input_num,
struct custom_kernel_tensor* outputs[], int output_num);


/*!
* @brief 暂停graph并释放graph运行时使用的资源。
*
* @param [in] ops: 自定义kernel的指针.
* @param [in] inputs[]: 自定义kernel的input tensor
* @param [in] input_num: 自定义kernel的input tensor的数目
* @param [in] outputs[]: 自定义kernel的output tensor
* @param [in] output_num: 自定义kernel的output tensor的数目
*
* @return 0: success, -1: fail.
*/
int (*postrun)(struct custom_kernel_ops* ops,
struct custom_kernel_tensor* inputs[], int input_num,
struct custom_kernel_tensor* outputs[], int output_num);

/*!
* @brief 释放分配给此ops实现的资源。
*
* @param [in] ops: 自定义kernel的指针.
*
* @return None.
*/
void (*release)(struct custom_kernel_ops* ops);
};


1.2 API 介绍

Tengine支持的主要APIs是:
init_tengine:初始化tengine.
release_tengine:释放 tengine 资源
get_tengine_version:获取 tengine版本号
request_tengine_version:检查tengine版本号是否支持
create_graph:创建graph
save_graph:保存graph 到文件
set_graph_layout:设置graph的布局类型(layout)
set_graph_input_node:设置graph的输入节点(node)
set_graph_output_node:设置graph的输出节点(node)
merge_graph:将多个graph合并为一个graph
destroy_graph:销毁 graph
get_graph_input_node_number:获取graph的输入节点(node)的个数
get_graph_input_node:通过ID获取gragh的输入节点(node)
get_graph_output_node_number:获取graph的输出节点(node)的个数

get_graph_output_node:通过ID获取gragh的输出节点(node)
get_graph_output_tensor:通过ID获取graph的输出节点的张量(tensor)
get_graph_input_tensor:通过ID获取graph的输入节点的张量(tensor)
create_graph_node:创建graph的节点(node)
get_graph_node:获取节点(node)句柄
get_node_name:获取节点(node)的名称
get_node_op:获取节点(node)的操作(operation)
release_graph_node:释放graph的节点(node)
get_node_input_tensor:通过ID获取节点(node)的输入张量(tensor)
get_node_output_tensor:通过ID获取节点(node)的输出张量(tensor)
set_node_input_tensor:设置节点(node)的输入张量(tensor)
set_node_output_tensor:设置节点(node)的输出张量(tensor)
get_node_output_number:获取节点(node)的输出张量(tensor)个数
get_node_input_number:获取节点(node)的输入张量(tensor)个数
add_node_attr:添加节点(node)参数(attribute)
get_node_attr_int:获取节点(node)的整型参数
get_node_attr_float:获取节点(node)的浮点型参数
get_node_attr_pointer:获取节点(node)的指针型参数
get_node_attr_generic:获取节点(node)的通用型参数
set_node_attr_int:设置节点(node)的整型参数
set_node_attr_float:设置节点(node)的浮点型参数
set_node_attr_pointer:设置节点(node)的指针型参数
set_node_attr_generic:设置节点(node)的通用型参数
set_custom_kernel:设置设置用户内核(kernel)
remove_custom_kernel:移除用户内核(kernel)
create_graph_tensor:创建graph的张量(tensor)
get_graph_tensor:通过名称获取graph的张量(tensor)
get_tensor_name:获取张量(tensor)的名称
release_graph_tensor:释放graph的张量(tensor)
get_tensor_shape:获取张量(tensor)的形状(shape)
set_tensor_shape:设置张量(tensor)的形状(shape)
get_tensor_buffer_size:获取张量(tensor)的缓存大小
get_tensor_buffer:获取张量(tensor)的缓存(buffer)
set_tensor_buffer:设置张量(tensor)的缓存(buffer)
get_tensor_data:获取张量(tensor)的数据(data)
set_tensor_data:设置张量(tensor)的数据(data)
get_tensor_data_type:获取张量(tensor)的数据类型
set_tensor_data_type:设置张量(tensor)的数据类型
set_tensor_quant_param:设置tensor的量化参数
get_tensor_quant_param:获取tensor的量化参数
set_graph_attr:设置graph的参数
get_graph_attr:获取graph的参数
set_graph_gd_method:设置graph的梯度下降方法
prerun_graph:graph的预运行
run_graph:运行graph
wait_graph:等待graph
postrun_graph:停止运行graph 并释放graph  占据的资源
get_graph_exec_status:获取graph的执行状态
set_graph_event_hook:设置graph的事件回调钩子
set_default_device:设置默认设备
set_graph_device: 设置graph的执行设备
set_node_device: 设置node 的执行设备
get_node_device: 获取node的执行设备
do_node_dump: 使能节点的dump功能
get_node_dump_buffer: 获取节点的dump数据
do_graph_perf_stat: 启用或禁用性能统计
get_graph_perf_stat:获取性能统计信息
get_device_number:获取设备编号
get_device_name: 按index获取设备名称
get_default_device:获取默认设备
create_device:创建设备
destroy_device:销毁设备
set_device_policy:设置设备策略
get_device_policy:获取设备策略
get_device_attr:获取设备参数
set_device_attr:设置设备参数
create_context:创建context
destroy_context:销毁context
get_context_device_number:获取context设备数量
get_context_device_name:获取context设备名称
add_context_device:将设备添加到context中
remove_context_device:将设备移除出context
set_context_attr:设置context属性
get_context_attr:获取context属性
get_tengine_errno:获取错误数量
set_log_level:设置log级别

set_log_output:设置日志打印功能
dump_graph:dump图的结构
load_tengine_plugin:加载Tengine插件
unload_tengine_plugin:移除Tengine插件
get_tengine_plugin_number:获取Tengine插件数量
get_tengine_plugin_name:通过索引获取插件的名称

1.3 Tengine 创建与释放相关API

init_tengine

名称

init_tengine

介绍

使用tengine库前,首先需要执行init_tengine(),对tengine库进行初始化

参数


返回值

int

0  :表示成功

-1 :表示失败

原型

int init_tengine(void);


release_tengine

名称

release_tengine

介绍

执行release_tengine(),对tengine库进行资源释放操作

参数


返回值


原型

void release_tengine(void);


get_tengine_version

名称

get_tengine_version

介绍

获取Tengine库的版本信息

参数


返回值

const char *

版本的字符串指针

原型

const char * get_tengine_version(void);


request_tengine_version

名称

request_tengine_version

介绍

初始化Tengine后,通过该接口获取对版本的兼容情况

参数

const char * version

(I) 版本号字符串的指针

返回值

int

1 : 表示支持
0 : 表示不支持

原型

int request_tengine_version(const char * version);

1.4 graph相关操作

create_graph

名称

create_graph

介绍

创建 graph

参数

context_t context

(I) context的句柄

const char * model_format

(I) 采用模型的类型,比如“tengine”,“mxnet”,“caffe”,“onnx”,“tensorflow”等

const char * file_name

(I)文件名称

...

(I) 其他参数

返回值

graph_t

Graph 句柄, 如果为NULL 表示失败

原型

graph_t create_graph(context_t context, const char * model_format, const char * file_name,...);


save_graph

名称

save_graph

介绍

保存graph

参数

graph_t graph

(I) graph的句柄

const char * model_format

(I) 采用模型的类型,比如“tengine”,“mxnet”,“caffe”,“onnx”,“tensorflow”等

const char * file_name

(I)文件名称

...

(I) 其他参数

返回值

int

0  :表示成功
-1 :表示失败

原型

int save_graph(graph_t graph, const char * model_format, const char * file_name, ...)


set_graph_layout

名称


set_graph_layout


介绍

设置graph的layout

参数

graph_t  graph

(I) graph的句柄

int layout_type

Graph 的layout 类型,比如:
TENGINE_LAYOUT_NCHW
TENGINE_LAYOUT_NHWC

返回值

int

0  :表示成功
-1 :表示失败

原型

int set_graph_layout(graph_t graph, int layout_type);


set_graph_input_node

名称

set_graph_input_node

介绍

设置graph的input node

参数

graph_t  graph

(I) graph的句柄

const char * input_nodes[]

输入节点数组的指针,char类型

int input_number

(I) 输入节点的数量

返回值

int

0  :表示成功
-1 :表示失败

原型

int set_graph_input_node(graph_t  graph, const char * input_nodes[], int input_number);


set_graph_output_node

名称

set_graph_output_node

介绍

设置graph的output node

参数

graph_t  graph

(I) graph的句柄

const char * output_nodes[]

(I) 输出节点数组的指针,char类型

int output_number

(I) 输出节点的数量

返回值

int

0  :表示成功
-1 :表示失败

原型

int set_graph_output_node(graph_t  graph, const char * output_nodes[], int output_number);


merge_graph

名称

merge_graph

介绍

将多个graph合并为一个graph

参数

int graph_num

graph句柄的个数

graph_t graph0

graph 句柄0

graph_t graph1

(I) graph 句柄1

...

其他参数

返回值

graph_t

graph 句柄,如果为NULL 表示失败

原型

graph_t merge_graph(int graph_num , graph_t graph0, graph_t graph1, ...);


destroy_graph

名称

destroy_graph

介绍

销毁 graph

参数

graph_t  graph

graph句柄

返回值

int

0  :表示成功
-1 :表示失败

原型

int destroy_graph(graph_t  graph);


get_graph_input_node_number

名称

get_graph_input_node_number

介绍

获取graph的输入节点(node)数目

参数

graph_t  graph

graph句柄

返回值

int

>0 :node 个数
-1 :failure

原型

int get_graph_input_node_number(graph_t graph);


get_graph_input_node

名称

get_graph_input_node

介绍

通过ID获取gragh的输入节点(node)

参数

graph_t  graph

graph句柄

int idx

Node 下标(>=0)

返回值

node_t

node 句柄,如果为NULL 表示失败

原型

node_t get_graph_input_node(graph_t graph, int idx);


get_graph_output_node_number

名称

get_graph_output_node_number

介绍

获取graph的输出节点(node)个数

参数

graph_t  graph

graph句柄

返回值

int

>0 :node 编号
-1  :失败

原型

int get_graph_output_node_number(graph_t graph);


get_graph_output_node

名称

get_graph_output_node

介绍

通过ID获取gragh的输出节点(node)

参数

graph_t  graph

graph句柄

int idx

Node 下标(>=0)

返回值

node_t

node 句柄,如果为NULL 表示失败

原型

node_t get_graph_output_node(graph_t graph, int idx);


get_graph_output_tensor

名称

get_graph_output_tensor

介绍

按ID获取graph的输出张量(tensor)

参数

graph_t  graph

graph句柄

int output_node_idx

Node 下标(>=0)

int tensor_idx

tensor 下标(>=0)

返回值

tensor_t

tensor句柄,如果为NULL 表示失败

原型

tensor_t get_graph_output_tensor(graph_t graph, int output_node_idx, int tensor_idx);


get_graph_input_tensor

名称

get_graph_input_tensor

介绍

按ID获取graph的输入张量(tensor)

参数

graph_t  graph

graph句柄

int input_node_idx

Node 下标(>=0)

int tensor_idx

tensor 下标(>=0)

返回值

tensor_t

tensor句柄,如果为NULL 表示失败

原型

tensor_t get_graph_input_tensor(graph_t graph, int input_node_idx, int tensor_idx);


get_graph_node_number

名称

get_graph_node_number

介绍

获取graph的node数目

参数

graph_t graph

graph句柄

返回值

int

>=0 :表示成功
-1    :表示失败

原型

int get_graph_node_number(graph_t graph);


get_graph_node_by_idx

名称

get_graph_node_by_idx

介绍

通过下标获取graph的node

参数

graph_t graph

graph句柄

int node_idx

node的下标

返回值

node_t

node 句柄,如果为NULL 表示失败

原型

node_t get_graph_node_by_idx(graph_t graph, int node_idx);

1.5 node相关操作
create_graph_node

名称

create_graph_node

介绍

创建graph的node

参数

graph_t  graph

graph句柄

const char * node_name

node的名称

const char * op_name

操作名称

返回值

node_t

node 句柄,如果为NULL 表示失败

原型

node_t create_graph_node(graph_t graph, const char * node_name, const char * op_name);


get_graph_node

名称

get_graph_node

介绍

获取graph的node 的句柄

参数

graph_t  graph

graph句柄

const char * node_name

node的名称

返回值

node_t

node 句柄,如果为NULL 表示失败

原型

node_t get_graph_node(graph_t graph, const char * node_name);


get_node_name

名称

get_node_name

介绍

获取node 的名称

参数

node_t node

node句柄

返回值

const char *

node 句柄名称指针,如果为NULL 表示失败

原型

const char * get_node_name(node_t node);


get_node_op

名称

get_node_op

介绍

获取node使用的操作(op)

参数

node_t node

node句柄

返回值

const char *

node 的op名称指针,如果为NULL 表示失败

原型

const char * get_node_op(node_t node);


release_graph_node

名称

release_graph_node

介绍

释放graph的node

参数

node_t node

node句柄

返回值


原型

void release_graph_node(node_t node);


get_node_input_tensor

名称

get_node_input_tensor

介绍

获取 node 的输入张量(tensor)

参数

node_t node

node句柄

int input_idx

Input 的下标(>=0)

返回值

tensor_t

tensor 的句柄,如果为NULL 表示失败

原型

tensor_t get_node_input_tensor(node_t node, int input_idx);


get_node_output_tensor

名称

get_node_output_tensor

介绍

获取node的输出张量(tensor)

参数

node_t node

node句柄

int output_idx

Output 的下标(>=0)

返回值

tensor_t

tensor 的句柄,如果为NULL 表示失败

原型

tensor_t get_node_output_tensor(node_t node, int output_idx);


set_node_input_tensor

名称

set_node_input_tensor

介绍

设置node的输入张量(tensor)

参数

node_t node

node句柄

int input_idx

Input 的下标(>=0)

tensor_t tensor

tensor 的句柄

返回值

int

0  :表示设置成功
-1 :表示设置失败

原型

int set_node_input_tensor(node_t node, int input_idx, tensor_t tensor);


set_node_output_tensor

名称

set_node_output_tensor

介绍

设置node的输出张量(tensor)

参数

node_t node

node句柄

int output_idx

Input 的下标(>=0)

tensor_t tensor

tensor 的句柄

int tensor_type

tensor 类型

返回值

int

0  :表示成功
-1 :表示失败

原型

int set_node_output_tensor(node_t node, int output_idx, tensor_t tensor, int tensor_type);


get_node_output_number

名称

get_node_output_number

介绍

获取node的输出张量(tensor)的个数

参数

node_t node

node句柄

返回值

int

>0 :输出张量(tensor)的个数
-1  :表示失败

原型

int get_node_output_number(node_t node);


get_node_input_number

名称

get_node_input_number

介绍

获取node 中输入张量(tensor)的个数

参数

node_t node

node句柄

返回值

int

>0 :表示输入张量(tensor)的个数
-1  :表示失败

原型

int get_node_input_number(node_t node);


add_node_attr

名称

add_node_attr

介绍

添加node属性

参数

node_t node

node句柄

const char* attr_name

属性名称

const char* type_name

属性类型名称

int size

属性大小

返回值

int

0 :success
-1 :failure

原型

int add_node_attr(node_t node, const char *attr_name, const char* type_name, int size);


get_node_attr_int

名称

get_node_attr_int

介绍

获取node的int类型参数

参数

node_t node

node句柄

const char * attr_name

参数名称

int * attr_val

int参数返回值指针

返回值

int

0  :表示获取成功
-1 :表示失败

原型

int get_node_attr_int(node_t node, const char * attr_name, int * attr_val);


get_node_attr_float

名称

get_node_attr_float

介绍

获取node的float类型参数

参数

node_t node

node句柄

const char * attr_name

参数名称

float * attr_val

(O) float参数返回值的指针

返回值

int

0  :表示获取成功
-1 :表示失败

原型

int get_node_attr_float(node_t node, const char * attr_name, float * attr_val);


get_node_attr_pointer

名称

get_node_attr_pointer

介绍

获取node的指针类型参数

参数

node_t node

node句柄

const char * attr_name

参数名称

void * attr_val

(O) pointer 参数的指针

返回值

int

0  :表示获取成功
-1 :表示获取失败

原型

int get_node_attr_pointer(node_t node, const char * attr_name, void * attr_val);


get_node_attr_generic

名称

get_node_attr_generic

介绍

获取node的通用参数

参数

node_t node

node句柄

const char * attr_name

参数名称

const char * type_name

参数类型名称

void * buf

(O) 数据的buffer

int size

数据的buffer 的尺寸

返回值

int

0  :表示获取成功
-1 :表示获取失败

原型

int get_node_attr_generic(node_t node, const char * attr_name, const char* type_name, void * buf, int size);


set_node_attr_int

名称

set_node_attr_int

介绍

设置node的int类型参数

参数

node_t node

node句柄

const char * attr_name

参数名称

const int * attr_val

int参数返回值的指针

返回值

int

0  :表示获取成功
-1 :表示获取失败

原型

int set_node_attr_int(node_t node, const char * attr_name, const int *attr_val);


set_node_attr_float

名称

set_node_attr_float

介绍

设置node的float 类型参数

参数

node_t node

node句柄

const char * attr_name

参数名称

const float * attr_val

float型返回值的指针

返回值

int

0  :表示获取成功
-1 :表示获取失败

原型

int set_node_attr_float(node_t node, const char * attr_name, const float *attr_val);


set_node_attr_pointer

名称

set_node_attr_pointer

介绍

设置node的指针类型参数

参数

node_t node

node句柄

const char * attr_name

参数名称

const void * attr_val

指针类型参数的指针

返回值

int

0  :表示获取成功
-1 :表示获取失败

原型

int set_node_attr_pointer(node_t node, const char * attr_name, const void *attr_val);


set_node_attr_generic

名称

set_node_attr_generic

介绍

设置node的通用参数

参数

node_t node

node句柄

const char * attr_name

参数名称

const char* type_name

类型名称

const void * buf

数据的buffer

int size

数据的buffer 的尺寸

返回值

int

0  :表示获取成功
-1 :表示获取失败

原型

int set_node_attr_generic(node_t node, const char * attr_name, const char * type_name, const void * buf, int size);

1.6 kernel相关操作
set_custom_kernel

名称

set_custom_kernel

介绍

设置自定义kernel

参数

node_t node

node句柄

const char * dev_name

设备名称

struct custom_kernel_ops * kernel_ops

内核操作结构体指针

返回值

int

0  :表示设置成功
-1 :表示设置失败

原型

int set_custom_kernel(node_t node, const char * dev_name, struct custom_kernel_ops * kernel_ops);


remove_custom_kernel

名称

remove_custom_kernel

介绍

移除自定义kernel

参数

node_t node

node句柄

const char * dev_name

设备名称

返回值

int

0  :表示设置成功
-1 :表示设置失败

原型

int remove_custom_kernel(node_t node, const char * dev_name);

1.7 The tensor operation
create_graph_tensor

名称

create_graph_tensor

介绍

创建graph的tensor

参数

graph_t graph

graph的句柄

const char * tensor_name

tensor的名称

int data_type

数据类型

返回值

tensor_t

tensor 的句柄,如果为NULL 表示失败

原型

tensor_t  create_graph_tensor(graph_t graph, const char * tensor_name, int data_type);


get_graph_tensor

名称

get_graph_tensor

介绍

获取graph的tensor

参数

graph_t graph

graph 的句柄

const char * tensor_name

tensor的名称

返回值

tensor_t

tensor 的句柄,如果为NULL 表示失败

原型

tensor_t  get_graph_tensor(graph_t graph, const char * tensor_name);


get_tensor_name

名称

get_tensor_name

介绍

获取tensor的名称

参数

tensor_t tensor

tensor的句柄

返回值

const char *

tensor 名称,如果为NULL 表示失败

原型

const char * get_tensor_name(tensor_t tensor);


release_graph_tensor

名称

release_graph_tensor

介绍

释放graph的tensor

参数

tensor_t tensor

tensor的句柄

返回值


原型

void  release_graph_tensor(tensor_t tensor);


get_tensor_shape

名称

get_tensor_shape

介绍

获取tensor的shape

参数

tensor_t tensor

tensor的句柄

int dims[]

(O) shape的数组

int dim_number

数组的尺寸

返回值

int

0  :表示成功
-1 :表示失败

原型

int  get_tensor_shape(tensor_t tensor, int dims[], int dim_number);


set_tensor_shape

名称

set_tensor_shape

介绍

设置tensor的shape

参数

tensor_t tensor

tensor的句柄

const int dims[]

shape的数组

int dim_number

数组的尺寸

返回值

int

0  :表示设置成功
-1 :表示设置失败

原型

int set_tensor_shape(tensor_t tensor, const int dims[], int dim_number);


get_tensor_buffer_size

名称

get_tensor_buffer_size

介绍

获取tensor的buffer的大小

参数

tensor_t tensor

tensor的句柄

返回值

Int

>0 :buffer size
-1 :failure

原型

int get_tensor_buffer_size(tensor_t tensor);


get_tensor_buffer

名称

get_tensor_buffer

介绍

获取tensor的buffer

参数

tensor_t tensor

tensor的句柄

返回值

void *

Buffer 的指针,如果为NULL 表示失败

原型

void * get_tensor_buffer(tensor_t tensor);


set_tensor_buffer

名称

set_tensor_buffer

介绍

设置tensor的buffer

参数

tensor_t tensor

tensor的句柄

void * buffer

Buffer 的指针

int buffer_size

数据buffer 的尺寸

返回值

int

0  :表示成功
-1 :表示失败

原型

int set_tensor_buffer(tensor_t tensor, void * buffer, int buffer_size);


get_tensor_data

名称

get_tensor_data

介绍

获取tensor的data

参数

tensor_t tensor

tensor的句柄

void * output_data

(O) 输出buffer的指针

int data_size

(I)  输出数据buffer的大小

返回值

int

0  :表示成功
-1 :表示失败

原型

int get_tensor_data(tensor_t tensor, void * output_data, int data_size);


set_tensor_data

名称

set_tensor_data

介绍

设置tensor的数据

参数

tensor_t tensor

tensor的句柄

const void * input_data

input 数据buffer 的指针

int data_size

Input 数据的尺寸

返回值

int

0  :表示成功
-1 :表示失败

原型

int set_tensor_data(tensor_t tensor, const void * input_data, int data_size);


get_tensor_data_type

名称

get_tensor_data_type

介绍

获取tensor的数据类型

参数

tensor_t tensor

tensor的句柄

返回值

int

Tensor 类型。比如:
TENGINE_DT_FP32、
TENGINE_DT_FP16、
TENGINE_DT_IN8,等等
-1 :失败

原型

int get_tensor_data_type(tensor_t tensor);


set_tensor_data_type

名称

set_tensor_data_type

介绍

设置tensor的数据类型

参数

tensor_t tensor

tensor的句柄

 

int data_type

数据类型,比如 :
TENGINE_DT_FP32、
TENGINE_DT_FP16、
TENGINE_DT_IN8,等等

返回值

int

0:success
-1 :failure

原型

int set_tensor_data_type(tensor_t tensor, int data_type);


set_tensor_quant_param

名称

set_tensor_quant_param

介绍

设置tensor的量化参数

参数

tensor_t tensor

tensor的句柄

const float *scale

scale 指针

const int *zero_point

起点指针

int number

数据大小

返回值

int

0  :表示成功
-1 :表示失败

原型

int set_tensor_quant_param(tensor_t tensor, const float *scale, const int *zero_point, int number);


get_tensor_quant_param

名称

get_tensor_quant_param

介绍

获取tensor的量化参数

参数

tensor_t tensor

张量句柄

float *scale

scale 指针

int *zero_point

起点指针

int number

数据大小

返回值

int

0  :表示成功
-1 :表示失败

1.8 与graph 运行相关API
set_graph_attr

名称

set_graph_attr

介绍

设置graph的参数

参数

graph_t graph

graph 的句柄

const char * attr_name

要设置的参数名称

const void * buf

设置的参数的指针

int size

数据的尺寸

返回值

int

0  :表示成功
-1 :表示失败

原型

int set_graph_attr(graph_t graph, const char * attr_name, const void * buf, int size);


get_graph_attr

名称

get_graph_attr

介绍

获取graph的参数

参数

graph_t graph

graph 的句柄

const char * attr_name

要获取的参数名称

void * buf

要获取参数的指针

int size

数据的大小

返回值

int

0  :表示成功
-1 :表示失败

原型

int get_graph_attr(graph_t graph, const char * attr_name, void * buf, int size);


set_graph_gd_method

名称

set_graph_gd_method

介绍

设置图的梯度下降方法

参数

graph_t graph

graph的句柄

int gd_method

梯度下降函数

...

可变参数

返回值

int

0  :表示成功
-1 :表示失败

原型

int set_graph_gd_method(graph_t graph, int gd_method, ...);


prerun_graph

名称

prerun_graph

介绍

准备运行graph,并准备资源

参数

graph_t graph

graph 的句柄

返回值

int

0  :表示成功
-1 :表示失败

原型

int prerun_graph(graph_t graph);


run_graph

名称

run_graph

介绍

运行graph,执行推理,可以反复多次调用

参数

graph_t graph

graph 的句柄

int block

1:阻塞. 需要配置 GRAPH_DONE 函数
0:非阻塞:需要调用wait_graph()以获取结果

返回值

int

0  :表示成功
-1 :表示失败

原型

int run_graph(graph_t graph, int block);


wait_graph

名称

wait_graph

介绍

等待graph运行的结果

参数

graph_t graph

graph 的句柄

int try_wait

1:检查状态,然后返回
0:立即返回

返回值

int

1 :graph 运行完成
0 :未运行完成,需要再次尝试

原型

int wait_graph(graph_t graph, int try_wait);


postrun_graph

名称

postrun_graph

介绍

停止运行graph 并释放graph  占据的资源

参数

graph_t graph

graph 的句柄

返回值

int

0  :表示成功
-1 :表示失败

原型

int postrun_graph(graph_t  graph);


get_graph_exec_status

名称

get_graph_exec_status

介绍

获取graph的执行状态

参数

graph_t graph

graph 的句柄

返回值

int

graph的运行状态,见graph_exec_stat

原型

int get_graph_exec_status(graph_t graph);


set_graph_event_hook

名称

set_graph_event_hook

介绍

设置graph的事件回调函数

参数

graph_t graph

graph 的句柄

int event

事件类型

event_handler_t cb_func

事件回调函数指针

void * cb_arg

回调参数

返回值

int

0  :表示成功
-1 :表示失败

原型

int set_graph_event_hook(graph_t graph, int event, event_handler_t cb_func, void * cb_arg);

1.9 与设备相关操作
set_default_device

名称

set_default_device

介绍

设置默认运行设备

参数

const char * device

运行的设备名称

返回值

int

0  :表示成功
-1 :表示失败

原型

int set_default_device(const char * device);


set_graph_device

名称

set_graph_device

介绍

设置graph运行设备

参数

graph_t graph

graph 的句柄

const char * dev_name

设备的名称

返回值

int

0  :表示成功
-1 :表示失败

原型

int set_graph_device(graph_t graph, const char * dev_name);


set_node_device

名称

set_node_device

介绍

设置node 运行设备

参数

node_t node

node的句柄

const char * dev_name

设备的名称

返回值

int

0  :表示成功
-1 :表示失败

原型

int set_node_device(node_t node, const char * dev_name);


get_node_device

名称

get_node_device

介绍

获取node 运行设备

参数

node_t node

node的句柄

返回值

const char *

设备的名称: NULL意味着没有可利用的设备

原型

const char * get_node_device(node_t node);


do_node_dump

名称

do_node_dump

介绍

设置节点的dump功能

参数

node_t node

节点句柄

int action

(I) 1 使能,0 不使能

返回值

int

0  :表示成功
-1 :表示失败

原型

int do_node_dump(node_t node, int action);


get_node_dump_buffer

名称

get_node_dump_buffer

介绍

获取节点的dump数据缓存区。dump数据缓冲区的具体定义, 由产生dump的设备决定。

参数

node_t node

节点句柄

void ** buf

(O) 用于接收dump数据块指针的指针数组

int buf_size

(I)  指针数组大小

返回值

int

指针数组中有效指针的个数。如果等于buf_size,则存在有数据块没有返回的可能性

原型

int get_node_dump_buffer(node_t node, void **buf, int buf_size);


do_graph_perf_stat

名称

do_graph_perf_stat

介绍

启用或禁用性能统计

参数

graph_t graph

graph的句柄

int action

(I) 0 停止, 1 开始, 2 重新计数

返回值

int

0  :表示成功
-1 :表示失败

原型

int do_graph_perf_stat(graph_t graph, int action);


get_graph_perf_stat

名称

get_graph_perf_stat

介绍

获取性能统计信息

参数

graph_t graph

graph的句柄

perf_info ** buf

(O) 指向(输出性能信息的指针)的指针

int buf_size

(I) 数据的大小

返回值

int

>=0:表示数据记录的个数
-1   :表示失败

原型

int get_graph_perf_stat(graph_t graph, struct perf_info ** buf, int buf_size);


get_device_number

名称

get_device_number

介绍

获取设备编号

参数


返回值

int

设备编号

原型

int get_device_number(void);


get_device_name

名称

get_device_name

介绍

按index获取设备名称

参数

int idx

设备编号(>=0)

返回值

const char *

设备的名称: NULL意味着失败

原型

const char * get_device_name(int idx);


get_default_device

名称

get_default_device

介绍

获取默认使用设备名称

参数


返回值

const char *

设备的名称: NULL意味着失败

原型

const char * get_default_device(void);


create_device

名称

create_device

介绍

创建设备

参数

const char * driver_name

驱动名称

const char * dev_name

设备名称

返回值

int

0  :表示成功
-1 :表示失败

原型

int create_device(const char * driver_name, const char * dev_name);


destroy_device

名称

destroy_device

介绍

销毁设备

参数

const char * driver_name

驱动名称

const char * dev_name

设备名称

返回值

int

0  :表示成功
-1 :表示失败

原型

int destroy_device(const char * driver_name, const char * dev_name);


set_device_policy

名称

set_device_policy

介绍

设置设备策略

参数

const char * driver_name

驱动名称

device_policy policy

政策

返回值

int

0  :表示成功
-1 :表示失败

原型

int set_device_policy(const char * device_name, device_policy policy);


get_device_policy

名称

get_device_policy

介绍

获取设备策略

参数

const char * driver_name

驱动名称

返回值

int

>=0:策略值
-1 :表示失败

原型

int get_device_policy(const char * device_name);


get_device_attr

名称

get_device_attr

介绍

获取设备参数

参数

const char * driver_name

驱动名称

const char * attr_name

参数名称

void * val

(O) 参数返回结果指针

int size

参数返回值大小

返回值

int

0  :表示成功
-1 :表示失败

原型

int get_device_attr(const char * device_name, const char * attr_name, void * val, int size);


set_device_attr

名称

set_device_attr

介绍

设置设备参数

参数

const char * driver_name

驱动名称

const char * attr_name

参数名称

void * val

参数指针

int size

参数大小

返回值

int

0  :表示成功
-1 :表示失败

原型

int set_device_attr(const char * device_name, const char * attr_name, void * val, int size);

2.0 与context 相关部分
create_context

名称

create_context

介绍

创建context

参数

const char * context_name

context的名称

int empty_context

(I)
1:没有为该设备分配可用的设备
0:所有声明的设备都将添加到context中

返回值

context_t

Context 的句柄, 返回NULL表示创建失败

原型

context_t  create_context(const char * context_name, int empty_context);


destroy_context

名称

destroy_context

介绍

销毁context

参数

context_t context

context 的句柄

返回值


原型

void destroy_context(context_t context);


get_context_device_number

名称

get_context_device_number

介绍

获取context设备编号

参数

context_t context

context 的句柄

返回值

int

context使用的设备编号

原型

int get_context_device_number(context_t context);


get_context_device_name

名称

get_context_device_name

介绍

获取context设备名称

参数

context_t context

context 的句柄

int idx

索引

返回值

const char *

设备名称

原型

const char * get_context_device_name(context_t context, int idx);


add_context_device

名称

add_context_device

介绍

将设备添加到context中

参数

context_t context

context 的句柄

const char * dev_name

设备名称

返回值

int

0  :表示成功
-1 :表示失败

原型

int add_context_device(context_t context, const char * dev_name);


remove_context_device

名称

remove_context_device

介绍

将设备移除出context

参数

context_t context

context 的句柄

const char * dev_name

device名称

返回值

int

0  :表示成功
-1 :表示失败

原型

int remove_context_device(context_t context, const char * dev_name);


set_context_attr

名称

set_context_attr

介绍

设置context参数

参数

context_t context

context 的句柄

const char * attr_name

参数名称

const void * val

设置参数值的指针

int val_size

参数的值所占的大小

返回值

int

0  :表示成功
-1 :表示失败

原型

int set_context_attr(context_t  context, const char * attr_name, const void * val, int val_size);


get_context_attr

名称

get_context_attr

介绍

获取context属性

参数

context_t context

context 的句柄

const char * attr_name

参数名称

void * val

(O) 参数返回值的指针

int val_size

参数的值所占的大小

返回值

int

0  :表示成功
-1 :表示失败

原型

int get_context_attr(context_t  context, const char * attr_name, void * val, int val_size);

2.1 其他的API
get_tengine_errno

名称

get_tengine_errno

介绍

获取错误码

参数


返回值

int

tengine错误码。定义遵循glic

原型

int get_tengine_errno(void);


set_log_level

名称

set_log_level

介绍

设置log级别

参数

log_level level

上下文的句柄

返回值


原型

void set_log_level(enum log_level level);


set_log_output

名称

set_log_output

介绍

设置log输出函数

参数

log_print_t func

输出函数的指针

返回值


原型

void set_log_output(log_print_t func);


dump_graph

名称

dump_graph

介绍

dump图的结构

参数

graph_t graph

graph 的句柄

返回值

int

0  :表示成功
-1 :表示失败

原型

void dump_graph(graph_t graph);


load_tengine_plugin

名称

load_tengine_plugin

介绍

加载Tengine插件

参数

const char * plugin_name

插件的名称

const char * fname

文件的名称

const char * init_func_name

初始化函数的名称

返回值

int

0  :表示成功
-1 :表示失败

原型

int load_tengine_plugin(const char * plugin_name, const char * fname, const char * init_func_name);


unload_tengine_plugin

名称

unload_tengine_plugin

介绍

移除Tengine插件

参数

const char * plugin_name

插件的名称

const char * rel_func_name

release函数的指针

返回值

int

0  :表示成功
-1 :表示失败

原型

int unload_tengine_plugin(const char * plugin_name, const char * rel_func_name);


get_tengine_plugin_number

名称

get_tengine_plugin_number

介绍

获取Tengine插件的编号

参数


返回值

int

插件数量

原型

int get_tengine_plugin_number(void);


get_tengine_plugin_name

名称

get_tengine_plugin_name

介绍

获取Tengine插件的名称

参数

int idx

插件的编号(>=0)

返回值

const char *

插件名称

原型

const char * get_tengine_plugin_name(int idx);