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

杨乐 等: BIVM: 类脑计算编译框架及其原型研究                                                      4781


                    从第  2  层  IR  到第  3  层  IR  的递降过程首先需要将各类操作中循环体内部的计算过程提取到循环外的代码块
                 中. 第  2  层  IR  中神经元更新、脉冲传播操作的内部调用依赖关系可视作对应静态单赋值                     (static single-assignment,
                 SSA) 代码的输入、输出关系, 通过对         SSA  代码的分析, 可以将一个时间步内的模拟计算过程转换为                 GaBAN  指令
                 集中对应的向量指令和相应的循环上下界, 最后增加额外的配置写入和同步逻辑. 图                           3(d3) 展示了  Brunel 神经网
                 络递降到   GaBAN  后端的第   3  层  IR.
                    ● 硬件执行
                    在进一步的递降过程中, GaBAN         方言的计算操作会被转化为           LLVM IR  中的专用指令    (通过  Intrinsic 形式),
                 并最终转换为     GaBAN  指令序列. 控制核心将首先运行计算核心的配置过程, 再触发计算核心开始执行第                          3  层  IR
                 转化得到的指令序列以完成网络模拟中的计算过程. 最终等待全部计算完成后, 控制核心收集计算核心的输出, 得
                 到模拟结果.
                  4   对于不同硬件的支持与优化效果评测

                    在本节中, 通过若干示例评估          BIVM  系统的可用性及其编译优化效果. 对于           CPU  后端, 我们评估了脉冲传播
                 操作的稀疏性优化、神经元组合并与向量化等多种优化方法的效果; 对                       Brunel 和  MNIST  推理任务这两个分别代
                 表计算神经学领域与        AI 应用领域的测例进行了端到端测试, 并与广泛应用于这两个领域的                     CPU  端  SNN  模拟框
                 架进行了性能对比. 针对      ReRAM, 本文通过    MNIST  推理任务验证了其运行的正确性. 在         GaBAN  后端上测试了    Brunel
                 与  MNIST  分类任务, 在验证正确性的同时, 比较了         BIVM 与其原生工具链的效果.
                    具体的测试环境如下: CPU        后端的运行环境为       AMD EPYC 7742 64-Core Pro; ReRAM  后端通过软件模拟实
                 现  [15] ; GaBAN  基于  FPGA  实现, 具体设备为  Xilinx Virtex UltraScale+ HBM VCU128  评估板, 使用的综合工具为
                 Xilinx Vivado (2020.2  版). 实验执行的操作系统为  Ubuntu 20.04, 编译器为  GCC 9.4.0.
                    作为对比的     SNN  模拟框架分别为     NEST (使用具有    Python  接口的  PyNEST 2.20  版, 这是一个常用的生物神
                 经网络模拟框架, 侧重于神经系统动力学以及结构的模拟) 与                   SpikingJelly (0.6  版, 这是一个基于  PyTorch  的支持
                 SNN  的开发与模拟工具, 可以训练与运行          SNN).
                    最后需要指出的是, 针对不同优化选项与此              3 类后端, 这两类   Benchmark 的  BIVM  编译时间范围是   0.17–0.28 s,
                 远小于目标程序的运行时间.
                  4.1   脉冲传播操作性能优化评测
                    我们针对    SNN  的稀疏性设计了脉冲张量这一数据类型, 并且在第               2  层  IR  递降过程中针对脉冲传播过程进行
                 优化. 这里就针对该类稀疏性进行不同编译优化策略的效果对比, 具体如下: (1) 均视作稠密张量; (2) 利用脉冲张
                 量的稀疏性; (3) 利用脉冲张量与连接矩阵的稀疏性. 同时, 我们也测试了方法                    (2) 与  (3) 上使用  SIMD  向量化的性
                 能对比. 通过调整发放状态和连接矩阵的非零元比例, 可得到不同稀疏度下各方法的性能表现.
                    我们设定发放状态的大小为           5 000, 其发放率被设定为      1%、5%、10%, 代表神经网络不同的发放情况, 运
                 行时随机选取对应比例的神经元并设置其为发放状态. 连接矩阵的基础规模为                            5000×5000, 突触均使用静态类
                 型, 矩阵的非零元比例设定为         10%  与  100%, 代表计算神经学与     D-SNN  两类应用的连接情况: 前者较为稀疏, 随
                 机地将   10%  的突触权重设定为非零; 后者则使用全连接层进行连接. 我们重复运行脉冲传播过程                            5 000  次, 最
                 终得到表    4  测试结果. 对于均视作稠密张量处理的方法, 由于计算量较为一致, 运行时间不随发放率与连接密
                 度明显变化.
                    利用发放状态稀疏性的方法运行速度取决于脉冲张量的稀疏度, 在                      1%、5%、10%   发放率的情况下其加速比
                 可分别达到    98.02  倍、21.77  倍、10.57  倍, 接近理论加速比. 进一步地, 在此方法上使用         SIMD  指令向量化可实现
                 约 3.96  倍的性能提升. 同时利用连接矩阵与发放状态稀疏性的方法取决于两者的稀疏度. 当连接密度为                             10%  时,
                 在  1%、5%、10%  发放率的情况下, 相对于只利用发放状态稀疏性的方法, 其加速比可分别达到                        1.49 倍、3.67 倍、
                 5.20  倍; 但当连接密度为   100%, 即矩阵不再具有稀疏性时, 此方法会发生退化, 执行时间反而增加. 进一步地, 在此
   379   380   381   382   383   384   385   386   387   388   389