Page 381 - 《软件学报》2025年第10期
P. 381
4778 软件学报 2025 年第 36 卷第 10 期
脉冲传播阶段前完成即可. 这样相同类型的神经元组更新可以并行处理, 而由下面的 IR 层级决定具体并行化策略;
同样可以对脉冲传播阶段做类似并行化处理. 此类优化与后续的优化措施是相互独立的.
具体实例请见图 3(b2): 将第 1 层 IR (图 3(b1)) 中的相同类型的神经元组 (2 个 snn.newlif 声明) 和突触组 (4 个
snn.newstatic 声明) 分别合并为规模更大的单一神经元组和单一突触组, 即图 3(b2) 中的 snn.newlif 与 snn.newstatic,
并且在计算阶段只需调用一次计算过程; 这给予了下面 IR 层级更大优化空间.
3.3 第 2 层 IR
针对不同后端架构的计算特性, 第 2 层 IR 可灵活地组合不同粒度的计算过程描述. 在第 1 层 IR 到第 2 层 IR
的递降过程中, 可以选择沿用第 1 层 IR 中的粗粒度描述方式, 或是使用更低级的 MLIR 方言对各个操作的存储、
计算以及控制流进行详细描述. 粗粒度的 IR 描述了操作的类型与其输入输出变量, 这种表示适用于 TrueNorth、
BrainScaleS 等类脑芯片, 它们将神经元模型粒度的硬件功能暴露出来作为粗粒度接口. 细粒度的 IR 则描述了操
作内部的计算过程, 通过 MLIR 中内置的 memref、scf、arith 和 linalg 等方言对计算过程进行描述, 从而适合如 CPU、
SpiNNaker 等采用通用指令集的架构. 组合不同粒度的 IR 描述可以发挥 MLIR 中 progressivity 的特性, 提高复用
与开发效率, 并使得底层优化技术可自由选用, 实现不同后端上的高性能.
例如, 数据流 ReRAM 后端可使用交叉开关阵列对脉冲传播计算进行加速, 所以其脉冲传播操作在第 2 层 IR
中需要维持粗粒度的描述方式, 此方式可直接将突触权值、脉冲发放状态映射到交叉开关阵列上, 而无需将其递
降为更细粒度的描述方式. 但同时, 神经元更新操作仍需递降为细粒度描述.
图 3(c) 展示了 Brunel 神经网络的第 2 层 IR. 在网络模拟阶段, 神经元更新操作可以维持第 1 层 IR 中的粗粒
度表示 (x1); 也可以递降为细粒度表示 (x2), 使用循环操作描述每一个神经元根据方程更新内部状态的计算过程.
同理, 脉冲传播操作可以根据后端选用粗粒度表示 (y1) 或细粒度表示 (y2).
第 2 层 IR 的细粒度表示主要使用 MLIR 内置方言对各类操作的存储、计算及控制流进行表示, 具体如下.
● memref 方言用作 SNN 模型中的神经元内部状态存储, 通过声明 memory buffer 来指示变量的存储空间. 由
于 SNN 中存储的变量会被反复改写, 因此不适合使用 MLIR 中的 tensor 方言来存储 (MLIR 中的 tensor 值无法被
修改, 多用于存储 DNN 中的 feature maps).
● sparse tensor 方言用作稀疏张量存储. sparse tensor 方言提供了一套通用的张量稀疏存储格式, 例如可声明
突触权值矩阵使用稀疏格式进行存储. 其优势还在于实现了一系列稀疏张量操作, 在操作过程中只需要附加稀疏
属性, 而不会破坏张量运算描述的原有结构.
● scf 方言和 linalg 方言用作描述 SNN 计算流程中的控制流. linalg 方言是对高层控制流的描述, 可以抽象地
表示一个张量计算的过程, 并且自动完成到低层的递降. scf 方言则通过 if 操作和 for 操作来描述低层控制流, 在
计算规则较为固定的时候可以更好地实现优化.
● arith 方言用于描述 SNN 的核心计算. arith 可以实现对标量或向量的基础计算, 是一个 MLIR 核心方言, 贯
穿整个递降过程.
3.4 第 3 层 IR
在 MLIR 框架下不同后端的第 3 层 IR 既有差异部分, 也有复用部分, 从而在确保定制优化的前提下, 提高开
发效率. 不失一般性, 本文工作主要针对 3 类硬件后端, 即传统控制流后端 CPU、基于 ReRAM 交叉开关结构实现
的数据流后端 (简称为 ReRAM 后端)、基于 FPGA 实现的混合架构后端芯片 GaBAN (简称为 GaBAN 后端). 第 2
层 IR 到第 3 层 IR 的递降过程需要结合硬件后端特性, 针对特定操作进行改写与递降以适配计算方式.
具体而言, 控制流架构在第 3 层 IR 中继续延续第 2 层 IR 中的细粒度描述, 利用 SNN 的底层语义对网络中神
经元/突触的存储、更新传播过程中的内部状态计算, 以及模拟过程的控制流进行优化 (见第 3.4.1 节). 数据流 ReRAM
后端通过其完成计算的功能主体 (交叉开关结构), 对脉冲传播计算进行加速, 即通过对第 2 层 IR 中粗粒度的脉冲
传播过程进行改写, 并额外处理其存储和计算过程, 使其与交叉开关结构的计算方式相匹配 (ReRAM 后端的详细
说明请见附录 B); 而对神经元更新操作, 仍采用第 2 层 IR 的细粒度描述 (见第 3.4.2 节). GaBAN 后端的第 3 层

