aclrtSubscribeReport
产品支持情况
|
产品 |
是否支持 |
|---|---|
|
Atlas 350 加速卡 |
√ |
|
|
√ |
|
|
√ |
|
|
√ |
|
|
√ |
|
|
√ |
功能说明
注册处理Stream上回调函数的线程。
- 定义并实现回调函数,函数原型为:typedef void (*aclrtCallback)(void *userData);
- 新建线程,在线程函数内,调用aclrtProcessReport接口设置超时时间(需循环调用),等待回调任务执行;
- 调用aclrtSubscribeReport接口建立第2步中的线程和Stream的绑定关系,该Stream下发的回调函数将在绑定的线程中执行;
- 在指定Stream上执行异步任务(例如异步推理任务);
- 调用aclrtLaunchCallback接口在Stream的任务队列中下发回调任务,触发第2步中注册的线程处理回调函数,每调用一次aclrtLaunchCallback接口,就会触发一次回调函数的执行;
- 异步任务全部执行完成后,取消线程注册(aclrtUnSubscribeReport接口)。
函数原型
1
|
aclError aclrtSubscribeReport(uint64_t threadId, aclrtStream stream) |
参数说明
|
参数名 |
输入/输出 |
说明 |
|---|---|---|
|
threadId |
输入 |
指定线程的ID。 |
|
stream |
输入 |
指定Stream。类型定义请参见aclrtStream。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
支持多次调用aclrtSubscribeReport接口给多个Stream(仅支持同一Device内的多个Stream)注册同一个处理回调函数的线程;为确保Stream内的任务按调用顺序执行,不支持调用aclrtSubscribeReport接口给同一个Stream注册多个处理回调函数的线程;同一个进程内,在不同的Device上注册回调函数的线程时,不能指定同一个线程ID。
单进程内调用本接口注册的线程数量超过一定限制,则接口返回失败。考虑操作系统的线程切换性能开销,建议调用aclrtSubscribeReport接口注册的线程数量控制在32个以下(包括32)。各产品型号支持的线程数量最大值不同,如下表所示。
|
型号 |
线程数量最大值 |
|---|---|
|
Atlas 350 加速卡 |
1024 |