---
title: aclrtMemMallocPolicy
description: "```"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/runtimeapi/aclcppdevg_03_1349.html
sourcePath: /source/zh/canncommercial/900/API/runtimeapi/aclcppdevg_03_1349.html
indexId: cc182e4b63bbbcd2a7dd8ea09781ee3f333104491701877ca333df6c938c80d768
---
# aclrtMemMallocPolicy

```
typedef enum aclrtMemMallocPolicy {
    ACL_MEM_MALLOC_HUGE_FIRST,
    ACL_MEM_MALLOC_HUGE_ONLY,
    ACL_MEM_MALLOC_NORMAL_ONLY,
    ACL_MEM_MALLOC_HUGE_FIRST_P2P,
    ACL_MEM_MALLOC_HUGE_ONLY_P2P,
    ACL_MEM_MALLOC_NORMAL_ONLY_P2P,
    ACL_MEM_MALLOC_HUGE1G_ONLY, 
    ACL_MEM_MALLOC_HUGE1G_ONLY_P2P,
    ACL_MEM_TYPE_LOW_BAND_WIDTH   = 0x0100U,
    ACL_MEM_TYPE_HIGH_BAND_WIDTH  = 0x1000U,
    ACL_MEM_ACCESS_USER_SPACE_READONLY = 0x100000U,
} aclrtMemMallocPolicy;
```

此处支持单个枚举项，也支持多个枚举项位或：

- 配置单个枚举项：

  - 若配置ACL_MEM_TYPE_LOW_BAND_WIDTH或ACL_MEM_TYPE_HIGH_BAND_WIDTH，则系统内部会默认采取ACL_MEM_MALLOC_HUGE_FIRST，优先申请大页。
  - 若配置除ACL_MEM_TYPE_LOW_BAND_WIDTH、ACL_MEM_TYPE_HIGH_BAND_WIDTH之外的其它值，则系统内部会根据硬件支持情况选择从高带宽或低带宽物理内存申请内存。
- 配置多个枚举项位或：
  支持这三项（ACL_MEM_MALLOC_HUGE_FIRST、ACL_MEM_MALLOC_HUGE_ONLY、ACL_MEM_MALLOC_NORMAL_ONLY）与这两项（ACL_MEM_TYPE_LOW_BAND_WIDTH、ACL_MEM_TYPE_HIGH_BAND_WIDTH）组合，例如：ACL_MEM_MALLOC_HUGE_FIRST | ACL_MEM_TYPE_HIGH_BAND_WIDTH


**表1 枚举项说明**

| 枚举项 | 说明 |
| --- | --- |
| ACL\_MEM\_MALLOC\_HUGE\_FIRST | 申请大页内存，内存申请粒度为2M，不足2M的倍数，向上2M对齐。 当申请的内存小于等于1M时，即使使用该内存分配规则，也是申请普通页的内存。当申请的内存大于1M时，优先申请大页内存，如果大页内存不够，则使用普通页的内存。 |
| ACL\_MEM\_MALLOC\_HUGE\_ONLY | 申请大页内存，内存申请粒度为2M，不足2M的倍数，向上2M对齐。 配置该选项时，表示仅申请大页，如果大页内存不够，则返回错误。 |
| ACL\_MEM\_MALLOC\_NORMAL\_ONLY | 仅申请普通页，如果普通页内存不够，则返回错误。 |
| ACL\_MEM\_MALLOC\_HUGE\_FIRST\_P2P | 两个Device之间内存复制场景下使用该选项申请大页内存，内存申请粒度为2M，不足2M的倍数，向上2M对齐。 配置该选项时，表示优先申请大页内存，如果大页内存不够，则使用普通页的内存。 Atlas 350 加速卡，支持该选项。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ，支持该选项。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ，支持该选项。 Atlas 200I/500 A2 推理产品 ，不支持该选项。 Atlas 推理系列产品 ，支持该选项。若涉及集合通信业务，通信域初始化需要在其他任何涉及Device内存申请的操作之前，否则可能因P2P内存不足导致初始化失败。 Atlas 训练系列产品 ，支持该选项。 |
| ACL\_MEM\_MALLOC\_HUGE\_ONLY\_P2P | 两个Device之间内存复制场景下使用该选项申请大页内存，内存申请粒度为2M，不足2M的倍数，向上2M对齐。 配置该选项时，表示仅申请大页内存，如果大页内存不够，则返回错误。 Atlas 350 加速卡，支持该选项。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ，支持该选项。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ，支持该选项。 Atlas 200I/500 A2 推理产品 ，不支持该选项。 Atlas 推理系列产品 ，支持该选项。若涉及集合通信业务，通信域初始化需要在其他任何涉及Device内存申请的操作之前，否则可能因P2P内存不足导致初始化失败。 Atlas 训练系列产品 ，支持该选项。 |
| ACL\_MEM\_MALLOC\_NORMAL\_ONLY\_P2P | 两个Device之间内存复制场景下使用该选项，表示仅申请普通页的内存。 Atlas 350 加速卡，支持该选项。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ，支持该选项。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ，支持该选项。 Atlas 200I/500 A2 推理产品 ，不支持该选项。 Atlas 推理系列产品 ，支持该选项。若涉及集合通信业务，通信域初始化需要在其他任何涉及Device内存申请的操作之前，否则可能因P2P内存不足导致初始化失败。 Atlas 训练系列产品 ，支持该选项。 |
| ACL\_MEM\_MALLOC\_HUGE1G\_ONLY | 申请大页内存，内存申请粒度为1G，不足1G的倍数，向上1G对齐。例如申请1.9G时，按向上对齐的原则，实际会申请2G。 配置为该选项时，表示仅申请大页，如果大页内存不够，则返回错误。 该选项与ACL\_MEM\_MALLOC\_HUGE\_ONLY选项相比，ACL\_MEM\_MALLOC\_HUGE\_ONLY的内存申请粒度为2M，如果要申请1G大小的大页内存，会占用1024/2=512个页表，但ACL\_MEM\_MALLOC\_HUGE1G\_ONLY的内存申请粒度为1G，1G大页内存只占用1个页表，能有效降低页表数量，有效扩大TLB（Translation Lookaside Buffer）缓存的地址范围，从而提升离散访问的性能。TLB是AI处理器中用于高速缓存的硬件模块，用于存储最近使用的虚拟地址到物理地址的映射。 Atlas 350 加速卡，支持该选项。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ，支持该选项。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ，支持该选项。 Atlas 200I/500 A2 推理产品 ，不支持该选项。 Atlas 推理系列产品 ，不支持该选项。 Atlas 训练系列产品 ，不支持该选项。 |
| ACL\_MEM\_MALLOC\_HUGE1G\_ONLY\_P2P | 两个Device之间内存复制场景下使用该选项申请大页内存，内存申请粒度为1G，不足1G的倍数，向上1G对齐。例如申请1.9G时，按向上对齐的原则，实际会申请2G。 配置为该选项时，表示仅申请大页，如果大页内存不够，则返回错误。 该选项与ACL\_MEM\_MALLOC\_HUGE\_ONLY\_P2P选项相比，ACL\_MEM\_MALLOC\_HUGE\_ONLY\_P2P的内存申请粒度为2M，如果要申请1G大小的大页内存，会占用1024/2=512个页表，但ACL\_MEM\_MALLOC\_HUGE1G\_ONLY\_P2P的内存申请粒度为1G，1G大页内存只占用1个页表，能有效降低页表数量，有效扩大TLB（Translation Lookaside Buffer）缓存的地址范围，从而提升离散访问的性能。TLB是AI处理器中用于高速缓存的硬件模块，用于存储最近使用的虚拟地址到物理地址的映射。 Atlas 350 加速卡，支持该选项。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ，支持该选项。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ，支持该选项。 Atlas 200I/500 A2 推理产品 ，不支持该选项。 Atlas 推理系列产品 ，不支持该选项。 Atlas 训练系列产品 ，不支持该选项。 |
| ACL\_MEM\_TYPE\_LOW\_BAND\_WIDTH | 从带宽低的物理内存上申请内存。 设置该选项无效，系统默认会根据硬件支持的内存类型选择。 |
| ACL\_MEM\_TYPE\_HIGH\_BAND\_WIDTH | 从带宽高的物理内存上申请内存。 设置该选项无效，系统默认会根据硬件支持的内存类型选择。 |
| ACL\_MEM\_ACCESS\_USER\_SPACE\_READONLY | 用于控制申请的内存在用户态为只读，若在用户态修改此内存都会导致失败。 |
