函数:subscribe_report
产品支持情况
产品 |
是否支持 |
---|---|
|
√ |
|
√ |
|
√ |
|
√ |
|
√ |
|
√ |
功能说明
异步任务场景下,指定处理Stream上回调函数的线程。
本接口需与以下其它接口配合使用,以便实现异步场景下的Callback功能:
- 新建线程,在线程函数内,调用acl.rt.process_report接口设置超时时间(需循环调用),等待acl.rt.launch_callback接口下发的函数回调任务。
- 调用acl.rt.subscribe_report接口建立第1步中的线程和Stream的绑定关系,该Stream下发的函数回调任务将在绑定的线程中执行。
- 在指定Stream上执行异步任务(例如异步推理任务)。
- 定义并实现回调函数,调用acl.rt.launch_callback接口在Stream的任务队列中下发函数回调任务,触发acl.rt.subscribe_report订阅的线程处理回调函数,每调用一次acl.rt.launch_callback接口,就会下发一个回调函数任务。
- 异步任务全部执行完成后,调用acl.rt.unsubscribe_report接口取消线程订阅,解除线程和Stream的绑定关系。
函数原型
- C函数原型
1
aclError aclrtSubscribeReport(uint64_t threadId, aclrtStream stream)
- python函数
1
ret = acl.rt.subscribe_report(thread_id, stream)
参数说明
参数名 |
说明 |
---|---|
thread_id |
int,指定线程id。 |
stream |
int,指定需要处理的Stream的指针地址。 |
返回值说明
返回值 |
说明 |
---|---|
ret |
int,错误码,返回0表示成功,返回其它值表示失败。 |
约束说明
-
支持多次调用acl.rt.subscribe_report接口给多个Stream(仅支持同一Device内的多个Stream)订阅同一个处理回调函数的线程。
-
为确保Stream内的任务按调用顺序执行,不支持调用acl.rt.subscribe_report接口给同一个Stream订阅多个处理回调函数的线程。
- 在
Atlas 200/300/500 推理产品 上,单进程内调用acl.rt.subscribe_report接口订阅的线程数量如果超过128个,则接口返回失败。 - 在
Atlas 训练系列产品 上,单进程内调用acl.rt.subscribe_report接口订阅的线程数量如果超过1024个,则接口返回失败。 - 在
Atlas A2 训练系列产品 /Atlas 800I A2 推理产品 /A200I A2 Box 异构组件上,单进程内调用acl.rt.subscribe_report接口订阅的线程数量如果超过1024个,则接口返回失败。 - 在
Atlas A3 训练系列产品 /Atlas A3 推理系列产品 上,单进程内调用aclrtSubscribeReport接口注册的线程数量如果超过1024个,则接口返回失败。 - 在
Atlas 推理系列产品 上,单进程内调用acl.rt.subscribe_report接口订阅的线程数量如果超过1024个,则接口返回失败。 - 在
Atlas 200I/500 A2 推理产品 上,单进程内调用acl.rt.subscribe_report接口订阅的线程数量如果超过1024个,则接口返回失败。 -
考虑操作系统的线程切换性能开销,建议调用acl.rt.subscribe_report接口订阅的线程数量控制在32个以下(包括32)。
父主题: 执行控制