跳转至

Tina Linux NPU VIPLite API 说明

NPU函数 API说明
vip_init() 描述:
初始化VIP 硬件和VIPLite 软件环境。详细地说,该API 重置和初始化
VIP 硬件处于就绪状态以接受命令。它还初始化软件环境,例如
如视频内存堆、电源管理和MMU 表。
在应用程序调用任何其他VIPLite API 以使用VIP 硬件之前调用此API。之后
应用程序完成后,调用vip_destroy()。
您可以多次调用vip_init()API。但是,vip_destroy()调用的数量应该
匹配vip_init()调用的数量。只有第一个vip_init()调用和最后一个vip-destroy
()执行调用。之间的其他vip_init()和vip_destroy()调用不会触发初始化或销
毁应用。
Syntax:
vip_status_e vip_init(
void
);
Parameters:
None
Returns:
vip_status_e
vip_destroy() 描述:
终止VIPLite 驱动程序,释放vip_init()请求的资源,并关闭vip hardware
在应用程序完成后调用此API。执行此API 后,在任何其他API 之前调用vip_init
()
VIPLite API。
您可以多次调用vip_init()API。但是,vip_destroy()调用的数量应该
匹配vip_init()调用的数量。只有第一个vip_init()调用和最后一个vip-destroy
()
执行调用。之间的其他vip_init()和vip_destroy()调用不会触发初始化或
销毁应用。
Syntax:
vip_status_e vip_destroy(
void
);
Parameters:
None
Returns:
vip_status_e
vip_create_network() 描述:
从给定的二进制文件创建网络。二进制是由生成的二进制大对象(BLOB)数据
图是一个二进制生成器。VIPLite 驱动程序可以解释它以创建网络对象。
Syntax:
vip_status_e vip_create_network(
void
*data,
vip_uint32_t
size_of_data,
vip_enum
type,
vip_network
*network
);
Parameters:
IN
*data
The pointer to the graph binary.
IN
size_of_data
The size in bytes of the graph binary.
IN
type
The network type.
The supported types are defined in the
vip_create_network_type_e enumeration.
OUT
*network
The pointer to receive the created network object if the network is
created successfully.
If the network creation fails, VIP_NULL is returned.
Returns:
vip_status_e
vip_destroy_network() 描述:
销毁网络。该API 释放分配给网络的所有相关资源。为指定网络执行此API 后,网
络的命令缓冲区将从指定的网络也被释放。然而,复制网络的系数为保留。
Syntax:
vip_status_e vip_destroy_network(
vip_network
network
);
Parameters:
IN
network
An opaque handle to the network to be destroyed.
Returns:
vip_status_e
vip_query_network() 描述:
查询网络的属性。
Syntax:
vip_status_e vip_query_network(
vip_network
network,
vip_enum
property,
void
*value
);
Parameters:
IN
network
An opaque handle to the network to be queried.
IN
property
The network property to be queried.
The following properties are available for query:
VIP_NETWORK_PROP_LAYER_COUNT
VIP_NETWORK_PROP_INPUT_COUNT
VIP_NETWORK_PROP_OUTPUT_COUNT
VIP_NETWORK_PROP_NETWORK_NAME
VIP_NETWORK_PROP_READ_REG_IRQ
VIP_NETWORK_PROP_ADDRESS_INFO
VIP_NETWORK_PROP_MEMORY_POOL_SIZE
VIP_NETWORK_PROP_PROFILING
For details, see Section 2.2.5, vip_network_property_e.
OUT
*value
A pointer in memory to store the returned property value.
The data type of the value varies according to the property queried.
Returns:
vip_set_network() 描述:
配置网络。在运行网络之前,需要通过调用vip_prepare_network().
Syntax:
vip_status_e vip_set_network(
vip_network
network,
vip_enum
property,
void
*value
);
Parameters:
IN
network
An opaque handle to the network to be configured.
IN
property
The network property to be configured.
The supported properties are:
VIP_NETWORK_PROP_CHANGE_PPU_PARAM
VIP_NETWORK_PROP_SET_MEMORY_POOL
VIP_NETWORK_PROP_SET_DEVICE_ID
VIP_NETWORK_PROP_SET_PRIORITY
For details, see Section 2.2.5, vip_network_property_e.
IN
*value
A pointer in memory to the property value.
Returns:
vip_status_e
vip_prepare_network() 描述:
验证网络的配置。该API 将内部存储器资源分配给网络,将所有操作的资源部署到
内部内存池,分配并修补命令内部内存池中资源的缓冲区。成功执行此API 后,网
络被认为准备在VIP 硬件上运行。在此API 之前,使用vip_set_network()API 配
置网络。如果调用此API,则更多在网络配置保持不变的情况下,驱动程序多次默
认忽略API 调用,除了第一个请求。
Syntax:
vip_status_e vip_prepare_network(
vip_network
network
);
Parameters:
IN
network
An opaque handle to the network to be prepared.
Returns:
vip_status_e
vip_query_input() 描述:
查询网络输入的属性。
Syntax:
vip_status_e vip_query_input(
vip_network
network,
vip_uint32_t
index,
vip_enum
property,
void
*value
);
Parameters:
IN
network
An opaque handle to the network to be queried.
IN
index
The index of the network input to be queried.
IN
property
The input buffer property to be queried.
The following properties are available for query:
VIP_BUFFER_PROP_QUANT_FORMAT
VIP_BUFFER_PROP_NUM_OF_DIMENSION
VIP_BUFFER_PROP_SIZES_OF_DIMENSION
VIP_BUFFER_PROP_DATA_FORMAT
VIP_BUFFER_PROP_FIXED_POINT_POS
VIP_BUFFER_PROP_TF_SCALE
VIP_BUFFER_PROP_TF_ZERO_POINT
VIP_BUFFER_PROP_NAME
VIP_BUFFER_PROP_DATA_TYPE
For details, see Section 2.2.6, vip_buffer_property_e.
OUT
*value
A pointer in memory to store the returned property value.
Returns:
vip_status_e
vip_query_output() 描述:
查询网络输出的属性.
Syntax:
vip_status_e vip_query_output(
vip_network
network,
vip_uint32_t
index,
vip_enum
property,
void
*value
);
Parameters:
IN
network
An opaque handle to the network to be queried.
IN
index
The index of the network output to be queried.
IN
property
The output buffer property to be queried.
The following properties are available for query:
VIP_BUFFER_PROP_QUANT_FORMAT
VIP_BUFFER_PROP_NUM_OF_DIMENSION
VIP_BUFFER_PROP_SIZES_OF_DIMENSION
VIP_BUFFER_PROP_DATA_FORMAT
VIP_BUFFER_PROP_FIXED_POINT_POS
VIP_BUFFER_PROP_TF_SCALE
VIP_BUFFER_PROP_TF_ZERO_POINT
VIP_BUFFER_PROP_NAME
VIP_BUFFER_PROP_DATA_TYPE
For details, see Section 2.2.6, vip_buffer_property_e.
OUT
*value
A pointer in memory to store the returned property value.
Returns:
vip_status_e
vip_set_input() 描述:
将输入缓冲区连接到网络。将输入缓冲区连接到网络时,VIPLite 驱动程序修补网
络命令缓冲区以填充输入缓冲区。您还可以调用此API 来更新输入缓冲区。更新将
从下一个网络生效处决在将输入缓冲区连接到网络之前, 请确保使用
vip_prepare_network()API。在使用vip_run_network()运行网络之前,请确保每
个有效的网络输入附加有缓冲器。否则, 返回
VIP_ERROR_MISSING_INPUT_OUTPUT 调用vip_run_network()API。
Syntax:
vip_status_e vip_set_input(
vip_network
network,
vip_uint32_t
index,
vip_buffer
input
);
Parameters:
IN
network
An opaque handle to the network to be configured.
IN
index
The index of the network input to be configured.
IN
input
An opaque handle to the buffer to be attached to the network
input.
Returns:
vip_status_e
vip_set_output() 描述:
将输出缓冲区连接到网络。将输出缓冲区连接到网络时,VIPLite 驱动程序修补网
络命令缓冲区以填充输出缓冲区。您还可以调用此API 来更新输出缓冲区。更新将
从下一个网络生效执行在将输出缓冲区连接到网络之前, 请确保使用
vip_prepare_network()API。在使用vip_run_network()运行网络之前,请确保已
连接网络输出具有缓冲器。否则,返回VIP_ERROR_MISSING_INPUT_OUTPUT
调用vip_run_network()API。
Syntax:
vip_status_e vip_set_output(
vip_network
network,
vip_uint32_t
index,
vip_buffer
output
);
Parameters:
IN
network
An opaque handle to the network to be configured.
IN
index
The index of the network output to be configured.
IN
output
An opaque handle to the buffer to be attached to the network output.
Returns:
vip_status_e
vip_run_network() 描述:
为网络提交执行任务。VIP 硬件执行最高优先级的任务在已提交的任务中。您可以
多次调用此API。
VIP 硬件完成执行后返回API 执行状态。如果你需要要在不等待执行完成的情况下
立即返回状态,请使用
vip_trigger_network()API。要设置网络优先级,请使用vip_set_network()API。
在运行网络之前,请确保使用vip_prepare_network()准备网络。在里面此外,通
过使用确保每个网络输入和网络输出都带有缓冲区
set_ input ( ) 和vip_ 。否则, VIP_ERROR_MISSING_INPUT_OUTPUT 为调用
vip_run_network()后返回。
要在一个组中运行多个网络,请使用vip_run_group()或vip_ trigger_group()。
Syntax:
vip_status_e vip_run_network(
vip_network
network
);
Parameters:
IN
network
An opaque handle to the network to be run.
Returns:
vip_status_e
vip_trigger_network() 描述:
为网络提交执行任务。VIP 硬件执行最高优先级的任务在已提交的任务中。您可以
多次调用此API。
API 执行状态立即返回, 无需等待硬件完成处决要获取状态, 请调用
vip_wait_network()进行同步。如果您需要状态要在VIP 硬件完成执行后返回,请
使用VIP_run_network()API。要设置网络优先级,请使用vip_set_network()API。
在运行网络之前,请确保使用vip_prepare_network()准备网络。在里面此外,通
过使用确保每个网络输入和网络输出都带有缓冲区set_ input()和vip_。否则,
VIP_ERROR_MISSING_INPUT_OUTPUT 为调用vip_trigger_network()后返回。
要在一个组中运行多个网络,请使用vip_run_group()或vip_ trigger_group()。
Syntax:
vip_status_e vip_trigger_network(
vip_network
network
);
Parameters:
IN
network
An opaque handle to the network to be executed.
Returns:
vip_status_e
vip_wait_network() 描述:
等待VIP 硬件完成指定网络的推断。
调用vip_trigger_network()后调用此API。
Syntax:
vip_status_e vip_wait_network(
vip_network
network
);
Parameters:
IN
network
An opaque handle to the network.
Returns:
vip_status_e
vip_finish_network() 描述:
释放准备好的网络的资源。调用此API 后,所有内部内存资源分配给网络的数据在
网络未被破坏的情况下被释放。如果不再需要网络,使用vip_destroy_network()
API 销毁它。仅当网络不再使用时,调用vip_finish_network()API 来完成准备好
的网络或者剩余的系统资源对于其他网络是有限的。如果仍然需要网络,请不要调
用此API,因为准备网络非常耗时。在为准备好的网络成功执行vip_finish_network
()调用后,重复调用包括静默忽略,直到使用vip_prepare_network()API 重新
准备网络。为了未准备好的网络,vip_finish_network()调用将被静默忽略。重要
提示:不要为正在运行的网络调用vip_finish_network()API。
Syntax:
vip_status_e vip_finish_network(
vip_network
network
);
Parameters:
IN
network
An opaque handle to the network to be finished.
Returns:
vip_status_e
vip_create_buffer() 描述:
创建指定大小的VIP 缓冲区,行、片或批之间没有填充。
Syntax:
vip_status_e vip_create_buffer(
vip_buffer_create_params_t
*create_param,
vip_uint32_t
size_of_param,
vip_buffer
*buffer
);
Parameters:
IN
*create_param
The pointer to a vip_buffer_create_params_t structure.
IN
size_of_param
The size of the data structure created by *create_param in bytes.
OUT
*buffer
The pointer to receive the created buffer object if the VIP buffer is
created successfully.
If the VIP buffer creation fails, VIP_NULL is returned.
Returns:
vip_status_e
If VIP_SUCCESS is returned, a VIP buffer is created successfully.
If VIP_ERROR_ is returned, no buffer is created.
vip_create_buffer_from_handle() 描述:
从句柄创建VIP 缓冲区,并将句柄关联的物理地址映射到缓冲区。
使用此API 之前,请启用VIP MMU。否则,API 返回VIP_ERROR_FAILURE。
Syntax:
vip_status_e vip_create_buffer_from_handle(
vip_buffer_create_params_t
*create_param,
vip_ptr
handle_logical,
vip_uint32_t
handle_size,
vip_buffer
*buffer
)
Parameters:
IN
*create_param
A pointer to a vip_buffer_create_params_t structure.
IN
handle_logical
The address of the handle from which the new VIP buffer is to be
created.
For a non-real-time Linux operating system, specify a logical
address. The address is allocated by the Linux malloc() function.
For a real-time operating system, specify a physical address.
Note: Address alignment to 64 bytes is recommended.
IN
handle_size
The size of the memory to which the handle points.
Note: Size alignment to 64 bytes is recommended.
OUT
*buffer
The pointer to receive the created buffer object if the VIP buffer is
created successfully.
If the VIP buffer creation fails, VIP_NULL is returned.
Returns:
vip_status_e
If VIP_SUCCESS is returned, a VIP buffer is created successfully.
If VIP_ERROR_ is returned, no buffer is created.
vip_destroy_buffer() 描述:
销毁VIP 缓冲区并释放缓冲区使用的内存。
Syntax:
vip_status_e vip_destroy_buffer(
vip_buffer
buffer
);
Parameters:
IN
buffer
The opaque handle of the buffer to be destroyed.
Returns:
vip_status_e
vip_map_buffer() 描述:
创建指向指定VIP 缓冲区的指针。应用程序可以使用指针访问缓冲区。
Syntax:
void *vip_map_buffer(
vip_buffer
buffer
);
Parameters:
IN
buffer
The opaque handle of the buffer for which a pointer is to be
created.
Returns:
A pointer to the buffer that applications can use to read or write the buffer data
vip_unmap_buffer() 描述:
释放应用程序用于访问VIP 缓冲区的指针。
Syntax:
vip_status_e *vip_unmap_buffer(
vip_buffer
buffer
);
Parameters:
IN
buffer
The opaque handle of the buffer whose pointer is to be released.
Returns:
vip_status_e
vip_get_buffer_size() 描述:
检索缓冲区的大小(以字节为单位)。
Syntax:
vip_uint32_t vip_get_buffer_size(
vip_buffer
buffer
);
Parameters:
IN
buffer
The opaque handle of the buffer whose size is requested.
Returns:
vip_uint32_t
The buffer size in bytes.
vip_flush_buffer() 描述:
刷新或使从VIP_create_buffer ( ) 创建的VIP 缓冲区缓存无效, 或
vip_create_buffer_from_handle()API。
在以下情况下调用此API:如果正在使用的VIP 缓冲区包含CPU 缓存,则在调用
vip_run_network()。
从vip_wait_network()或vip_ run_networks()返回后,使用此API 使缓冲区缓存。
Syntax:
vip_status_e vip_flush_buffer(
vip_buffer
buffer,
vip_buffer_operation_type_e
type
);
Parameters:
IN
buffer
The opaque handle of the buffer whose cache is to be flushed or
invalidated.
IN
type
The buffer cache operation to be executed on the buffer.
The buffer catch operations are defined in the
vip_buffer_operation_type_e enumeration.
Returns:
vip_status_e
Running a Single
Network
运行网络的过程详细如下:
1. 调用vip_init() 初始化VIPLite 引擎,包括软件和硬件。
该API 重置硬件以使其准备好使用,并初始化软件资源。它设置了视频.
内存和其他硬件资源,如中断和寄存器内存,供VIPLite 使用。
2.从文件或存储器读取网络二进制图(NBG)数据。
3.使用vip_Create_network()API 创建网络。
该API 对NBG 数据执行健全性检查。因此,建议您检查返回的用于验证网络是否
已成功生成的错误代码。
4.使用vip_Query_input()和vip_Query_output()查询输入和输出属性。
建议执行此步骤以避免输入或输出属性不匹配导致的错误。
5. 使用以下API 创建输入和输出缓冲区: vip_Create_buffer ( ) ,
vip_create_buffer_from_handle ( ) 、vip_create_buffer_from_physical ( ) 和
vip_create_buffer_from_fd()。
6.(可选)使用vip_set_network()配置网络属性。
7.使用vip_Prepare_network()API 准备网络命令缓冲区。
建议您检查此API 返回的错误代码。这是因为API 可能会失败,因为由于资源限制,
例如内存不足。
8.借助vip_map_buffer()API 从输入和输出缓冲区加载数据。
9.使用vip_set_input()和vip_ set_output()将输入和输出缓冲区连接到网络。
10.使用vip_Run_network()或vip_trigger_networks()API 运行网络。
如果使用vip_run_network(),则在vip 硬件完成处决如果使用vip_trigger_network
(),它将立即返回,而无需等待vip 硬件完成执行。如果CPU 工作负载很重,这
将优化CPU 使用。在这种情况下,当CPU 需要API 结果时,调用vip_wait_network
()进行同步。
注意:可以创建多个网络。但是,一次只能运行一个网络。应用程序运行
根据使用vip_set_network()API 配置的网络优先级,一个接一个地访问网络。
11.使用vip_Flush_buffer()将网络执行结果从CPU 缓存刷新到输出缓冲区。
12.在vip_map_buffer()的帮助下,检查输出缓冲区的网络执行结果。
13.(可选)重复步骤6 至12 以多次运行网络。
14.调用vip_finish_network()以释放分配给网络的内部内存。
15.调用vip_destroy_network()释放分配给网络的所有其他资源。
16.调用vip_destroy_buffer()释放分配给输入和输出缓冲区的内存。
17.调用vip_destroy()释放VIPLite 资源并退出。