Rspress

# #模型推理

## #hbDNNInferV2

`int32_t hbDNNInferV2(hbUCPTaskHandle_t *taskHandle, hbDNNTensor *output, hbDNNTensor const *input, hbDNNHandle_t dnnHandle);`

根据输入参数创建同步/异步推理任务。对于异步任务，调用方可以跨函数、跨线程使用返回的 `taskHandle`。

- 参数
  - [out] `taskHandle` 任务句柄指针。
  - [in/out] `output` 推理任务的输出。
  - [in] `input` 推理任务的输入。
  - [in] `dnnHandle` DNN句柄指针。
- 返回值
  - 返回 `0` 则表示API成功执行，否则执行失败。

注解

1. 如果 `taskHandle` 置为 `nullptr`，则会自动创建同步任务，接口返回即推理完成，同步任务不支持多核模型推理。

2. 如果 `*taskHandle` 置为 `nullptr`，则会自动创建异步任务，接口返回的 `taskHandle` 可用于后续阻塞或回调。

3. 如果 `*taskHandle` 非空，并且指向之前已经创建但未提交的任务，则会自动创建新任务并添加进来，多核任务不支持task添加操作。

最多支持同时存在32个模型任务。

## #hbDNNGetTaskOutputTensorProperties

`int32_t hbDNNGetTaskOutputTensorProperties(hbDNNTensorProperties *properties, hbUCPTaskHandle_t taskHandle, int32_t subTaskIndex, int32_t outputIndex);`

获取 `taskHandle` 指向任务特定输出的动态属性信息。

- 参数
  - [out] `properties` 任务特定输出的属性信息。
  - [in] `taskHandle` 任务句柄指针。
  - [in] `subTaskIndex` 子任务的编号。
  - [in] `outputIndex` 子任务输出张量的编号。
- 返回值
  - 返回 `0` 则表示API成功执行，否则执行失败。

注解

1. 模型如果存在动态输出，需要通过该接口获取任务输出的动态属性信息，方便后续处理，非动态输出张量信息与 `hbDNNGetOutputTensorProperties` 获取到的相同。

2. 若 `taskHandle` 指向的任务有多个子任务，`subTaskIndex` 用于指定子任务编号。

3. 若模型含动态输出，推理时请采用非同步执行任务方式，因为同步执行的任务无法获取到taskHandle。

页面目录