aclrtMemcpyAsync
函数功能
实现内存复制,异步接口。
约束说明
- 调用本接口进行内存复制时,源地址和目的地址都必须64字节对齐。
- 本接口是异步接口,调用接口成功仅表示任务下发成功,不表示任务执行成功。调用该接口后,需调用同步等待接口(例如,aclrtSynchronizeStream)确保内存复制的任务已执行完成。
- 若调用本接口传入的kind为ACL_MEMCPY_HOST_TO_DEVICE或ACL_MEMCPY_DEVICE_TO_HOST,并且Host内存不是通过aclrtMallocHost申请得到的,本接口不会报错,但是在实际执行到该任务时会发生不可预知的错误。
- 本接口不支持异步Host内的内存复制功能,因此传入的kind为ACL_MEMCPY_HOST_TO_HOST时,任务下发成功,但系统内部处理该任务时会返回失败。
- 在Atlas 200/300/500 推理产品上:
      Ascend RC形态下,在板端运行应用时,选择涉及Host的内存复制类型后,系统内部会默认使用Device内的内存复制。 
- 在Atlas 推理系列产品上:
      如果执行Device间的内存复制,需先调用aclrtDeviceCanAccessPeer接口查询两个Device间是否支持内存复制、调用aclrtDeviceEnablePeerAccess接口使用两个Device间的内存复制,再调用本接口进行内存复制。 
- 在Atlas 训练系列产品上,如果执行Device间的内存复制,需先调用aclrtDeviceCanAccessPeer接口查询两个Device间是否支持内存复制、调用aclrtDeviceEnablePeerAccess接口使用两个Device间的内存复制,再调用本接口进行内存复制。
- 在Atlas A2训练系列产品上,如果执行Device间的内存复制,需先调用aclrtDeviceCanAccessPeer接口查询两个Device间是否支持内存复制、调用aclrtDeviceEnablePeerAccess接口使用两个Device间的内存复制,再调用本接口进行内存复制。
函数原型
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间的内存复制
} aclrtMemcpyKind; | 
| stream | 输入 | 指定stream。 | 
返回值说明
返回0表示成功,返回其它值表示失败。
     父主题: 内存管理