开发者
资源

概述

【优先级】高

【概述】

为了提高数据访问的效率和吞吐量,Unified Buffer采用了大小相等的内存模块(bank)结构设计。当多条读写指令同时访问Unified Buffer时,由于硬件资源的限制,这些指令不能同时执行,从而引发bank冲突。在这种情况下,指令需要排队等待资源,无法在一个指令周期内完成。

  • 针对NPU架构版本220x

    UB总大小为192KB,包含16个bank group,每个bank group包含3个bank。每个bank大小为4KB,由128行组成,每行长度为32B。

    • 读写冲突:读操作和写操作同时尝试访问同一个bank。
    • 写写冲突多个写操作同时尝试访问同一个bank group
    • 读读冲突多个读操作同时尝试访问同一个bank group
  • 针对Atlas 350 加速卡

    UB总大小为256KB,包含8个bank group,每个bank group包含2个bank。每个bank大小为16KB,由512行组成,每行长度为32B。

    • 读写冲突:读操作和写操作同时尝试访问同一个bank。
    • 写写冲突:多个写操作同时尝试访问同一个bank group。
    • 读读冲突:两个读操作同时尝试访问同一个bank,或者两个以上读操作同时尝试访问同一个bank group。
可以看出bank冲突的场景与Unified Buffer的规格密切相关,规格的变化通常会导致bank冲突场景的变化。
  • 由于Atlas 350 加速卡的bank group上有两组读口和写口,因此两次读操作访问同一个bank group的不同bank时,不会引起冲突。
  • 假设读指令操作的地址为0x0000(bank0),写指令操作的地址为0x10000 ,在NPU架构版本220x中,地址0x10000(bank16)不会发生读写冲突,而在Atlas 350 加速卡中,这个地址0x10000(bank0)会引发读写冲突。

下文介绍不同硬件架构下如何避免bank冲突。