更新时间:2021-03-18 GMT+08:00
分享

原理介绍

  • 数据传输可以通过内存复制的方式实现,分为同步内存复制、异步内存复制:
  • 内存复制前,需要提前申请内存,分为Host上的内存申请、Device上的内存申请:
    • Host上的内存,可以用C++标准库中的new、malloc接口申请内存,也可以使用ACL提供的aclrtMallocHost接口申请内存。
    • Device上的内存,使用ACL提供的aclrtMalloc接口申请内存。如果涉及数据预处理(例如,图片解码、缩放等)时,需使用acldvppMalloc接口申请内存。
  • 当同一个应用的可执行文件既支持在Host执行,也支持在Device上执行时,在编程时需要调用aclrtGetRunMode接口获取软件栈的运行模式,根据运行模式来判断后续的内存申请接口调用逻辑。
    1. 如果应用的可执行文件在Host上执行,则可能涉及Host与Device之间的数据传输,需要调用aclrtMemcpy接口(同步接口)或aclrtMemcpyAsync接口(异步接口)通过内存复制的方式实现数据传输。
    2. 如果应用的可执行文件在Device上执行,则不涉及Host与Device之间的数据传输。

      Ascend RC场景下,HostDevice都部署在开发者板上,也不涉及Host与Device之间的数据传输。

分享:

    相关文档

    相关产品

close