从Device到Host的数据传输 (异步)

示例代码如下:
import acl
# ......

# 1.申请内存
size = 1 * 1024 * 1024
# acl.rt.malloc 申请的Device 侧内存系统保证已经符合64对齐
dev_ptr_a, ret = acl.rt.malloc(size, ACL_MEM_MALLOC_NORMAL_ONLY)
# 异步内存复制要求,内存首地址64字节对齐,使用acl.rt.malloc_host 需多申请64字节
host_ptr_b, ret = acl.rt.malloc_host(size + 64)
# host申请的内存需要用户自己64对齐处理
host_align = host_ptr_b+ 64 - host_ptr_b % 64

# 2.申请内存后,可向内存中读入数据,该自定义函数fead_file由用户实现
fead_file(fileName, dev_ptr_a, size)

# 3.异步内存复制
# 异步内存复制,dev_ptr_a表示Device上源内存地址指针,host_align 表示Host上目的内存地址指针,size表示内存大小
# ACL_MEMCPY_DEVICE_TO_HOST等于 2
stream = acl.rt_create_stream()
ret = acl.rt.memcpy_async(host_align, size , dev_ptr_a, size, ACL_MEMCPY_DEVICE_TO_HOST, stream)
ret = acl.rt.synchronize_stream(stream)

# 4.使用完内存中的数据后,需及时释放资源
ret = acl.rt.destroy_stream(stream)
ret = acl.rt.free_host(host_ptr_b)
ret = acl.rt.free(dev_ptr_a)

# ......