欢迎光临散文网 会员登陆 & 注册

【2023 · CANN训练营第一季】内存管理&数据运输初探

2023-05-07 20:38 作者:白子不摆烂版  | 我要投稿

2023 · CANN训练营第一季】内存管理&数据运输初探

一、接口简介

Note:

1.在Device侧,任何用于参与ACL运算的内存,都不能用C/C++原生的(Malloc、new),需要调用ACL的内存管理接口

2.所有的加速运算(数据集、模型等)都在Device侧运行计算。

3.以下接口都有对应的非同步接口,非同步接口查看是否完成需要用到aclrtSynchronizeStream查看是否Stream运行完成

接口:

aclError aclrtMalloc(void devPtr, size_t size, aclrtMemMallocPolicy policy) //在Device上申请size大小的线性内存,通过*devPtr返回已分配内存的指针,同步接口。通过该接口申请的Device内存都支持cache缓存,不需要用户处理cpu与npu之间的cache一致性。

aclError aclrtFree(void *devPtr)//释放Device上的内存,同步接口。只能释放非Host端申请的内存

aclError aclrtMallocHost(void hostPtr, size_t size) //应用在Host上运行时,调用该接口申请的是Host内存,由系统保证内存首地址64字节对齐。在Device侧用这个接口还是申请的device内存,不过需要首地址用户来对其64字节

aclError aclrtFreeHost(void *hostPtr) //释放aclrtMallocHost申请的内存,同步接口

aclError aclrtMemset (void *devPtr, size_t maxCount, int32_t value, size_t count) //初始化内存,将内存中的内容设置为指定的值,同步接口。

aclError aclrtMemcpy(void *dst, size_t destMax, const void *src, size_t count, aclrtMemcpyKind kind) //实现Host内、Host与Device之间、Device内、Device间的同步内存复制。

aclError aclrtGetMemInfo(aclrtMemAttr attr, size_t free, size_t total) //获取指定属性的内存的空闲大小和总大小。同步接口。

二、代码验证学习

Cmake编译: 

运行结果: 

三、速度测试

搬移速度测试如下:(只是简单测试。没有测试的很全)


ps:该文仅是为了记录CANN训练营的学习过程所用,不参与任何商业用途,有代码问题可以私下与我交流修改


【2023 · CANN训练营第一季】内存管理&数据运输初探的评论 (共 条)

分享到微博请遵守国家法律