Page 377 - 《软件学报》2025年第10期
P. 377

4774                                                      软件学报  2025  年第  36  卷第  10  期


                 植性  (portability)、(高) 生产力  (productivity) 和  (高) 性能  (performance).
                    MLIR  是著名的通用计算编译器基础设施            LLVM  的子项目, 被称为后摩尔时代的编译器基础设施               [36] , 提供一
                 系列可复用、易扩展的基础组件, 包括中间表示                 (IR) 的规范, 并提供一个可扩展的编译框架来进行              IR  的递降
                 (lowering).
                    相较于   LLVM, MLIR  关键特色之一是      progressivity, 即能够通过多层  IR  将高层表示逐步递降       (progressive
                 lowering) 和优化为针对各种架构的低级抽象, 而且支持在同一层               IR  中混合不同的抽象层次和概念. BIVM         充分利
                 用  MLIR  上述特点开展设计, 以应对第        2.1  节提到的挑战. 具体来说, 设计了从高到低           3  个层级的  IR, 并融合到
                 MLIR  中, 具体如图  2  所示.





                                                                 细粒度神经元更新操作    数据流架构 IR        ReRAM
                                                                     复用
                                                                  粗粒度脉冲传播操作               目
                                                                 适配硬件交叉开关阵列               标
                      类脑应用      SNN                     SNN                               硬
                     脉冲神经网络     描     SNN    高层语义优化   低层语义 IR    细粒度神经元更新操作               件
                                                                 SIMD 指令向量化优化
                                                      粗粒度/细粒度
                       (SNN)    述   高层语义 IR   (空间并行)  神经元更新操作     细粒度脉冲传播操作     传统架构 IR   适     CPU
                      通用描述      转                     粗粒度/细粒度       稀疏性优化                 配
                                化                      脉冲传播操作                              /
                                                                 细粒度神经元更新操作
                                                                   配置计算单元                 映
                                                                  细粒度脉冲传播操作               射
                                                                   配置计算单元
                                                                               混合流架构 IR        GaBAN
                                                   图 2 BIVM  整体示意图

                    第  1  层  IR  主要由我们提出的   SNN  方言组成, 包含   SNN  应用相关的数据类型       (data types)、属性  (attributes)
                 和操作   (operations). 方言  (dialect) 是  MLIR  的重要组成部分, 每类方言可以定义特定于编程语言、领域专用语言
                 (domain specific language, DSL) 或硬件目标的新操作和类型.
                    第  1  层  IR  强调  SNN  中神经元组  (neuron population)、突触组  (synapse projection) 的主体性以及对应的语义,
                 描述  SNN  神经元更新和脉冲传播计算流程及其时空并行特性. 这样在递降到下一层                       IR  的过程中可针对这些性质
                 引入典型的    SNN  计算、数据布局和调度优化技术, 并且不影响其他优化, 例如, 在时间维度上并行化                        SNN  计算中
                 的时间步, 或在空间维度上合并相似神经元或突触结构                  (目前采用的面向     SNN  或者类脑后端的编译优化技术的归
                 纳请见表   2).
                    此外, 由于脉冲张量稀疏性等特性需要反映到硬件相关的存储计算过程中, 所以在第                           1  层  IR  中声明的这些属
                 性需要在递降中被传播到下一层            IR (具体见第  3  节). 对应的, SNN  方言引入一类特殊的数据类型脉冲张量             (spike
                 tensor), 被用于描述  SNN  计算过程中产生的神经元发放情况, 它们只包含             0/1  元素并具有稀疏性.
                    第  2  层  IR  将  SNN  的高层语义转化为低层语义, 对第    1  层  IR  中  SNN  的各个主体进行存储、计算以及控制流
                 方面的递降, 特色在于可面向迥异的类脑处理器架构选择不同粒度的抽象.
                    比如, 针对提供细粒度软硬件接口的后端硬件, 可以在第                2 层  IR  中递降为细粒度描述, 即使用     MLIR  的 memref、
                 scf、sparse tensor 和  linalg  等方言来描述神经元和脉冲传播操作的内部访存、计算过程, 从而更容易转变为底层
                 抽象; 而针对粗粒度接口       (如神经元模型粒度的接口, 和以交叉开关结构为运算主体的接口), 则可以维持粗粒度描述.
                    这样, 针对不同后端架构的计算特性, 第            2  层  IR  可灵活地组合不同粒度的抽象. 如基于        ReRAM  的类脑计算
                 架构因使用交叉开关阵列来加速脉冲传播的计算, 故可使用粗粒度的脉冲传播操作来描述, 而将神经元更新操作
                 递降为细粒度描述. 这种设计方式符合            MLIR  中  progressivity  的设计思路, 使得不同级别的软件模块可轻松复用,
                 并可以针对不同后端架构灵活选择与组合编译优化方法                   (如在我们设计的第       2  层  IR  向第  3  层递降过程中, 可以针
   372   373   374   375   376   377   378   379   380   381   382