Host内的数据传输
当前支持调用acl.rt.memcpy接口执行同步Host内的内存复制任务,不支持调用acl.rt.memcpy_async接口执行异步Host内的内存复制功能,若调用acl.rt.memcpy_async接口时选择ACL_MEMCPY_HOST_TO_HOST类型时,由于是异步接口,虽然接口调用成功,下发了内存复制任务,但在调用acl.rt.synchronize_stream接口等待该任务执行时会返回失败。
调用接口后,需增加异常处理的分支,并记录报错日志、提示日志,此处不一一列举。以下是关键步骤的代码示例,不可以直接拷贝运行,仅供参考,示例代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import acl # ...... # 1.申请内存。 size = 1 * 1024 * 1024 host_ptr_a, ret = acl.rt.malloc_host(size) host_ptr_b, ret = acl.rt.malloc_host(size) # 2.申请内存后,可向内存中读入数据,该自定义函数read_file由用户实现。 read_file(fileName, host_ptr_a, size) # 3.同步内存复制。 # 同步内存复制,host_ptr_a表示Host上源内存地址的指针地址,host_ptr_b表示Host上目的内存地址的指针地址,size表示内存大小。 # ACL_MEMCPY_HOST_TO_HOST = 0 ret = acl.rt.memcpy(host_ptr_b, size, host_ptr_a, size, ACL_MEMCPY_HOST_TO_HOST) # 4.使用完内存中的数据后,需及时释放资源。 ret = acl.rt.free_host(host_ptr_a) ret = acl.rt.free_host(host_ptr_b) # ...... |
父主题: 数据传输