Skip to main content

函数:process_report

函数:subscribe_report

C函数原型aclError aclrtSubscribeReport(uint64_t threadId, aclrtStream stream)
Python函数ret = acl.rt.subscribe_report(thread_id, stream)
函数功能异步任务场景下,指定处理Stream上回调函数的线程。同步接口。 本接口需与以下其它接口配合使用,以便实现异步场景下的Callback功能:
1. 新建线程,在线程函数内,调用acl.rt.process_report接口设置超时时间(需循环调用),等待acl.rt.launch_callback接口下发的函数回调任务。
2. 调用acl.rt.subscribe_report接口建立第1步中的线程和Stream的绑定关系,该Stream下发的函数回调任务将在绑定的线程中执行。
3. 在指定Stream上执行异步任务(例如异步推理任务)。
4. 定义并实现回调函数,调用acl.rt.launch_callback接口在Stream的任务队列中下发函数回调任务,触发acl.rt.subscribe_report订阅的线程处理回调函数,每调用一次acl.rt.launch_callback接口,就会下发一个回调函数任务。
5. 异步任务全部执行完成后,调用acl.rt.unsubscribe_report接口取消线程订阅,解除线程和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/500 A2推理产品上,单进程内调用acl.rt.subscribe_report接口订阅的线程数量如果超过1024个,则接口返回失败。
- 考虑操作系统的线程切换性能开销,建议调用acl.rt.subscribe_report接口订阅的线程数量控制在32个以下(包括32)。
- 同一个进程内,在不同的Device上订阅回调函数的线程时,不能指定同一个线程ID。
参考资源- 接口调用流程,参见接口调用流程
- 接口调用示例,参见示例代码

父主题: 同步等待

函数:launch_callback

C函数原型aclError****aclrtLaunchCallback(aclrtCallback fn, void *userData, aclrtCallbackBlockType blockType, aclrtStream stream)
Python函数ret = acl.rt.launch_callback(fn, user_data_list, block_type, stream)
函数功能异步任务场景下,在Stream的任务队列中下发一个函数回调任务,系统内部在执行到该回调任务时,会在Stream上订阅的线程(通过acl.rt.subscribe_report接口注册的线程)中执行回调函数。异步接口。 本接口需与以下其它接口配合使用,以便实现异步场景下的Callback功能:
1. 新建线程,在线程函数内,调用acl.rt.process_report接口设置超时时间(需循环调用),等待acl.rt.launch_callback接口下发的函数回调任务。
2. 调用acl.rt.subscribe_report接口建立第1步中的线程和Stream的绑定关系,该Stream下发的函数回调任务将在绑定的线程中执行。
3. 在指定Stream上执行异步任务(例如异步推理任务)。
4. 定义并实现回调函数,调用acl.rt.launch_callback接口在Stream的任务队列中下发函数回调任务,触发acl.rt.subscribe_report订阅的线程处理回调函数,每调用一次acl.rt.launch_callback接口,就会下发一个回调函数任务。
5. 异步任务全部执行完成后,调用acl.rt.unsubscribe_report接口取消线程订阅,解除线程和Stream的绑定关系。
输入说明fn:function,表示Python侧的回调函数。 user_data_list:list,表示需要传递给回调函数的参数(目前传入的是list类型的数据)。 block_type:int,指定线程是否阻塞。
- 0:表示非阻塞。
- 1:表示阻塞。 stream:int,表示指定的Stream。
返回值说明ret:int,错误码。
- 返回0表示成功。
- 返回其它值表示失败。
约束说明
参考资源- 接口调用流程,参见接口调用流程
- 接口调用示例,参见示例代码

父主题: 同步等待

函数:process_report

C函数原型aclError aclrtProcessReport(int32_t timeout)
Python函数ret = acl.rt.process_report(timeout)
函数功能异步任务场景下,调用本接口设置超时时间,等待acl.rt.launch_callback接口下发的回调任务执行。同步接口。 本接口需与以下其它接口配合使用,以便实现异步场景下的Callback功能:
1. 新建线程,在线程函数内,调用acl.rt.process_report接口设置超时时间(需循环调用),等待acl.rt.launch_callback接口下发的函数回调任务。
2. 调用acl.rt.subscribe_report接口建立第1步中的线程和Stream的绑定关系,该Stream下发的函数回调任务将在绑定的线程中执行。
3. 在指定Stream上执行异步任务(例如异步推理任务)。
4. 定义并实现回调函数,调用acl.rt.launch_callback接口在Stream的任务队列中下发函数回调任务,触发acl.rt.subscribe_report订阅的线程处理回调函数,每调用一次acl.rt.launch_callback接口,就会下发一个回调函数任务。
5. 异步任务全部执行完成后,调用acl.rt.unsubscribe_report接口取消线程订阅,解除线程和Stream的绑定关系。
输入说明timeout:int,指定超时时间,单位为ms。取值范围为:
- -1:表示无限等待。
- 大于0(不包含0):表示等待的时间。
返回值说明ret:int,错误码。
- 返回0表示成功。
- 返回其它值表示失败。
约束说明需要在callback函数中调用该函数。
资源参考- 接口调用流程,参见接口调用流程
- 接口调用示例,参见示例代码

父主题: 同步等待

函数:unsubscribe_report

C函数原型aclError****aclrtUnSubscribeReport(uint64_t threadId, aclrtStream stream)
Python函数ret = acl.rt.unsubscribe_report(thread_id, stream)
函数功能异步任务场景下,取消线程订阅,Stream上的回调函数不再由指定线程处理。同步接口。 本接口需与以下其它接口配合使用,以便实现异步场景下的Callback功能:
1. 新建线程,在线程函数内,调用acl.rt.process_report接口设置超时时间(需循环调用),等待acl.rt.launch_callback接口下发的函数回调任务。
2. 调用acl.rt.subscribe_report接口建立第1步中的线程和Stream的绑定关系,该Stream下发的函数回调任务将在绑定的线程中执行。
3. 在指定Stream上执行异步任务(例如异步推理任务)。
4. 定义并实现回调函数,调用acl.rt.launch_callback接口在Stream的任务队列中下发函数回调任务,触发acl.rt.subscribe_report订阅的线程处理回调函数,每调用一次acl.rt.launch_callback接口,就会下发一个回调函数任务。
5. 异步任务全部执行完成后,调用acl.rt.unsubscribe_report接口取消线程订阅,解除线程和Stream的绑定关系。
输入说明thread_id:int,指定线程id。 stream:int,指定需要处理的Stream的指针地址。
返回值说明ret:int,错误码。
- 返回0表示成功。
- 返回其它值表示失败。
约束说明
参考资源- 接口调用流程,参见接口调用流程
- 接口调用示例,参见示例代码

父主题: 同步等待

函数:set_exception_info_callback

C函数原型aclError aclrtSetExceptionInfoCallback(aclrtExceptionInfoCallback callback)
Python函数ret = acl.rt.set_exception_info_callback(fn)
函数功能设置异常回调函数,同步接口。
输入说明fn:function,表示Python侧的回调函数,格式如下:
python<br>def exception_callback(exception_info)<br>"""<br>:exception_info: 表示异常信息aclrtExceptionInfo的指针地址<br>:return:<br>"""<br>
返回值说明ret:int,错误码。
- 返回0表示成功。
- 返回其它值表示失败。
约束说明- 您需要在执行异步任务之前,设置异常回调函数,当Device上的任务执行异常时,系统会向用户设置的异常回调函数中传入一个包含任务ID、Stream ID、线程ID、Device ID以及错误码的aclrtExceptionInfo的指针地址,并执行回调函数,用户可以再分别调用acl.rt.get_task_id_from_exception_infoacl.rt.get_stream_id_from_exception_infoacl.rt.get_thread_id_from_exception_infoacl.rt.get_device_id_from_exception_infoacl.rt.get_error_code_from_exception_info接口获取产生异常的任务ID、Stream ID、线程ID、Device ID以及错误码,便于定位问题。 使用场景****举例:例如,在调用acl.op.execute_v2接口前,调用acl.rt.set_exception_info_callback接口设置异常回调函数,当算子在Device执行异常时,系统会向用户设置的异常回调函数中传入一个包含任务ID、Stream ID、线程ID、Device ID以及错误码的aclrtExceptionInfo的指针地址,并执行回调函数。
- 如果多次设置异常回调函数,以最后一次设置为准。
- 如果想清空回调函数,可再次调用acl.rt.set_exception_info_callback接口进行重置(传入None或不传入参数)。
参考资源接口调用示例,参见AI Core异常信息获取

父主题: 同步等待

函数:get_task_id_from_exception_info

C函数原型uint32_t aclrtGetTaskIdFromExceptionInfo(const aclrtExceptionInfo *info)
Python函数task_id = acl.rt.get_task_id_from_exception_info(info)
函数功能获取异常信息中的任务ID,同步接口。该接口与acl.rt.set_exception_info_callback接口配合使用。
输入说明info:int,表示异常信息aclrtExceptionInfo的指针地址。 在执行任务之前调用acl.rt.set_exception_info_callback接口,系统会将产生异常的任务ID、Stream ID、线程ID、Device ID存放在aclExceptionInfo中。
返回值说明task_id:int,返回异常信息中的任务ID,返回值为“0xFFFFFFFF”(以十六进制为例)时表示异常信息为空。
约束说明
参考资源接口调用示例,参见AI Core异常信息获取

父主题: 同步等待

在线提单