aclrtSynchronizeStreamWithTimeout
aclrtStreamWaitEvent
函数功能
阻塞指定Stream的运行,直到指定的Event完成,支持多个Stream等待同一个Event的场景。异步接口。
约束说明
-
aclrtRecordEvent接口与aclrtStreamWaitEvent接口配合使用时,主要用于多Stream之间同步的场景,在调用aclrtRecordEvent接口时,系统内部会申请Event资源,在调用aclrtStreamWaitEvent接口之后,请及时调用aclrtResetEvent接口释放Event资源。
接口调用顺序:aclrtCreateEvent-->aclrtRecordEvent-->aclrtStreamWaitEvent-->aclrtResetEvent
-
一个进程内,调用aclInit接口初始化AscendCL后,调用aclrtSetOpWaitTimeout接口设置超时时间,本进程内后续调用aclrtStreamWaitEvent接口下发的任务支持在所设置的超时时间内等待,若等待的时间超过所设置的超时时间,则AscendCL会返回报错。
由于aclrtStreamWaitEvent接口是异步接口,调用接口成功仅表示任务下发成功,不表示任务执行成功,因此若等待的时间超过所设置的超时时间,则在调用aclrtSynchronizeStream接口后,会返回报错。
函数原型
aclError aclrtStreamWaitEvent(aclrtStream stream, aclrtEvent event)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| stream | 输入 | 指定需要等待Event完成的Stream。 如果使用默认Stream,此处设置为NULL。 |
| event | 输入 | 需等待的Event。 |
返回值说明
返回0表示成功,返回其它值表示失败。
参考资源
- 接口调用流程,参见多Stream时的同步等待流程。
- 接口调用示例,参见Event的同步等待示例代码、Stream间任务的同步等待示例代码。
父主题: 同步等待
aclrtSynchronizeDevice
函数功能
阻塞应用程序运行,直到正在运算中的Device完成运算,同步接口。
函数原型
aclError aclrtSynchronizeDevice(void)
参数说明
无
返回值说明
返回0表示成功,返回其它值表示失败。
父主题: 同步等待
aclrtSynchronizeStream
函数功能
阻塞应用程序运行,直到指定Stream中的所有任务都完成,同步接口。
函数原型
aclError aclrtSynchronizeStream(aclrtStream stream)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| stream | 输入 | 指定需要完成所有任务的Stream。 |
返回值说明
返回0表示成功,返回其它值表示失败。
参考资源
接口调用示例,参见Stream内任务的同步等待示例代码。
父主题: 同步等待
aclrtSynchronizeStreamWithTimeout
函数功能
阻塞应用程序运行,直到指定Stream中的所有任务都完成,该接口是在aclrtSynchronizeStream接口基础上进行了增强,支持用户设置超时时间,当应用程序异常时可根据所设置的超时时间自行退出。同步接口。
函数原型
aclError aclrtSynchronizeStreamWithTimeout(****aclrtStream stream, int32_t timeout)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| stream | 输入 | 指定需要完成所有任务的Stream。 |
| timeout | 输入 | 接口的超时时间。 取值说明如下: - -1:表示永久等待,和接口aclrtSynchronizeStream功能一样; - >0:配置具体的超时时间,单位是毫秒。 |
返回值说明
返回0表示成功,返回其它值表示失败。
父主题: 同步等待
aclrtSubscribeReport
函数功能
异步任务场景下,注册处理Stream上回调函数的线程。同步接口。
本接口需与以下其它接口配合使用,以便实现异步场景下的callback功能:
- 定义并实现回调函数,函数原型为:typedef void (*aclrtCallback)(void *userData);
- 新建线程,在线程函数内,调用aclrtProcessReport接口设置超时时间(需循环调用),等待回调任务执行;
- 调用aclrtSubscribeReport接口建立第2步中的线程和Stream的绑定关系,该Stream下发的回调函数将在绑定的线程中执行;
- 在指定Stream上执行异步任务(例如异步推理任务);
- 调用aclrtLaunchCallback接口在Stream的任务队列中下发回调任务,触发第2步中注册的线程处理回调函数,每调用一次aclrtLaunchCallback接口,就会触发一次回调函数的执行;
- 异步任务全部执行完成后,取消线程注册(aclrtUnSubscribeReport接口)。
约束说明
- 支持多次调用aclrtSubscribeReport接口给多个Stream(仅支持同一Device内的多个Stream)注册同一个处理回调函数的线程;
- 为确保Stream内的任务按调用顺序执行,不支持调用aclrtSubscribeReport接口给同一个Stream注册多个处理回调函数的线程;
- Atlas 200/500 A2推理产品,单进程内调用aclrtSubscribeReport接口注册的线程数量如果超过1024个,则接口返回失败;
- 考虑操作系统的线程切换性能开销,建议调用aclrtSubscribeReport接口注册的线程数量控制在32个以下(包括32);
- 同一个进程内,在不同的Device上注册回调函数的线程时,不能指定同一个线程ID。
函数原型
aclError aclrtSubscribeReport(uint64_t threadId, aclrtStream stream)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| threadId | 输入 | 指定线程的ID。 |
| stream | 输入 | 指定Stream。 |
返回值说明
返回0表示成功,返回其它值表示失败。
参考资源
接口调用流程及示例代码,参见异步模型推理。
父主题: 同步等待
aclrtLaunchCallback
函数功能
异步任务场景下,在Stream的任务队列中下发一个回调任务,系统内部在执行到该回调任务时,会在Stream上注册的线程(通过aclrtSubscribeReport接口注册的线程)中执行回调函数。异步接口。
本接口需与以下其它接口配合使用,以便实现异步场景下的callback功能:
- 定义并实现回调函数,函数原型为:typedef void (*aclrtCallback)(void *userData);
- 新建线程,在线程函数内,调用aclrtProcessReport接口设置超时时间(需循环调用),等待回调任务执行;
- 调用aclrtSubscribeReport接口建立第2步中的线程和Stream的绑定关系,该Stream下发的回调函数将在绑定的线程中执行;
- 在指定Stream上执行异步任务(例如异步推理任务);
- 调用aclrtLaunchCallback接口在Stream的任务队列中下发回调任务,触发第2步中注册的线程处理回调函数,每调用一次aclrtLaunchCallback接口,就会触发一次回调函数的执行;
- 异步任务全部执行完成后,取消线程注册(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 {<br> ACL_CALLBACK_NO_BLOCK, //非阻塞<br> ACL_CALLBACK_BLOCK, //阻塞<br>} aclrtCallbackBlockType;<br> |
| stream | 输入 | 指定Stream。 |
返回值说明
返回0表示成功,返回其它值表示失败。
参考资源
接口调用流程及示例代码,参见异步模型推理。
父主题: 同步等待
aclrtProcessReport
函数功能
异步任务场景下,调用本接口设置超时时间,等待aclrtLaunchCallback接口下发的回调任务执行。同步接口。
本接口需与以下其它接口配合使用,以便实现异步场景下的callback功能:
- 定义并实现回调函数,函数原型为:typedef void (*aclrtCallback)(void *userData);
- 新建线程,在线程函数内,调用aclrtProcessReport接口设置超时时间(需循环调用),等待回调任务执行;
- 调用aclrtSubscribeReport接口建立第2步中的线程和Stream的绑定关系,该Stream下发的回调函数将在绑定的线程中执行;
- 在指定Stream上执行异步任务(例如异步推理任务);
- 调用aclrtLaunchCallback接口在Stream的任务队列中下发回调任务,触发第2步中注册的线程处理回调函数,每调用一次aclrtLaunchCallback接口,就会触发一次回调函数的执行;
- 异步任务全部执行完成后,取消线程注册(aclrtUnSubscribeReport接口)。
函数原型
aclError aclrtProcessReport(int32_t timeout)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| timeout | 输入 | 超时时间,单位为ms。 取值范围: - -1:表示无限等待 - 大于0(不包含0):表示等待的时间 |
返回值说明
返回0表示成功,返回其它值表示失败。
参考资源
接口调用流程及示例代码,参见异步模型推理。
父主题: 同步等待
在线提单