更新时间:2021-03-18 GMT+08:00
原理介绍
- 数据传输可以通过内存复制的方式实现,分为同步内存复制、异步内存复制:
- 同步内存复制:调用aclrtMemcpy接口。
- 异步内存复制:调用aclrtMemcpyAsync接口,再调用aclrtSynchronizeStream接口实现Stream内任务的同步等待。
- 内存复制前,需要提前申请内存,分为Host上的内存申请、Device上的内存申请:
- Host上的内存,可以用C++标准库中的new、malloc接口申请内存,也可以使用ACL提供的aclrtMallocHost接口申请内存。
- Device上的内存,使用ACL提供的aclrtMalloc接口申请内存。如果涉及数据预处理(例如,图片解码、缩放等)时,需使用acldvppMalloc接口申请内存。
- 当同一个应用的可执行文件既支持在Host执行,也支持在Device上执行时,在编程时需要调用aclrtGetRunMode接口获取软件栈的运行模式,根据运行模式来判断后续的内存申请接口调用逻辑。
- 如果应用的可执行文件在Host上执行,则可能涉及Host与Device之间的数据传输,需要调用aclrtMemcpy接口(同步接口)或aclrtMemcpyAsync接口(异步接口)通过内存复制的方式实现数据传输。
- 如果应用的可执行文件在Device上执行,则不涉及Host与Device之间的数据传输。
Ascend RC场景下,Host和Device都部署在开发者板上,也不涉及Host与Device之间的数据传输。
父主题: 数据传输
