7. Event管理

【免费下载链接】runtime 本项目提供CANN运行时组件和维测功能组件。 【免费下载链接】runtime 项目地址: https://gitcode.com/cann/runtime

本章节描述 CANN Runtime 的 Event 管理接口,用于事件的创建、记录、同步、计时及 IPC 跨进程共享。

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:aclrtResetEventaclrtStreamWaitEventaclrtQueryEventWaitStatus。若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不支持在以下接口或场景中使用:aclrtResetEventaclrtQueryEventaclrtQueryEventWaitStatusaclrtEventElapsedTimeaclrtEventGetTimestampaclrtGetEventId、模型捕获场景(参见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,不支持在以下接口中使用:aclrtResetEventaclrtQueryEventaclrtQueryEventWaitStatus,否则返回报错。

  • 若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事件中,因此后续若调用aclrtQueryEventStatusaclrtStreamWaitEvent接口时,会检查或等待该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完成。异步接口。 该接口是在接口aclrtStreamWaitEventaclrtStreamWaitEventWithTimeout基础上进行了增强,支持用户配置具体的超时时间,同时还可以配置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进程为例:

  1. A进程中:

    1. 调用aclrtCreateEventExWithFlag接口创建flag为ACL_EVENT_IPC的Event。
    2. 调用aclrtIpcGetEventHandle接口获取用于进程间通信的Event句柄。
    3. 调用aclrtRecordEvent接口在Stream中插入1.a中创建的Event。
  2. B进程中:

    1. 调用aclrtIpcOpenEventHandle接口获取A进程中的Event句柄信息,并返回本进程可以使用的Event指针。
    2. 调用aclrtStreamWaitEvent接口阻塞指定Stream的运行,直到指定的Event完成。
    3. 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运行时组件和维测功能组件。 【免费下载链接】runtime 项目地址: https://gitcode.com/cann/runtime

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐