函数:synchronize_stream
函数:stream_wait_event
| C函数原型 | aclError aclrtStreamWaitEvent(aclrtStream stream, aclrtEvent event) |
|---|---|
| Python函数 | ret = acl.rt.stream_wait_event(stream, event) |
| 函数功能 | 阻塞指定Stream的运行,直到指定的Event完成,支持多个Stream等待同一个Event的场景。异步接口。 |
| 输入说明 | stream:int,指定需要等待Event完成的Stream的指针地址。如果使用默认Stream,此处设置为0。 event:int,需等待的Event的指针地址。 |
| 返回值说明 | ret:int,错误码。 - 返回0表示成功。 - 返回其它值表示失败。 |
| 约束说明 | - acl.rt.record_event接口与acl.rt.stream_wait_event接口配合使用时,主要用于多Stream之间同步的场景,在调用acl.rt.record_event接口时,系统内部会申请Event资源,在调用acl.rt.stream_wait_event接口之后,请及时调用acl.rt.reset_event接口释放Event资源。 接口调用顺序:acl.rt.create_event-->acl.rt.record_event-->acl.rt.stream_wait_event-->acl.rt.reset_event - 一个进程内,调用acl.init接口初始化pyACL后,调用acl.rt.set_op_wait_timeout接口设置超时时间,本进程内后续调用acl.rt.stream_wait_event接口下发的任务支持在所设置的超时时间内等待,若等待的时间超过所设置的超时时间,则pyACL会返回报错。 由于acl.rt.stream_wait_event接口是异步接口,调用接口成功仅表示任务下发成功,不表示任务执行成功,因此若等待的时间超过所设置的超时时间,则在调用acl.rt.synchronize_stream接口后,会返回报错。 |
| 参考资源 | - 接口调用流程,参见多Stream接口调用流程。 - 接口调用示例,参见关于Event的同步等待、关于Stream间任务的同步等待。 |
父主题: 同步等待
函数:synchronize_device
| C函数原型 | aclError aclrtSynchronizeDevice(void) |
|---|---|
| Python函数 | ret = acl.rt.synchronize_device() |
| 函数功能 | 阻塞应用程序运行,直到正在运算中的Device完成运算,同步接口。 |
| 输入说明 | 无 |
| 返回值说明 | ret:int,错误码。 - 返回0表示成功。 - 返回其它值表示失败。 |
| 约束说明 | 无 |
| 参考资源 | - 接口调用流程,参见多Stream接口调用流程。 - 接口调用示例,参见关于Event的同步等待。 |
父主题: 同步等待
函数:synchronize_stream
| C函数原型 | aclError aclrtSynchronizeStream(aclrtStream stream) |
|---|---|
| Python函数 | ret = acl.rt.synchronize_stream(stream) |
| 函数功能 | 阻塞应用程序运行,直到指定Stream中的所有任务都完成,同步接口。 |
| 输入说明 | stream:int,指定需要完成所有任务的Stream对象的指针地址。 |
| 返回值说明 | ret:int,错误码。 - 返回0表示成功。 - 返回其它值表示失败。 |
| 约束说明 | 无 |
| 参考资源 | 接口调用示例,参见关于Stream间任务的同步等待。 |
父主题: 同步等待
函数:synchronize_stream_with_timeout
| C函数原型 | aclError aclrtSynchronizeStreamWithTimeout(aclrtStream stream, int32_t timeout) |
|---|---|
| Python函数 | ret = acl.rt.synchronize_stream_with_timeout(stream, timeout) |
| 函数功能 | 阻塞应用程序运行,直到指定Stream中的所有任务都完成,该接口是在acl.rt.synchronize_stream接口基础上进行了增强,支持用户设置超时时间,当应用程序异常时可根据所设置的超时时间自行退出。同步接口。 |
| 输入说明 | stream:int,指定需要完成所有任务的Stream的指针地址。 timeout:int,接口的超时时间。取值说明如下: - -1:表示永久等待,和接口acl.rt.synchronize_stream功能一样。 - >0:配置具体的超时时间,单位是毫秒。 |
| 返回值说明 | ret:int,错误码。 - 返回0表示成功。 - 返回其它值表示失败。 |
| 约束说明 | 无 |
父主题: 同步等待
函数: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表示成功。 - 返回其它值表示失败。 |
| 约束说明 | 无 |
| 参考资源 | - 接口调用流程,参见接口调用流程。 - 接口调用示例,参见示例代码。 |
父主题: 同步等待
在线提单