CANN/runtime Event管理API
7. Event管理
【免费下载链接】runtime 本项目提供CANN运行时组件和维测功能组件。 项目地址: https://gitcode.com/cann/runtime
本章节描述 CANN Runtime 的 Event 管理接口,用于事件的创建、记录、同步、计时及 IPC 跨进程共享。
aclError aclrtCreateEvent(aclrtEvent *event):创建Event,创建出来的Event可用于统计两个Event之间的耗时、多Stream之间的任务同步等场景。aclError aclrtCreateEventWithFlag(aclrtEvent *event, uint32_t flag):创建带flag的Event,不同flag的Event用于不同的功能。支持创建Event时携带多个flag(按位进行或操作),从而同时使能对应flag的功能。aclError aclrtCreateEventExWithFlag(aclrtEvent *event, uint32_t flag):创建带flag的Event,不同flag的Event用于不同的功能。aclError aclrtDestroyEvent(aclrtEvent event):销毁Event,支持在Event未完成前调用本接口销毁Event。此时,本接口不会阻塞线程等Event完成,Event相关资源会在Event完成时被自动释放。aclError aclrtRecordEvent(aclrtEvent event, aclrtStream stream):在指定Stream中记录一个Event。异步接口。aclError aclrtRecordEventWithFlag(aclrtEvent event, aclrtStream stream, uint32_t flag):在指定的Stream中记录一个Event。异步接口。该接口是在aclrtRecordEvent接口基础上进行了增强,支持配置flag,不同的flag用于不同的使用场景。aclError aclrtResetEvent(aclrtEvent event, aclrtStream stream):复位Event,恢复Event初始状态,便于Event对象重复使用。异步接口。aclError aclrtQueryEvent(aclrtEvent event, aclrtEventStatus *status):查询与本接口在同一线程中的aclrtRecordEvent接口所记录的Event是否执行完成。aclError aclrtQueryEventStatus(aclrtEvent event, aclrtEventRecordedStatus *status):查询该Event捕获的所有任务的执行状态。具体见aclrtRecordEvent接口参考Event捕获的细节。aclError aclrtQueryEventWaitStatus(aclrtEvent event, aclrtEventWaitStatus *status):调用aclrtStreamWaitEvent接口后查询该Event对应的等待任务是否都执行完成。aclError aclrtSynchronizeEvent(aclrtEvent event):阻塞当前线程运行直到Event捕获的所有任务都执行完成。aclError aclrtSynchronizeEventWithTimeout(aclrtEvent event, int32_t timeout):阻塞当前线程运行直到Event捕获的所有任务都执行完成(具体见aclrtRecordEvent接口参考Event捕获的细节),该接口是在接口aclrtSynchronizeEvent基础上进行了增强,支持用户设置永久等待、或配置具体的超时时间,若配置具体的超时时间,则当应用程序异常时可根据所设置的超时时间自行退出。aclError aclrtEventElapsedTime(float *ms, aclrtEvent startEvent, aclrtEvent endEvent):统计两个Event之间的耗时。aclError aclrtStreamWaitEvent(aclrtStream stream, aclrtEvent event):阻塞指定Stream的运行,直到指定的Event完成,支持多个Stream等待同一个Event的场景。异步接口。aclError aclrtStreamWaitEventWithFlag(aclrtStream stream, aclrtEvent event, uint32_t timeout, uint32_t flag):阻塞指定Stream的运行,直到指定的Event完成。异步接口。该接口是在接口aclrtStreamWaitEvent、aclrtStreamWaitEventWithTimeout基础上进行了增强,支持用户配置具体的超时时间,同时还可以配置flag,不同的flag用于不同的使用场景。aclError aclrtStreamWaitEventWithTimeout(aclrtStream stream, aclrtEvent event, int32_t timeout):阻塞指定Stream的运行,直到指定的Event完成或等待超时,支持多个Stream等待同一个Event的场景。异步接口。aclError aclrtSetOpWaitTimeout(uint32_t timeout):本接口用于设置等待Event完成的超时时间。aclError aclrtEventGetTimestamp(aclrtEvent event, uint64_t *timestamp):获取Event的执行结束时间点(表示从AI处理器系统启动以来的时间)。aclError aclrtGetEventId(aclrtEvent event, uint32_t *eventId):获取指定Event的ID。aclError aclrtGetEventAvailNum(uint32_t *eventCount):查询当前Device上可用的Event数量。aclError aclrtIpcGetEventHandle(aclrtEvent event, aclrtIpcEventHandle *handle):将本进程中的指定Event设置为IPC(Inter-Process Communication) Event,并返回其handle(即Event句柄),用于在跨进程场景下实现任务同步,支持同一个Device内的多个进程以及跨Device的多个进程。aclError aclrtIpcOpenEventHandle(aclrtIpcEventHandle handle, aclrtEvent *event):在本进程中获取handle的信息,并返回本进程可以使用的Event指针。
aclrtCreateEvent
aclError aclrtCreateEvent(aclrtEvent *event)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
创建Event,创建出来的Event可用于统计两个Event之间的耗时、多Stream之间的任务同步等场景。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| event | 输出 | Event的指针。类型定义请参见aclrtEvent。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
-
采用本API创建的Event不支持在aclrtResetEvent接口中使用,否则会导致未定义的行为。
-
调用本接口创建Event时,并不会实际申请Event资源,只有在调用aclrtRecordEvent接口时,才会进行资源申请,因此在调用aclrtRecordEvent时,可能会出现线程阻塞,等待Event资源的释放。
-
不同型号的硬件支持的Event数量不同。
-
对于以下产品型号,单个Device支持的Event最大数为65536:
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品
Atlas 200I/500 A2 推理产品
- 对于Atlas 推理系列产品,单个Device支持的Event最大数为1023。
- 对于Atlas 训练系列产品,单个Device支持的Event最大数为65535。
-
aclrtCreateEventWithFlag
aclError aclrtCreateEventWithFlag(aclrtEvent *event, uint32_t flag)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
创建带flag的Event,不同flag的Event用于不同的功能。支持创建Event时携带多个flag(按位进行或操作),从而同时使能对应flag的功能。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| event | 输出 | Event的指针。类型定义请参见aclrtEvent。 |
| flag | 输入 | Event指针的flag。 当前支持将flag设置为如下宏: - ACL_EVENT_TIME_LINE:使能该bit表示创建的Event需要记录时间戳信息。注意:使能时间戳功能会影响Event相关接口的性能。 - ACL_EVENT_SYNC:使能该bit表示创建的Event支持多Stream间的同步。 - ACL_EVENT_CAPTURE_STREAM_PROGRESS:使能该bit表示创建的Event用于跟踪stream的任务执行进度。 - ACL_EVENT_EXTERNAL:使能该bit表示创建的Event用于任务捕获场景下的任务更新功能,相关说明请参见aclmdlRICaptureBegin。注意:该flag不支持与其他flag进行位或操作。 - ACL_EVENT_DEVICE_USE_ONLY:使能该bit表示创建的Event仅在Device上调用。 宏的定义如下: #define ACL_EVENT_TIME_LINE 0x00000008U #define ACL_EVENT_SYNC 0x00000001U #define ACL_EVENT_CAPTURE_STREAM_PROGRESS 0x00000002U #define ACL_EVENT_EXTERNAL 0x00000020U #define ACL_EVENT_DEVICE_USE_ONLY 0x00000010U |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
-
各产品型号对ACL_EVENT_DEVICE_USE_ONLY的支持情况不同:
对于Ascend 950PR/Ascend 950DT、Atlas A3 训练系列产品/Atlas A3 推理系列产品、Atlas A2 训练系列产品/Atlas A2 推理系列产品,支持该flag。
对于Atlas 200I/500 A2 推理产品,不支持该flag。
对于Atlas 推理系列产品,支持该flag。
-
若flag参数值不包含ACL_EVENT_SYNC宏,则不支持在以下API中使用本接口创建的Event:aclrtResetEvent、aclrtStreamWaitEvent、aclrtQueryEventWaitStatus。若flag参数值包含ACL_EVENT_SYNC宏或者flag设置为ACL_EVENT_EXTERNAL时,则创建出来的Event数量受限。 不同型号的硬件支持的Event数量不同。
-
对于以下产品型号,单个Device支持的Event最大数为65536:
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品
Atlas 200I/500 A2 推理产品
- 对于Atlas 推理系列产品,单个Device支持的Event最大数为1023。
- 对于Atlas 训练系列产品,单个Device支持的Event最大数为65535。
-
aclrtCreateEventExWithFlag
aclError aclrtCreateEventExWithFlag(aclrtEvent *event, uint32_t flag)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
创建带flag的Event,不同flag的Event用于不同的功能。支持创建Event时携带多个flag(按位进行或操作),从而同时使能对应flag的功能。创建Event时,Event资源不受硬件限制。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| event | 输出 | Event的指针。类型定义请参见aclrtEvent。 |
| flag | 输入 | Event指针的flag。 flag为bitmap,支持将flag设置为单个宏、或者对多个宏进行或操作。 当前支持将flag设置为如下宏: - ACL_EVENT_TIME_LINE:使能该bit表示创建的Event需要记录时间戳信息。注意:使能时间戳功能会影响Event相关接口的性能。 - ACL_EVENT_SYNC:使能该bit表示创建的Event支持多Stream间的同步。 - ACL_EVENT_CAPTURE_STREAM_PROGRESS:使能该bit表示创建的Event用于跟踪stream的任务执行进度。 - ACL_EVENT_IPC:使能该bit表示创建的Event用于进程间通信,详细说明请参见aclrtIpcGetEventHandle。注意:该flag不支持与其他flag进行位或操作。Ascend 950DT不支持使用本flag创建Event。本flag创建出来的Event不支持在以下接口或场景中使用:aclrtResetEvent、aclrtQueryEvent、aclrtQueryEventWaitStatus、aclrtEventElapsedTime、aclrtEventGetTimestamp、aclrtGetEventId、模型捕获场景(参见aclmdlRICaptureBegin中的说明),否则返回报错。 宏的定义如下: #define ACL_EVENT_TIME_LINE 0x00000008U #define ACL_EVENT_SYNC 0x00000001U #define ACL_EVENT_CAPTURE_STREAM_PROGRESS 0x00000002U #define ACL_EVENT_IPC 0x00000040U |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
-
采用本API创建的Event,不支持在以下接口中使用:aclrtResetEvent、aclrtQueryEvent、aclrtQueryEventWaitStatus,否则返回报错。
-
若flag参数值不包含ACL_EVENT_SYNC宏,则不支持在aclrtStreamWaitEvent接口中使用本接口创建的Event。若flag参数值包含ACL_EVENT_SYNC宏,并不会实际申请Event资源,只有在调用aclrtRecordEvent接口时,才会进行资源申请,因此在调用aclrtRecordEvent时,可能会出现线程阻塞,等待Event资源的释放。
-
不同型号的硬件支持的Event数量不同。
-
对于以下产品型号,单个Device支持的Event最大数为65536:
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品
Atlas 200I/500 A2 推理产品
- 对于Atlas 推理系列产品,单个Device支持的Event最大数为1023。
- 对于Atlas 训练系列产品,单个Device支持的Event最大数为65535。
-
aclrtDestroyEvent
aclError aclrtDestroyEvent(aclrtEvent event)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
销毁Event,支持在Event未完成前调用本接口销毁Event。此时,本接口不会阻塞线程等Event完成,Event相关资源会在Event完成时被自动释放。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| event | 输入 | 待销毁的Event。类型定义请参见aclrtEvent。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
在调用aclrtDestroyEvent接口销毁指定Event时,需确保其它接口没有正在使用该Event。
aclrtRecordEvent
aclError aclrtRecordEvent(aclrtEvent event, aclrtStream stream)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
在指定Stream中记录一个Event。异步接口。
aclrtRecordEvent接口与aclrtStreamWaitEvent接口配合使用时,主要用于多Stream之间同步等待的场景。
调用aclrtRecordEvent接口时,会捕获当前Stream上已下发的任务,并记录到Event事件中,因此后续若调用aclrtQueryEventStatus或aclrtStreamWaitEvent接口时,会检查或等待该Event事件中所捕获的任务都已经完成。
另外,对于使用aclrtCreateEventExWithFlag创建的Event:
- aclrtRecordEvent接口支持对同一个Event多次record实现Event复用,每次Record会重新捕获当前Stream上已下发的任务,并覆盖保存到Event中。在调用aclrtStreamWaitEvent接口时,会使用最近一次Event中所保存的任务,且不会被后续的aclrtRecordEvent调用影响。
- 在首次调用aclrtRecordEvent接口前,由于Event中没有任务,因此调用aclrtQueryEventStatus接口时会返回ACL_EVENT_RECORDED_STATUS_COMPLETE。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| event | 输入 | 待记录的Event。类型定义请参见aclrtEvent。 |
| stream | 输入 | 指定Stream。类型定义请参见aclrtStream。 多Stream同步等待场景下,例如,Stream2等待Stream1的场景,此处配置为Stream1。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtRecordEventWithFlag
aclError aclrtRecordEventWithFlag(aclrtEvent event, aclrtStream stream, uint32_t flag)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:不支持
- Atlas 推理系列产品:不支持
- Atlas 训练系列产品:不支持
- IPV350:不支持
功能说明
在指定的Stream中记录一个Event。异步接口。 该接口是在aclrtRecordEvent接口基础上进行了增强,支持配置flag,不同的flag用于不同的使用场景。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| event | 输入 | 待记录的Event。类型定义请参见aclrtEvent。 当flag为ACL_EVENT_RECORD_EXTERNAL时,event仅支持通过aclrtCreateEventExWithFlag接口创建,且flag必须为ACL_EVENT_SYNC,其他flag或其他创建Event的接口均不支持。 |
| stream | 输入 | 指定Stream。类型定义请参见aclrtStream。 当flag为ACL_EVENT_RECORD_EXTERNAL时,仅支持在图捕获(ACL Graph)场景下使用,且stream参数处指定的Stream必须是正处于捕获状态。 |
| flag | 输入 | 指定记录动作的行为。flag取值如下: - 当flag为ACL_EVENT_RECORD_DEFAULT时,表示默认行为,适用于普通场景,等价于aclrtRecordEvent接口。 - 当flag为ACL_EVENT_RECORD_EXTERNAL时,仅适用于图捕获场景,当用户正在把Stream上的任务捕获成计算图时,带上这个flag,本次记录的事件对外部可见,用于实现图和外部Stream之间做同步、以及实现图和图之间做同步。非图捕获场景下,flag为ACL_EVENT_RECORD_EXTERNAL时,返回报错。 宏定义如下: #define ACL_EVENT_RECORD_DEFAULT 0x00U #define ACL_EVENT_RECORD_EXTERNAL 0x01U |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
当flag为ACL_EVENT_RECORD_EXTERNAL时,存在如下约束:
- 对于同一个图,在图捕获过程中,同一event不允许同时进行Record和Wait操作。
- 若event在通过本接口记录之前已被aclrtRecordEvent记录过,则本接口返回错误。
aclrtResetEvent
aclError aclrtResetEvent(aclrtEvent event, aclrtStream stream)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
复位Event,恢复Event初始状态,便于Event对象重复使用。异步接口。
对于多个Stream间任务同步的场景,通常在调用aclrtStreamWaitEvent接口之后再复位Event。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| event | 输入 | 待复位的Event。类型定义请参见aclrtEvent。 |
| stream | 输入 | 指定Stream。类型定义请参见aclrtStream。 多个Stream间任务同步的场景,例如,Stream2中的任务依赖Stream1中的任务时,此处配置为Stream2。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
仅支持复位由aclrtCreateEventWithFlag接口创建的、带有ACL_EVENT_SYNC标志的Event。
注意 ,在多个Stream中的任务需要等待同一个Event的情况下,不建议使用调用此接口来复位Event。如图所示,如果在stream2中的aclrtStreamWaitEvent接口之后调用aclrtResetEvent接口,Event将被复位,这会导致stream3中的aclrtStreamWaitEvent接口无法成功。

aclrtQueryEvent(废弃)
aclError aclrtQueryEvent(aclrtEvent event, aclrtEventStatus *status)
须知:此接口后续版本会废弃,请使用aclrtQueryEventStatus接口。
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
查询与本接口在同一线程中的aclrtRecordEvent接口所记录的Event是否执行完成。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| event | 输入 | 指定待查询的Event。类型定义请参见aclrtEvent。 |
| status | 输出 | Event状态的指针。类型定义请参见aclrtEventStatus。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtQueryEventStatus
aclError aclrtQueryEventStatus(aclrtEvent event, aclrtEventRecordedStatus *status)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
查询该Event捕获的所有任务的执行状态。具体见aclrtRecordEvent接口参考Event捕获的细节。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| event | 输入 | 指定待查询的Event。类型定义请参见aclrtEvent。 |
| status | 输出 | Event状态的指针。类型定义请参见aclrtEventRecordedStatus。 如果该Event捕获的所有任务都已经执行完成则返回ACL_EVENT_RECORDED_STATUS_COMPLETE,如果有任何一个任务未执行完成则返回ACL_EVENT_RECORDED_STATUS_NOT_READY。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
如果用户在不同线程上分别调用aclrtRecordEvent和aclrtQueryEventStatus,可能由于多线程导致这两个API的执行时间乱序,进而导致查询到的Event对象的完成状态不符合预期。
aclrtQueryEventWaitStatus
aclError aclrtQueryEventWaitStatus(aclrtEvent event, aclrtEventWaitStatus *status)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
调用aclrtStreamWaitEvent接口后查询该Event对应的等待任务是否都执行完成。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| event | 输入 | 指定待查询的Event。类型定义请参见aclrtEvent。 |
| status | 输出 | Event状态的指针。类型定义请参见aclrtEventWaitStatus。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
通过aclrtCreateEventExWithFlag接口创建的Event,不支持调用本接口。
aclrtSynchronizeEvent
aclError aclrtSynchronizeEvent(aclrtEvent event)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
阻塞当前线程运行直到Event捕获的所有任务都执行完成。具体见aclrtRecordEvent接口参考Event捕获的细节。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| event | 输入 | 需等待的Event。类型定义请参见aclrtEvent。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtSynchronizeEventWithTimeout
aclError aclrtSynchronizeEventWithTimeout(aclrtEvent event, int32_t timeout)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
阻塞当前线程运行直到Event捕获的所有任务都执行完成(具体见aclrtRecordEvent接口参考Event捕获的细节),该接口是在接口aclrtSynchronizeEvent基础上进行了增强,支持用户设置永久等待、或配置具体的超时时间,若配置具体的超时时间,则当应用程序异常时可根据所设置的超时时间自行退出。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| event | 输入 | 需等待的Event。类型定义请参见aclrtEvent。 |
| timeout | 输入 | 接口的超时时间。 取值说明如下: - -1:表示永久等待,和接口aclrtSynchronizeEvent功能一样。 - >0:配置具体的超时时间,单位是毫秒。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtEventElapsedTime
aclError aclrtEventElapsedTime(float *ms, aclrtEvent startEvent, aclrtEvent endEvent)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
统计两个Event之间的耗时。
本接口需与其它关键接口配合使用,接口调用顺序:调用aclrtCreateEvent/aclrtCreateEventWithFlag接口创建Event**-->调用aclrtRecordEvent接口在同一个Stream中记录起始Event、结尾Event-->调用aclrtSynchronizeStream接口阻塞应用程序运行,直到指定Stream中的所有任务都完成-->**调用aclrtEventElapsedTime接口统计两个Event之间的耗时
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| ms | 输出 | 表示两个Event之间耗时的指针,单位为毫秒。 |
| startEvent | 输入 | 起始Event。类型定义请参见aclrtEvent。 |
| endEvent | 输入 | 结尾Event。类型定义请参见aclrtEvent。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtStreamWaitEvent
aclError aclrtStreamWaitEvent(aclrtStream stream, aclrtEvent event)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
阻塞指定Stream的运行,直到指定的Event完成,支持多个Stream等待同一个Event的场景。异步接口。
提交到Stream上的所有后续任务都需要等待Event捕获的任务都完成后才能开始执行。具体见aclrtRecordEvent接口了解Event捕获的细节。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| stream | 输入 | 指定Stream。类型定义请参见aclrtStream。 多Stream同步等待场景下,例如,Stream2等待Stream1的场景,此处配置为Stream2。 |
| event | 输入 | 需等待的Event。类型定义请参见aclrtEvent。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
一个进程内,调用aclInit接口初始化后,若再调用aclrtSetOpWaitTimeout接口设置超时时间,那么本进程内后续调用aclrtStreamWaitEvent接口下发的任务支持在所设置的超时时间内等待,若等待的时间超过所设置的超时时间,则在调用同步等待接口(例如,aclrtSynchronizeStream)后,会返回报错。
aclrtStreamWaitEventWithFlag
aclError aclrtStreamWaitEventWithFlag(aclrtStream stream, aclrtEvent event, uint32_t timeout, uint32_t flag)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:不支持
- Atlas 推理系列产品:不支持
- Atlas 训练系列产品:不支持
- IPV350:不支持
功能说明
阻塞指定Stream的运行,直到指定的Event完成。异步接口。 该接口是在接口aclrtStreamWaitEvent、aclrtStreamWaitEventWithTimeout基础上进行了增强,支持用户配置具体的超时时间,同时还可以配置flag,不同的flag用于不同的使用场景。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| stream | 输入 | 指定Stream。类型定义请参见aclrtStream。 当flag为ACL_EVENT_WAIT_EXTERNAL时,仅支持在图捕获(ACL Graph)场景下使用,且stream参数处指定的Stream必须是正处于捕获状态。 |
| event | 输入 | 需等待的Event。类型定义请参见aclrtEvent。 当flag为ACL_EVENT_WAIT_EXTERNAL时,event仅支持通过aclrtCreateEventExWithFlag接口创建,且flag必须为ACL_EVENT_SYNC。其他flag或其他创建Event的接口均不支持。 |
| timeout | 输入 | 超时时间,单位为秒。 当flag为ACL_EVENT_WAIT_DEFAULT时,功能等价于aclrtStreamWaitEventWithTimeout接口,但本接口timeout参数类型为uint32_t。 当flag为ACL_EVENT_WAIT_EXTERNAL时,timeout参数仅支持设置为0,表示永不超时。 |
| flag | 输入 | 指定等待动作的行为。flag取值如下: - 当flag为ACL_EVENT_WAIT_DEFAULT时,表示默认标记,适用于普通场景,等价于aclrtStreamWaitEventWithTimeout接口。 - 当flag为ACL_EVENT_WAIT_EXTERNAL时,图捕获场景专用,当用户正在把Stream上的任务捕获成计算图时,带上这个flag,表示本次等待一个图之外的事件,用于实现图和外部Stream之间做同步、以及实现图和图之间做同步。 宏定义如下: #define ACL_EVENT_WAIT_DEFAULT 0x00U #define ACL_EVENT_WAIT_EXTERNAL 0x01U |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
当flag为ACL_EVENT_WAIT_EXTERNAL时,存在如下约束:
- 对于同一个图,在图捕获过程中,同一event不允许同时进行Record和Wait操作。
- 若event在通过本接口记录之前已被aclrtRecordEvent记录过,则本接口返回错误。
aclrtStreamWaitEventWithTimeout
aclError aclrtStreamWaitEventWithTimeout(aclrtStream stream, aclrtEvent event, int32_t timeout)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
阻塞指定Stream的运行,直到指定的Event完成或等待超时。支持多个Stream等待同一个Event,若等待超时则返回错误码。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| stream | 输入 | 指定Stream。类型定义请参见aclrtStream。 多Stream同步等待场景下,例如,Stream2等待Stream1的场景,此处配置为Stream2。 |
| event | 输入 | 需等待的Event。类型定义请参见aclrtEvent。 |
| timeout | 输入 | 超时时间。 取值>=0,用于配置具体的超时时间,单位是秒。0代表永不超时。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtSetOpWaitTimeout
aclError aclrtSetOpWaitTimeout(uint32_t timeout)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:不支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
本接口用于设置等待Event完成的超时时间。
不调用本接口,则默认不超时;一个进程内多次调用本接口,则以最后一次设置的时间为准。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| timeout | 输入 | 设置超时时间,单位为秒。 将该参数设置为0时,表示不超时。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
一个进程内,调用aclInit接口初始化后,若再调用aclrtSetOpWaitTimeout接口设置超时时间,那么本进程内后续调用aclrtStreamWaitEvent接口下发的任务支持在所设置的超时时间内等待,若等待的时间超过所设置的超时时间,则在调用同步等待接口(例如,aclrtSynchronizeStream)后,会返回报错。
aclrtEventGetTimestamp
aclError aclrtEventGetTimestamp(aclrtEvent event, uint64_t *timestamp)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
获取Event的执行结束时间点(表示从AI处理器系统启动以来的时间)。
本接口需与其它关键接口配合使用,接口调用顺序:调用aclrtCreateEvent/aclrtCreateEventWithFlag接口创建Event**-->调用aclrtRecordEvent接口在Stream中记录Event>调用aclrtSynchronizeStream接口阻塞应用程序运行,直到指定Stream中的所有任务都完成-->**调用aclrtEventGetTimestamp接口获取Event的执行时间。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| event | 输入 | 查询的Event。类型定义请参见aclrtEvent。 |
| timestamp | 输出 | Event执行结束的时间点,单位为微秒。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtGetEventId
aclError aclrtGetEventId(aclrtEvent event, uint32_t *eventId)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
获取指定Event的ID。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| event | 输入 | 指定要查询的Event。类型定义请参见aclrtEvent。 |
| eventId | 输出 | Event ID。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtGetEventAvailNum
aclError aclrtGetEventAvailNum(uint32_t *eventCount)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
查询当前Device上可用的Event数量。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| eventCount | 输出 | Event数量。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtIpcGetEventHandle
aclError aclrtIpcGetEventHandle(aclrtEvent event, aclrtIpcEventHandle *handle)
产品支持情况
- Ascend 950PR:支持
- Ascend 950DT:不支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:不支持
- Atlas 推理系列产品:不支持
- Atlas 训练系列产品:不支持
- IPV350:不支持
功能说明
将本进程中的指定Event设置为IPC(Inter-Process Communication) Event,并返回其handle(即Event句柄),用于在跨进程场景下实现任务同步,支持同一个Device内的多个进程以及跨Device的多个进程。
本接口需与以下其它关键接口配合使用,此处以A进程、B进程为例:
-
A进程中:
- 调用aclrtCreateEventExWithFlag接口创建flag为ACL_EVENT_IPC的Event。
- 调用aclrtIpcGetEventHandle接口获取用于进程间通信的Event句柄。
- 调用aclrtRecordEvent接口在Stream中插入1.a中创建的Event。
-
B进程中:
- 调用aclrtIpcOpenEventHandle接口获取A进程中的Event句柄信息,并返回本进程可以使用的Event指针。
- 调用aclrtStreamWaitEvent接口阻塞指定Stream的运行,直到指定的Event完成。
- Event使用完成后,调用aclrtDestroyEvent接口销毁Event。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| event | 输入 | 指定Event。类型定义请参见aclrtEvent。 仅支持通过aclrtCreateEventExWithFlag接口创建的、flag为ACL_EVENT_IPC的Event。 |
| handle | 输出 | 进程间通信的Event句柄。类型定义请参见aclrtIpcEventHandle。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtIpcOpenEventHandle
aclError aclrtIpcOpenEventHandle(aclrtIpcEventHandle handle, aclrtEvent *event)
产品支持情况
- Ascend 950PR:支持
- Ascend 950DT:不支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:不支持
- Atlas 推理系列产品:不支持
- Atlas 训练系列产品:不支持
- IPV350:不支持
功能说明
在本进程中获取handle的信息,并返回本进程可以使用的Event指针。
本接口需与其它接口配合使用,以便实现不同进程间的任务同步,请参见aclrtIpcGetEventHandle接口处的说明。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| handle | 输入 | Event句柄。类型定义请参见aclrtIpcEventHandle。 必须先调用aclrtIpcGetEventHandle接口获取指定Event的句柄,再作为入参传入。 |
| event | 输出 | Event指针。类型定义请参见aclrtEvent。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
【免费下载链接】runtime 本项目提供CANN运行时组件和维测功能组件。 项目地址: https://gitcode.com/cann/runtime
更多推荐
所有评论(0)