避免bank冲突(NPU架构版本220x)

【优先级】高

该性能优化建议适用于如下产品型号:

  • Atlas A3 训练系列产品 / Atlas A3 推理系列产品
  • Atlas A2 训练系列产品 / Atlas A2 推理系列产品

【描述】为了提高数据访问的效率和吞吐量,Unified Buffer采用了bank(大小相等的内存模块)结构设计。Unified Buffer总大小为192K,划分为48个bank。每个bank由128行组成,每行长度为32B。这48个bank进一步组织为16个bank group,每个bank group包含3个bank,例如bank15、bank31和bank47组成一个bank group。

图1 bank结构示意图(图中箭头方向表示内存排布的顺序)

每个bank可以独立地进行数据的读写操作,允许多个数据请求同时进行。然而,当多个读写操作试图同时访问同一个bank或bank group时,由于硬件资源的限制,这些操作必须排队等待,会导致bank冲突,引起性能下降。

具体来说,Vector计算单元每拍(一个指令周期)能够从每个bank group中读取或写入一行数据。如果同一个API中的多个操作试图同时访问同一个bank或bank group,Vector计算单元无法在同一个周期内处理所有请求,导致这些请求排队等待。这种排队增加了数据访问的延迟,降低了系统的整体性能。

bank冲突的典型场景

bank冲突主要可以分为以下三种场景:

下文给出了一些具体的示例,假设,0x10000地址在bank16上,0x10020在bank17上,0x20020在bank33上,如下图所示:

图2 地址分配示意图

通过msProf工具可以进行资源冲突占比的相关性能数据采集。

工具的具体使用方法和资源冲突占比文件性能数据文件说明请参考算子开发工具

如何避免bank冲突

避免bank冲突的方法有两种:优化计算逻辑优化地址分配