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  语义的编译优化, 例如合并同类型神经元组以便更好地挖掘其并行性  :
                 以时间进行划分的计算流程需要更新每个神经元组的状态, 并且这些更新是可以并行处理的, 只需要保证它们在
   375   376   377   378   379   380   381   382   383   384   385