文档
注册
评分
提单
论坛
小AI

aclrtMemcpyAsync

函数功能

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

约束说明

  • 调用本接口进行内存复制时,源地址和目的地址都必须64字节对齐。
  • 该接口是异步接口,调用接口成功仅表示任务下发成功,不表示任务执行成功。调用该接口后,需调用同步等待接口(例如,aclrtSynchronizeStream)确保内存复制的任务已执行完成,否则可能会导致训练或推理等业务异常、Device断链掉卡等未知情况。
  • 若调用本接口传入的kind为ACL_MEMCPY_HOST_TO_DEVICE或ACL_MEMCPY_DEVICE_TO_HOST,并且Host内存不是通过aclrtMallocHost申请得到的,本接口不会报错,但是在实际执行到该任务时会发生不可预知的错误。
  • 本接口不支持异步Host内的内存复制功能,若传入的kind为ACL_MEMCPY_HOST_TO_HOST时,接口返回报错ACL_ERROR_RT_FEATURE_NOT_SUPPORT 。
  • Ascend RC形态下,在板端运行应用时,选择涉及Host的内存复制类型后,系统内部会默认使用Device内的内存复制。

    当前以下产品版本支持Ascend RC形态:

    • Atlas 200/300/500 推理产品
    • Atlas 200/500 A2推理产品
  • 如果执行Device间的内存复制,需先调用aclrtDeviceCanAccessPeer接口查询两个Device间是否支持内存复制、调用aclrtDeviceEnablePeerAccess接口使用两个Device间的内存复制,再调用本接口进行内存复制。

    目前以下产品版本支持aclrtDeviceCanAccessPeeraclrtDeviceEnablePeerAccess接口:

    • Atlas 推理系列产品
    • Atlas 训练系列产品
    • Atlas A2训练系列产品/Atlas 800I A2推理产品
    • Atlas A3 训练系列产品

函数原型

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

参数说明

参数名

输入/输出

说明

dst

输入

目的内存地址指针。

destMax

输入

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

src

输入

源内存地址指针。

count

输入

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

kind

输入

内存复制的类型。

typedef enum aclrtMemcpyKind {
ACL_MEMCPY_HOST_TO_HOST,     // Host内的内存复制
ACL_MEMCPY_HOST_TO_DEVICE,   // Host到Device的内存复制
ACL_MEMCPY_DEVICE_TO_HOST,   // Device到Host的内存复制
ACL_MEMCPY_DEVICE_TO_DEVICE, // Device内或Device间的内存复制
ACL_MEMCPY_DEFAULT,         // 由系统根据源、目的内存地址自行判断拷贝方向
} aclrtMemcpyKind;

stream

输入

指定stream。

返回值说明

返回0表示成功,返回其他值表示失败。

参考资源

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

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

当前产品无相关内容

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