aclrtMemMallocPolicy
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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
枚举项说明如下:
- 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 200I/500 A2 推理产品 不支持该选项。对于
Atlas 推理系列产品 ,若涉及集合通信业务,通信域初始化需要在其他任何涉及Device内存申请的操作之前,否则可能因P2P内存不足导致初始化失败。 - ACL_MEM_MALLOC_HUGE_ONLY_P2P
两个Device之间内存复制场景下使用该选项申请大页内存,内存申请粒度为2M,不足2M的倍数,向上2M对齐。
配置该选项时,表示仅申请大页内存,如果大页内存不够,则返回错误。
Atlas 200I/500 A2 推理产品 不支持该选项。对于
Atlas 推理系列产品 ,若涉及集合通信业务,通信域初始化需要在其他任何涉及Device内存申请的操作之前,否则可能因P2P内存不足导致初始化失败。 - ACL_MEM_MALLOC_NORMAL_ONLY_P2P
两个Device之间内存复制场景下使用该选项,表示仅申请普通页的内存。
Atlas 200I/500 A2 推理产品 不支持该选项。对于
Atlas 推理系列产品 ,若涉及集合通信业务,通信域初始化需要在其他任何涉及Device内存申请的操作之前,否则可能因P2P内存不足导致初始化失败。 - 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 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 200I/500 A2 推理产品 、Atlas 推理系列产品 、Atlas 训练系列产品 ,不支持该选项。 - ACL_MEM_TYPE_LOW_BAND_WIDTH
设置该选项无效,系统默认会根据硬件支持的内存类型选择。
- ACL_MEM_TYPE_HIGH_BAND_WIDTH
设置该选项无效,系统默认会根据硬件支持的内存类型选择。
- ACL_MEM_ACCESS_USER_SPACE_READONLY