函数:mem_flush
函数: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表示成功。 - 返回其它值表示失败。 |
| 约束说明 | 无 |
| 参考资源 | 接口调用示例,参见数据传输。 |
父主题: 内存管理
在线提单