昇腾社区首页
中文
注册

函数:memcpy_async

产品支持情况

产品

是否支持

Atlas A3 训练系列产品 / Atlas A3 推理系列产品

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

Atlas 训练系列产品

Atlas 推理系列产品

Atlas 200I/500 A2 推理产品

Atlas 200/300/500 推理产品

功能说明

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

函数原型

  • C函数原型
    1
    aclError aclrtMemcpyAsync(void *dst, size_t destMax, const void *src, size_t count, aclrtMemcpyKind kind, aclrtStream stream)
    
  • python函数
    1
    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 异构组件 Atlas A3 训练系列产品 / Atlas A3 推理系列产品

  • 若调用本接口传入的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 。

资源参考

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