Page 386 - 《软件学报》2025年第10期
P. 386
杨乐 等: BIVM: 类脑计算编译框架及其原型研究 4783
生成的这两个应用的性能, 并与 NEST 与 SpikingJelly 框架进行对比 (性能对比见图 4).
4.3.1 Brunel 神经网络模拟
Brunel 神经网络是计算神经学领域中一类典型的网络形式, 包含兴奋性神经元组和抑制性神经元组, 组间按
照一定概率相连. 我们将 BIVM 与 NEST 框架进行性能对比.
如表 5 所示, 测试的 Brunel 神经网络包含大小分别为 8 000 和 2 000 的 Izhikevich 两个神经元组, 并以 10% 的
概率相互连接, 连接权重固定. Izhikevich 神经元组参数固定为 NEST 框架中的默认值, 但参数恒定电流 (i e ) 调整至
50 pA. 在此系列参数下, 神经元的平均发放率约为 100 Hz. 测试中时间步设定为 1 ms, 并运行 10 s (10 000 个时间步).
表 5 Brunel 神经网络参数说明
网络规模与参数 说明
神经元规模 兴奋性神经元组: 8 000, 抑制性神经元组: 2 000
突触规模 10 7
神经元类型 Izhikevich
神经元参数 a: 0.02, b: 0.2, c: −65.0, d: 8.0, i e : 50.0 pA, v th : 30.0 mV
突触类型 静态突触
突触参数 兴奋性突触权重w: 0.005 pA, 抑制性突触权重w: −0.001 pA
本研究开展了消融测试, 对比了不同优化选项对 BIVM 执行时间的影响. 测试采用了如下的优化方法: 对神
经元组与突触组进行合并、对神经元更新操作使用 SIMD 向量化、对脉冲传播操作使用不同的稀疏格式运算.
表 6 展示了消融测试结果. 其中, 对脉冲传播操作进行优化的加速效果最优, 连接矩阵转换为稀疏格式方法可以达
到 4.04 倍加速比 (72.406→17.896). 神经元组与突触组合并带来了 36.94% 的性能提升 (17.896→13.068), 而神经
元更新操作使用 SIMD 向量化带来了 4.98% 的性能提升 (13.068→12.448).
表 6 Brunel 神经网络消融测试
神经元更新操作方法 元组合并 脉冲传播操作方法 执行时间 (s)
标量计算 × 发放状态稀疏 72.406
标量计算 × 发放状态、连接矩阵均稀疏 17.896
标量计算 √ 发放状态、连接矩阵均稀疏 13.068
SIMD向量化 √ 发放状态、连接矩阵均稀疏 12.448
最终, 我们对比了 BIVM 与 NEST 的网络模拟时间 (除去模型加载与编译部分). NEST 配置为 8 线程并行运
行, 其模拟运行时间为 29.369 s; BIVM 的模拟运行时间为 12.448 s, 性能是前者的 2.35 倍. 性能的差异主要来自我
们针对脉冲传播过程的稀疏性进行优化, 而 NEST 并没有对此做额外支持.
4.3.2 MNIST 分类任务
MNIST 是一个经典的数字分类任务 (参数设置见表 7), 我们对比了 BIVM 与 SpikingJelly 在 MNIST 上的性
能. MNIST 网络是一个双层 SNN 网络, 分为输入层与输出层; 输入层接受大小为 28×28 的图片转换得到的脉冲编
码作为输入. 脉冲编码使用泊松分布生成, 其能产生与输入值 x 对应的并满足泊松分布的脉冲序列 (平均间隔 1/x
个时间步进行一次发放). 输出层包含 10 个 LIF 神经元, 分别对应 MNIST 任务中 10 种数字的分类, 最终会使用
Softmax 函数选择一段时间内输出层中发放次数最多的神经元而得到分类结果. 输入层与输出层之间使用静态突
触以全连接方式相连, 权重通过 SpikingJelly 框架训练得到, 分类精度为 92.4%.
针对 CPU 后端, 我们对比了 BIVM 与 SpikingJelly 在 MNIST 推理任务上的执行时间. 进行推理任务时, 首先
需要根据权重加载网络模型, 再以 1 ms 为时间步运行 0.1 s (100 时间步), 并统计输出层的累计发放次数得到结果
并确认准确性.
除去模型的加载以及预处理时间, SpikingJelly 处理一张图片的平均时间为 10.104 ms; BIVM 处理一张图片的
平均时间为 0.614 ms, 性能为前者的 16.45 倍. 产生此差距的原因一方面在于 SpikingJelly 基于 PyTorch 实现, 会在
运行时引入额外开销, 另一方面 SpikingJelly 并没有针对脉冲张量的稀疏性进行优化.

