Page 380 - 《软件学报》2025年第10期
P. 380
杨乐 等: BIVM: 类脑计算编译框架及其原型研究 4777
表 3 SNN 方言中的操作、数据类型与属性
内容 方言命令 说明
snn.newlif 定义LIF神经元组
snn.newstatic 定义静态突触组
神经元/突触定义操作
snn.newizhikevich 定义Izhikevich神经元组
snn.newpoisson 定义Poisson神经元组
snn.lif LIF神经元更新
snn.static 静态突触脉冲传播
神经元/突触计算操作
snn.izhikevich Izhikevich神经元更新
snn.poisson Poisson神经元更新
数据类型 spike_tensor 脉冲张量类型
属性 sparse_tensor encoding 稀疏矩阵格式
● SNN 操作
SNN 目前已经实现的操作主要包含神经元/突触定义操作和神经元/突触计算操作两类. 前者负责定义与初始
化各类型的神经元组和突触组, 在网络定义阶段使用; 后者描述了各类型的神经元组的更新与突触组的脉冲传播
过程, 在网络模拟的阶段被调用. 目前支持的神经元类型包括 LIF、Izhikevich 与 Poisson (泊松编码神经元), 突触
类型包括静态突触; 未来可支持更多模型. Brunel 神经网络的第 1 层 IR 描述如图 3(b1) 所示.
使用这类粒度较大的描述的原因在于, 虽然神经元的内部状态可以拆分为若干独立的向量, 内部更新的计算
过程也可以拆分成若干 element-wise 的向量计算, 但这种细粒度的描述方法存在如下问题: 一方面, 这种描述会丢
失掉部分 SNN 的语义, 例如在某类型神经元当中, 某些状态的取值范围较为有限, 或是某些计算过程精度要求不
高. 使用细粒度的描述会使得这种语义信息难以精确附加到操作上. 另一方面, 部分类脑硬件 (如 Tianjic [26] 、基于
FPGA 的 SNN 芯片 [39,40] 等) 就提供了这类神经元或突触级别的硬件接口, 粗粒度的描述在后续递降过程中会较为
方便.
● 脉冲张量数据类型
作为 SNN 计算模型中最重要的一类语义, 我们提出一种新的数据类型, 脉冲张量 (spike tensor) 以描述 SNN
的发放状态. 神经元的发放状态是 SNN 计算流程的重要中间计算结果 (如同 DNN 中的 feature maps), 其由神经元
更新过程产生: 在某一时刻中, 如果神经元的膜电位大于阈值电压, 则会发放脉冲, 否则不发放, 一般使用 0/1 来指
代神经元的发放状态; 在一段时间内一组神经元的发放状态可以表示为由 0/1 构成的张量, 记作脉冲张量. 特别地,
一个神经元在一段时间内的发放状态, 可以称作脉冲序列.
神经元的稀疏发放使得发放状态具有稀疏性. 稀疏性一方面影响脉冲传播阶段的计算量, 另一方面由于发放
状态只由 0/1 构成, 使得其存储、传输和传统的 DNN 不同. 综上, 我们使用了脉冲张量数据类型格式来表示发放
状态.
目前脉冲张量类型只参与 SNN 相关的计算过程, 未来将围绕该类型实现一系列操作以融入 MLIR 方言生态,
包括脉冲张量和稠密张量相互转换操作、脉冲张量的下标提取操作等.
● SNN 操作属性
SNN 方言中还包含了若干从应用描述层中传递得到的属性, 这些属性描述了 SNN 中神经元或突触的性质、
或指定了在递降过程中对神经元更新及脉冲传播操作的编译优化行为. 例如, 可以通过附加稀疏张量属性来指定
突触中权值采用某类稀疏格式进行存储, 并基于此优化脉冲传播操作计算过程 (见第 3.4.1 节); 或通过属性来指定
第 2 层 IR 中各个操作的粒度, 从而符合后端的硬件计算特征 (见第 3.3 节).
● 第 1 层 IR 递降中的编译优化
[41]
第 1 层 IR 中可以加入部分针对 SNN 语义的编译优化, 例如合并同类型神经元组以便更好地挖掘其并行性 :
以时间进行划分的计算流程需要更新每个神经元组的状态, 并且这些更新是可以并行处理的, 只需要保证它们在

