| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 14 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 14 天前 |
2_event_wait_diagnostics
描述
本样例演示单 Device 应用如何诊断生产者 Stream 与消费者 Stream 之间的 Event 等待过程。样例记录普通 Event 创建前后的可用数量,并在首次 Record 后获取 Event ID;随后为消费者设置有限等待超时,通过等待状态从未完成变为完成以及最终数据结果,验证两个 Stream 之间的任务依赖关系。
普通 Event 的资源可能在首次 Record 时才实际申请,因此创建前后的可用数量用于资源诊断,不要求固定减少一个。本样例必须使用 aclrtCreateEvent 创建 Event,不能替换为 aclrtCreateEventExWithFlag。
产品支持情况
本样例支持以下产品:
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
编译运行
- 下载样例代码至安装 CANN 软件的环境,切换到样例目录。
cd ${git_clone_path}/example/1_basic_features/event/2_event_wait_diagnostics
- 设置环境变量。
# ${install_root} 替换为 CANN 安装根目录,默认安装在 /usr/local/Ascend 目录
source ${install_root}/cann/set_env.sh
# 自动识别 SOC_VERSION 和 ASCENDC_CMAKE_DIR
source ${git_clone_path}/example/set_sample_env.sh
- 执行以下命令运行样例。
bash run.sh
CANN RUNTIME API
在该 Sample 中,涉及的关键功能点及其关键接口,如下所示:
- 初始化
- 调用
aclInit接口进行初始化配置。 - 调用
aclFinalize接口实现去初始化。
- 调用
- Device 管理
- 调用
aclrtSetDevice接口指定用于运算的 Device。 - 调用
aclrtResetDeviceForce接口强制复位当前运算的 Device,回收 Device 上的资源。
- 调用
- Context 管理
- 调用
aclrtCreateContext接口创建 Context。 - 调用
aclrtDestroyContext接口销毁 Context。
- 调用
- Stream 管理
- 调用
aclrtCreateStream接口创建生产者 Stream 和消费者 Stream。 - 调用
aclrtStreamWaitEventWithTimeout接口为消费者 Stream 下发带有限超时的 Event Wait 任务。 - 调用
aclrtSynchronizeStream接口阻塞等待 Stream 上任务执行完成。 - 调用
aclrtDestroyStream接口销毁 Stream。 - 调用
aclrtDestroyStreamForce接口在失败清理路径中强制销毁 Stream。
- 调用
- Event 管理
- 调用
aclrtGetEventAvailNum接口查询当前 Device 上可用的 Event 数量。 - 调用
aclrtCreateEvent接口创建普通 Event。 - 调用
aclrtGetEventId接口获取 Event ID。 - 调用
aclrtRecordEvent接口在生产者 Stream 中记录 Event。 - 调用
aclrtQueryEventWaitStatus接口查询 Event 对应等待任务的完成状态。 - 调用
aclrtDestroyEvent接口销毁 Event。
- 调用
- 内存管理与数据传输
- 调用
aclrtMalloc接口申请 Device 内存。 - 调用
aclrtMemcpy接口在 Host 与 Device 之间复制数据。 - 调用
aclrtFree接口释放 Device 内存。
- 调用
示例输出
[INFO]: Current compile soc version is ...
Configuring CMake...
Building...
[INFO] Available Events before creation: ...
[INFO] Available Events after creation: ...
[INFO] Producer starts a long task: value += 1.
[INFO] Recorded ordinary Event ID: ...
[INFO] Consumer waits for the Event with a 5-second timeout.
[INFO] Wait status before consumer synchronization: NOT_READY.
[INFO] Consumer submits the dependent task: value *= 2.
[INFO] Wait status after consumer synchronization: COMPLETE.
[INFO] Output value: 2 (expected: 2).
[INFO] [SUCCESS] Event wait diagnostics sample completed successfully.
[SUCCESS] Event wait diagnostics sample executed successfully.