文档
注册

接口调用流程

数据传输的关键接口调用流程如下:

  1. 申请内存
    • Host上的内存,可以使用pyACL提供的acl.rt.malloc_host接口申请内存。

      acl.rt.malloc_host会尝试申请物理地址连续的内存,后续在Host与Device数据交互时性能更优。

      调用acl.rt.malloc_host接口后且在使用内存前,建议先调用acl.rt.memset接口初始化内存,清除内存中的随机数。

    • Device上的内存,使用pyACL提供的acl.rt.malloc接口申请内存。如果涉及数据预处理(例如,图片解码、缩放等)时,需使用acl.media.dvpp_mallocacl.himpi.dvpp_malloc接口申请内存。
  2. 将数据读入内存

    由用户自行管理数据读入内存的实现逻辑。

  3. 通过内存复制实现数据传输
    数据传输可以通过内存复制的方式实现,分为同步内存复制异步内存复制

    Ascend RC场景下,不涉及Host上的内存申请、Host内的数据传输、Host与Device之间的数据传输。

    如果当前版本支持多种运行形态,在这种场景下,若想实现相同的应用程序可支持在多种形态下运行,申请内存的方式不同,会影响数据传输时调用的接口:
    • 若应用程序中区分申请Host内存或Device内存的接口,例如使用acl.rt.malloc_host接口申请Host内存、使用acl.rt.malloc接口申请Device内存时:

      需先调用acl.rt.get_run_mode接口获取软件栈的运行模式。

      • 当查询结果为ACL_HOST = 1,则数据传输时涉及申请Host上的内存。
      • 当查询结果为ACL_DEVICE = 0 ,则数据传输时不涉及申请Host上的内存,仅需申请Device上的内存。

      该种方式多一些代码逻辑的判断,不需要由用户处理Device上的内存对齐。在Device上运行应用的场景,该种方式少一些内存复制的步骤,性能较好。

    • 若应用程序中不区分申请Host内存或Device内存的接口,统一使用acl.rt.malloc_host接口(该接口支持申请Host或Device内存),pyACL内部会根据软件栈的运行模式自行判断运行时申请的是Host内存还是Device内存:

      无需调用acl.rt.get_run_mode接口获取软件栈的运行模式。该种方式代码逻辑相比前一种简单,但需由用户处理Device上的内存对齐。

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词