通过在线视频课程学习该功能,请参见CANN应用开发高级。
AscendCL提供以下几种同步机制:
调用接口后,需增加异常处理的分支,并记录报错日志、提示日志,此处不一一列举。以下是关键步骤的代码示例,不可以直接拷贝编译运行,仅供参考。
#include "acl/acl.h" // ...... // 创建一个Event aclrtEvent event; aclrtCreateEvent(&event); // 创建一个Stream aclrtStream stream; aclrtCreateStream(&stream); // stream末尾添加了一个event aclrtRecordEvent(event, stream); // 阻塞应用程序运行,等待event发生,也就是stream执行完成 // stream完成后产生event,唤醒执行应用程序的控制流,开始执行程序 aclrtSynchronizeEvent(event); // 显式销毁资源 aclrtDestroyStream(stream); aclrtDestroyEvent(event); // ......
调用接口后,需增加异常处理的分支,并记录报错日志、提示日志,此处不一一列举。以下是关键步骤的代码示例,不可以直接拷贝编译运行,仅供参考。
#include "acl/acl.h" // ...... // 显式创建一个Stream aclrtStream stream; aclrtCreateStream(&stream); // 调用触发任务的接口,传入stream参数 aclrtMemcpyAsync(dstPtr, dstSize, srcPtr, srcSize, ACL_MEMCPY_HOST_TO_DEVICE, stream); // 调用aclrtSynchronizeStream接口,阻塞应用程序运行,直到指定Stream中的所有任务都完成。 aclrtSynchronizeStream(stream); // Stream使用结束后,显式销毁Stream aclrtDestroyStream(stream); // ......
调用接口后,需增加异常处理的分支,并记录报错日志、提示日志,此处不一一列举。以下是关键步骤的代码示例,不可以直接拷贝编译运行,仅供参考。
#include "acl/acl.h" // ...... // 创建一个Event aclrtEvent event; aclrtCreateEvent(&event); // 创建两个Stream aclrtStream s1; aclrtStream s2; aclrtCreateStream(&s1); aclrtCreateStream(&s2); // 在s1末尾添加了一个event aclrtRecordEvent(event, s1); // 阻塞s2运行,直到指定event发生,也就是s1执行完成 // s1完成后,唤醒s2,继续执行s2的任务 aclrtStreamWaitEvent(s2, event); // 显式销毁资源 aclrtDestroyStream(s2); aclrtDestroyStream(s1); aclrtDestroyEvent(event); // ......
调用接口后,需增加异常处理的分支,并记录报错日志、提示日志,此处不一一列举。以下是关键步骤的代码示例,不可以直接拷贝编译运行,仅供参考。
#include "acl/acl.h" // ...... // 指定device aclrtSetDevice(0); // 创建context aclrtContext ctx; aclrtCreateContext(&ctx, 0); // 创建stream aclrtStream stream; aclrtCreateStream(&stream); // 阻塞应用程序运行,直到正在运算中的Device完成运算 aclrtSynchronizeDevice(); // 资源销毁 aclrtDestroyStream(stream); aclrtDestroyContext(ctx); aclrtResetDevice(0);