Skip to main content

aclrtUnSubscribeReport

aclrtLaunchCallback

函数功能

异步任务场景下,在Stream的任务队列中下发一个回调任务,系统内部在执行到该回调任务时,会在Stream上注册的线程(通过aclrtSubscribeReport接口注册的线程)中执行回调函数。异步接口。

本接口需与以下其它接口配合使用,以便实现异步场景下的callback功能:

  1. 定义并实现回调函数,函数原型为:typedef void (*aclrtCallback)(void *userData);
  2. 新建线程,在线程函数内,调用aclrtProcessReport接口设置超时时间(需循环调用),等待回调任务执行;
  3. 调用aclrtSubscribeReport接口建立第2步中的线程和Stream的绑定关系,该Stream下发的回调函数将在绑定的线程中执行;
  4. 在指定Stream上执行异步任务(例如异步推理任务);
  5. 调用aclrtLaunchCallback接口在Stream的任务队列中下发回调任务,触发第2步中注册的线程处理回调函数,每调用一次aclrtLaunchCallback接口,就会触发一次回调函数的执行;
  6. 异步任务全部执行完成后,取消线程注册(aclrtUnSubscribeReport接口)。

函数原型

**aclError**aclrtLaunchCallback(aclrtCallback fn, void *userData, aclrtCallbackBlockType blockType, aclrtStream stream)

参数说明

参数名输入/输出说明
fn输入指定要增加的回调函数。 回调函数的函数原型为: typedef void (*aclrtCallback)(void *userData)
userData输入待传递给回调函数的用户数据的指针。
blockType输入指定回调函数调用是否阻塞Device运行。
text<br>typedef enum aclrtCallbackBlockType &#123;<br> ACL_CALLBACK_NO_BLOCK, //非阻塞<br> ACL_CALLBACK_BLOCK, //阻塞<br>&#125; aclrtCallbackBlockType;<br>
stream输入指定Stream。

返回值说明

返回0表示成功,返回其它值表示失败。

参考资源

接口调用流程及示例代码,参见异步模型推理

父主题: 同步等待

aclrtProcessReport

函数功能

异步任务场景下,调用本接口设置超时时间,等待aclrtLaunchCallback接口下发的回调任务执行。同步接口。

本接口需与以下其它接口配合使用,以便实现异步场景下的callback功能:

  1. 定义并实现回调函数,函数原型为:typedef void (*aclrtCallback)(void *userData);
  2. 新建线程,在线程函数内,调用aclrtProcessReport接口设置超时时间(需循环调用),等待回调任务执行;
  3. 调用aclrtSubscribeReport接口建立第2步中的线程和Stream的绑定关系,该Stream下发的回调函数将在绑定的线程中执行;
  4. 在指定Stream上执行异步任务(例如异步推理任务);
  5. 调用aclrtLaunchCallback接口在Stream的任务队列中下发回调任务,触发第2步中注册的线程处理回调函数,每调用一次aclrtLaunchCallback接口,就会触发一次回调函数的执行;
  6. 异步任务全部执行完成后,取消线程注册(aclrtUnSubscribeReport接口)。

函数原型

aclError aclrtProcessReport(int32_t timeout)

参数说明

参数名输入/输出说明
timeout输入超时时间,单位为ms。 取值范围:
- -1:表示无限等待
- 大于0(不包含0):表示等待的时间

返回值说明

返回0表示成功,返回其它值表示失败。

参考资源

接口调用流程及示例代码,参见异步模型推理

父主题: 同步等待

aclrtUnSubscribeReport

函数功能

异步任务场景下,取消线程注册,Stream上的回调函数不再由指定线程处理。同步接口。

本接口需与以下其它接口配合使用,以便实现异步场景下的callback功能:

  1. 定义并实现回调函数,函数原型为:typedef void (*aclrtCallback)(void *userData);
  2. 新建线程,在线程函数内,调用aclrtProcessReport接口设置超时时间(需循环调用),等待回调任务执行;
  3. 调用aclrtSubscribeReport接口建立第2步中的线程和Stream的绑定关系,该Stream下发的回调函数将在绑定的线程中执行;
  4. 在指定Stream上执行异步任务(例如异步推理任务);
  5. 调用aclrtLaunchCallback接口在Stream的任务队列中下发回调任务,触发第2步中注册的线程处理回调函数,每调用一次aclrtLaunchCallback接口,就会触发一次回调函数的执行;
  6. 异步任务全部执行完成后,取消线程注册(aclrtUnSubscribeReport接口)。

函数原型

**aclError**aclrtUnSubscribeReport(uint64_t threadId, aclrtStream stream)

参数说明

参数名输入/输出说明
threadId输入指定线程的ID。
stream输入指定Stream。

返回值说明

返回0表示成功,返回其它值表示失败。

参考资源

接口调用流程及示例代码,参见异步模型推理

父主题: 同步等待

aclrtSubscribeHostFunc

函数功能

模型中有CPU算子、且调用aclmdlExecuteV2或aclmdlExecuteAsyncV2接口执行模型推理时,调用本接口注册处理Stream上回调函数的线程(线程需由用户自行创建),再配合调用aclrtProcessHostFunc接口触发回调函数、在模型执行之后调用aclrtUnSubscribeHostFunc接口取消注册。同步接口。

Atlas 200/500 A2推理产品,不支持该接口。

约束说明

  • 支持多次调用aclrtSubscribeHostFunc接口给多个Stream(仅支持同一Device内的多个Stream)注册同一个处理回调函数的线程。
  • 为确保Stream内的任务按调用顺序执行,不支持调用aclrtSubscribeHostFunc接口给同一个Stream注册多个处理回调函数的线程。

函数原型

aclError aclrtSubscribeHostFunc(uint64_t hostFuncThreadId, aclrtStream exeStream)

参数说明

参数名输入/输出说明
hostFuncThreadId输入指定线程的ID。
exeStream输入指定Stream。

返回值说明

返回0表示成功,返回其它值表示失败。

父主题: 同步等待

aclrtProcessHostFunc

函数功能

等待指定时间后,触发回调处理,由aclrtSubscribeHostFunc接口指定的线程处理回调。同步接口。

线程需由用户提前自行创建,并自定义线程函数,在线程函数内调用本接口,等待被唤醒后通过系统内部进行算子计算。

Atlas 200/500 A2推理产品,不支持该接口。

函数原型

aclError aclrtProcessHostFunc(int32_t timeout)

参数说明

参数名输入/输出说明
timeout输入超时时间,单位为ms。 取值范围:
- -1:表示无限等待
- 大于0(不包含0):表示等待的时间

返回值说明

返回0表示成功,返回其它值表示失败。

父主题: 同步等待

aclrtUnSubscribeHostFunc

函数功能

aclrtSubscribeHostFunc接口配合使用,调用模型执行接口后,调用本接口取消线程注册,Stream上的回调函数不再由指定线程处理。同步接口。

Atlas 200/500 A2推理产品,不支持该接口。

函数原型

aclError aclrtUnSubscribeHostFunc(uint64_t hostFuncThreadId, aclrtStream exeStream)

参数说明

参数名输入/输出说明
hostFuncThreadId输入指定线程的ID。
exeStream输入指定Stream。

返回值说明

返回0表示成功,返回其它值表示失败。

父主题: 同步等待

在线提单