昇腾社区首页
中文
注册

函数:memcpy_async

C函数原型

aclError aclrtMemcpyAsync(void *dst, size_t destMax, const void *src, size_t count, aclrtMemcpyKind kind, aclrtStream stream)

Python函数

ret = acl.rt.memcpy_async(dst, dest_max, src, count, kind, stream)

函数功能

实现内存复制,异步接口。

输入说明

dst:int,目的内存地址的指针地址。

dest_max:int,目的内存地址的最大内存长度,单位Byte。

src:int,源内存地址的指针地址。

count:int,内存复制的长度,单位Byte。

kind:int,内存复制的类型。
  • 0:ACL_MEMCPY_HOST_TO_HOST,Host内的内存复制。
  • 1:ACL_MEMCPY_HOST_TO_DEVICE, Host到Device的内存复制。
  • 2:ACL_MEMCPY_DEVICE_TO_HOST,Device到Host的内存复制。
  • 3:ACL_MEMCPY_DEVICE_TO_DEVICE,Device内的内存复制。
  • 4:ACL_MEMCPY_DEFAULT, 由系统根据源、目的内存地址自行判断拷贝方向

stream:int,stream ID。

返回值说明

ret:int,错误码。

  • 返回0表示成功。
  • 返回其它值表示失败。

约束说明

各型号通用

  • 调用本接口进行内存复制时,源地址和目的地址都必须64字节对齐。

Atlas 200/300/500 推理产品

  • 若调用本接口传入的kind为ACL_MEMCPY_HOST_TO_DEVICE或ACL_MEMCPY_DEVICE_TO_HOST,并且Host内存不是通过acl.rt.malloc_host申请得到的,本接口不会报错,但是在实际执行到该任务时会发生不可预知的错误。
  • Ascend EP形态下,本接口不支持异步Host内的内存复制功能,若传入的kind为ACL_MEMCPY_HOST_TO_HOST时,接口返回报错ACL_ERROR_RT_FEATURE_NOT_SUPPORT 。
  • Ascend RC形态下,在板端运行应用时,若调用本接口传入的kind为ACL_MEMCPY_HOST_TO_DEVICE、ACL_MEMCPY_DEVICE_TO_HOST或ACL_MEMCPY_HOST_TO_HOST,系统内部会默认使用ACL_MEMCPY_DEVICE_TO_DEVICE执行Device内的内存复制。

Atlas 推理系列产品

  • 若调用本接口传入的kind为ACL_MEMCPY_HOST_TO_DEVICE或ACL_MEMCPY_DEVICE_TO_HOST,并且Host内存不是通过acl.rt.malloc_host申请得到的,本接口不会报错,但是在实际执行相关业务时会发生不可预知的错误。
  • 如果执行Device间的内存复制,需先调用acl.rt.device_can_access_peer(未适配)接口查询两个Device间是否支持内存复制、调用acl.rt.device_enable_peer_access(未适配)接口开启两个Device间的内存复制功能,再调用本接口进行内存复制。
  • Ascend EP形态下,本接口不支持异步Host内的内存复制功能,若传入的kind为ACL_MEMCPY_HOST_TO_HOST时,接口返回报错ACL_ERROR_RT_FEATURE_NOT_SUPPORT 。

Atlas 200I/500 A2 推理产品

  • 若调用本接口传入的kind为ACL_MEMCPY_HOST_TO_DEVICE或ACL_MEMCPY_DEVICE_TO_HOST,并且Host内存不是通过acl.rt.malloc_host申请得到的,本接口不会报错,但是在实际执行相关业务时会发生不可预知的错误。
  • Ascend EP形态下,本接口不支持异步Host内的内存复制功能,若传入的kind为ACL_MEMCPY_HOST_TO_HOST时,接口返回报错ACL_ERROR_RT_FEATURE_NOT_SUPPORT 。
  • Ascend RC形态下,在板端运行应用时,若调用本接口传入的kind为ACL_MEMCPY_HOST_TO_DEVICE、ACL_MEMCPY_DEVICE_TO_HOST或ACL_MEMCPY_HOST_TO_HOST,系统内部会默认使用ACL_MEMCPY_DEVICE_TO_DEVICE执行Device内的内存复制。

Atlas 训练系列产品 Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件 、:

  • 若调用本接口传入的kind为ACL_MEMCPY_HOST_TO_DEVICE或ACL_MEMCPY_DEVICE_TO_HOST,并且Host内存不是通过acl.rt.malloc_host申请得到的,本接口不会报错,但是在实际执行相关业务时会发生不可预知的错误。
  • 如果执行Device间的内存复制,需先调用acl.rt.device_can_access_peer(未适配)接口查询两个Device间是否支持内存复制、调用acl.rt.device_enable_peer_access(未适配)接口开启两个Device间的内存复制功能,再调用本接口进行内存复制。
  • 本接口不支持异步Host内的内存复制功能,若传入的kind为ACL_MEMCPY_HOST_TO_HOST时,接口返回报错ACL_ERROR_RT_FEATURE_NOT_SUPPORT 。

参考资源

接口调用示例,参见数据传输