Skip to main content

函数:mem_invalidate

函数:malloc

C函数原型aclError aclrtMalloc(void **devPtr, size_t size, aclrtMemMallocPolicy policy)
Python函数dev_ptr, ret = acl.rt.malloc(size, policy)
函数功能在Device上申请size大小的线性内存,该接口对用户申请的size向上对齐成32字节整数倍后再多加32字节,并通过“dev_ptr”返回已分配内存的指针地址。同步接口。 通过该接口申请的Device内存都支持cache缓存,不需要用户处理CPU与NPU之间的cache一致性。 调用媒体数据处理的接口前,若需要申请Device上的内存存放输入或输出数据,需调用acl.media.dvpp_malloc申请内存。
输入说明size:int,申请内存的大小,单位Byte,size不能为0。 policy:int,内存分配规则。
- 0:ACL_MEM_MALLOC_HUGE_FIRST,当申请的内存小于等于1M时,即使使用该内存分配规则,也是申请普通页的内存。当申请的内存大于1M时,优先申请大页内存,如果大页内存不够,则使用普通页的内存。
- 1:ACL_MEM_MALLOC_HUGE_ONLY,仅申请大页,如果大页内存不够,则返回错误。
- 2:ACL_MEM_MALLOC_NORMAL_ONLY,仅申请普通页。
- 3:ACL_MEM_MALLOC_HUGE_FIRST_P2P,仅Device之间内存复制场景下申请内存时使用该选项,表示优先申请大页内存,如果大页内存不够,则使用普通页的内存。预留选项。
- 4:ACL_MEM_MALLOC_HUGE_ONLY_P2P,仅Device之间内存复制场景下申请内存时使用该选项,仅申请大页内存,如果大页内存不够,则返回错误。预留选项。
- 5:ACL_MEM_MALLOC_NORMAL_ONLY_P2P,仅Device之间内存复制场景下申请内存时使用该选项,仅申请普通页的内存。预留选项。
返回值说明dev_ptr:int,指向Device上已分配内存的指针地址。 ret:int,错误码。
- 返回0表示成功。
- 返回其它值表示失败。
约束说明- 使用acl.rt.malloc接口申请的内存,需要通过acl.rt.free接口释放内存。
- 频繁调用acl.rt.malloc接口申请内存、调用acl.rt.free接口释放内存,会损耗性能,建议用户提前做内存预先分配或二次管理,避免频繁申请/释放内存。
- 调用acl.rt.malloc接口申请内存时,会对用户输入的size按向上对齐成32字节整数倍后,再多加32字节。 若用户使用本接口申请大块内存并自行划分、管理内存时,每段内存需同时满足以下需求:
- 内存大小向上对齐成32整数倍加32字节(m = ALIGN_UP[len, 32] + 32字节)。
- 内存起始地址需满足64字节对齐(ALIGN_UP[m, 64])。(说明:len 表示某段内存的大小,ALIGN_UP[len, k]表示向上按k字节对齐:((len - 1) / k + 1) * k。)
参考资源接口调用示例,参见数据传输

父主题: 内存管理

函数:malloc_cached

C函数原型aclError aclrtMallocCached**(void **devPtr, size_t size, aclrtMemMallocPolicy policy)**
Python函数dev_ptr, ret = acl.rt.malloc_cached(size, policy)
函数功能申请Device上的内存,同步接口,该接口在任何场景下申请的内存都是支持cache缓存。在Device上申请size大小的线性内存,通过dev_ptr返回已分配内存的指针地址。 使用acl.rt.malloc_cached接口申请的内存与使用acl.rt.malloc接口申请的内存是等价的,都支持cache缓存。 调用媒体数据处理的接口前,若需要申请Device上的内存存放输入或输出数据,需调用acl.media.dvpp_malloc申请内存。
输入说明size:int,申请内存的大小,单位Byte。size不能为0。 policy:int,内存分配规则。
- 0:ACL_MEM_MALLOC_HUGE_FIRST,当申请的内存小于等于1M时,即使使用该内存分配规则,也是申请普通页的内存。当申请的内存大于1M时,优先申请大页内存,如果大页内存不够,则使用普通页的内存。
- 1:ACL_MEM_MALLOC_HUGE_ONLY,仅申请大页,如果大页内存不够,则返回错误。
- 2:ACL_MEM_MALLOC_NORMAL_ONLY,仅申请普通页。
- 3:ACL_MEM_MALLOC_HUGE_FIRST_P2P, 仅Device之间内存复制场景下申请内存时使用该选项,表示优先申请大页内存,如果大页内存不够,则使用普通页的内存。预留选项。
- 4:ACL_MEM_MALLOC_HUGE_ONLY_P2P,仅Device之间内存复制场景下申请内存时使用该选项,仅申请大页内存,如果大页内存不够,则返回错误。预留选项。
- 5:ACL_MEM_MALLOC_NORMAL_ONLY_P2P,仅Device之间内存复制场景下申请内存时使用该选项,仅申请普通页的内存。预留选项。
返回值说明dev_ptr:int,指向Device上已分配内存的指针地址。 ret:int,错误码。
- 返回0表示成功。
- 返回其它值表示失败。
约束说明其它约束与acl.rt.malloc接口相同。

父主题: 内存管理

函数:mem_flush

C函数原型aclError aclrtMemFlush(void *devPtr, size_t size)
Python函数ret = acl.rt.mem_flush(dev_ptr, size)
函数功能将cache中的数据刷新到DDR中,并将cache中的内容设置成无效。该版本不需要用户处理CPU与NPU之间的cache一致性,无需调用该接口。
输入说明**dev_ptr:**int,要flush的DDR内存起始地址。 size:int,要flush的DDR内存大小,单位Byte。“size”不能为0。
返回值说明ret:int,错误码。
- 返回0表示成功。
- 返回其它值表示失败。
约束说明

父主题: 内存管理

函数:mem_invalidate

C函数原型aclError aclrtMemInvalidate(void *devPtr, size_t size)
Python函数ret = acl.rt.mem_invalidate(dev_ptr, size)
函数功能将cache中的数据设置成无效。该版本不需要用户处理CPU与NPU之间的cache一致性,无需调用该接口。
输入说明**dev_ptr:**int,需要指定DDR内存对应的cache无效。 size:int,DDR内存大小,单位Byte。“size”不能为0。
返回值说明ret:int,错误码。
- 返回0表示成功。
- 返回其它值表示失败。
约束说明

父主题: 内存管理

函数:get_mem_info

C函数原型aclError aclrtGetMemInfo(aclrtMemAttr attr, size_t *free, size_t *total)
Python函数free, total, ret = acl.rt.get_mem_info(attr)
函数功能获取指定属性的pyACL应用可用内存的空闲大小和总大小,不包括系统预留内存大小。同步接口。 请根据实际硬件支持的情况,选择对应属性的内存,否则调用本接口获取到的空闲大小和总大小都为0。
输入说明**attr:**int,需要查询的内存的属性值。
- 0:ACL_DDR_MEM,DDR内存,DDR上所有大页内存 + 普通内存。
- 1:ACL_HBM_MEM,片上内存,片上内存上所有大页内存 + 普通内存。
- 2:ACL_DDR_MEM_HUGE,DDR大页内存。
- 3:ACL_DDR_MEM_NORMAL,DDR普通内存。
- 4:ACL_HBM_MEM_HUGE,片上内存大页内存。
- 5:ACL_HBM_MEM_NORMAL,片上内存普通内存。
- 6:ACL_DDR_MEM_P2P_HUGE,DDR中用于Device间数据复制的大页内存。预留选项。
- 7:ACL_DDR_MEM_P2P_NORMAL,DDR中用于Device间数据复制的普通内存。预留选项。
- 8:ACL_HBM_MEM_P2P_HUGE,片上内存中用于Device间数据复制的大页内存。预留选项。
- 9:ACL_HBM_MEM_P2P_NORMAL,片上内存中用于Device间数据复制的普通内存。预留选项。
返回值说明- free:int,对应属性的内存的空闲大小,单位Byte。
- total:int,对应属性的内存的总大小,单位Byte。
- ret:int,错误码。
- 返回0表示成功。
- 返回其它值表示失败。
约束说明调用本接口前是必须先指定用于计算的Device,因此本接口中不体现Device ID。

父主题: 内存管理

函数:free

C函数原型aclError aclrtFree(void *devPtr)
Python函数ret= acl.rt.free(dev_ptr)
函数功能释放Device上的内存,同步接口。 acl.rt.free接口只能释放通过acl.rt.malloc接口申请的内存。
输入说明dev_ptr:int,待释放内存的指针地址。
返回值说明ret:int,错误码。
- 返回0表示成功。
- 返回其它值表示失败。
约束说明
参考资源接口调用示例,参见数据传输

父主题: 内存管理

函数:malloc_host

C函数原型aclError aclrtMallocHost(void **hostPtr, size_t size)
Python函数host_ptr, ret= acl.rt.malloc_host(size)
函数功能应用在Host上运行时,调用该接口申请的是Host内存,由系统保证内存首地址64字节对齐。 应用在Device上运行时,调用该接口申请的是Device内存,且Device上的内存按普通页申请,如需首地址64字节对齐,需要用户自行处理对齐。同步接口。
输入说明size:int,申请内存的大小,单位Byte。size不能为0。
返回值说明host_ptr:int,指向Host上已分配内存的指针的指针地址。 ret:int,错误码。
- 返回0表示成功。
- 返回其它值表示失败。
约束说明- 使用acl.rt.malloc_host接口申请的内存,需要通过acl.rt.free_host接口释放内存。
- 频繁调用acl.rt.malloc_host接口申请内存、调用acl.rt.free_host接口释放内存,会损耗性能,建议用户提前做内存预先分配或二次管理,避免频繁申请/释放内存。
- 若用户使用本接口申请大块内存并自行划分、管理内存时,每段内存需同时满足以下需求:
- 内存大小向上对齐成32整数倍加32字节(m = ALIGN_UP[len, 32] + 32字节)。
- 内存起始地址需满足64字节对齐(ALIGN_UP[m, 64])。(说明:len表示某段内存的大小,ALIGN_UP[len, k]表示向上按k字节对齐:((len - 1) / k + 1) * k。)
参考资源接口调用示例,参见数据传输

父主题: 内存管理

在线提单