图 2:混合算法 [19](图 (a) 和 (b))和 ATiTA(P)(图 (c) 和 (d))的示意图。图 (a) 和 (c) 代表神经网络的观点,而 PU 的观点则显示在图 (b) 和 (d) 中。由于膜电位或强度的整合,所有地方的脉冲都用红色表示,突触传递事件用橙色表示,下一个脉冲的预测用绿色表示。对于 ATiTA(P),灰色也表示计算后丢弃的潜在脉冲。在 (a) 中,由于大小为 T com 的突触延迟,下一个大小为 T com 的容器中的神经元会接收脉冲,然后对其进行整合以计算膜电位。在 (b) 中,每个 PU 的计算都是按大小为 T com 的容器进行的,并且需要在每个 T com 进行同步。根据 PU 的数量,一些 PU 可能会等待其他 PU,而不会在每个线程上进行大量计算,因此它们的负载较低。在 (c) 中,对于 ATiTA(P),在网络级别使用离散事件方法:计算会跳转到下一个潜在尖峰。最小的尖峰被保留为实际的下一个尖峰。然后,仅对突触后神经元进行突触传递、相应强度的更新和下一个潜在尖峰的新计算。在 (d) 中,(c) 的不同操作按单个线程在单个 PU 上执行的连续操作的顺序排列,因此单个 PU 会随着时间的推移满负荷运行。请注意,两种算法(混合算法和 ATiTA(P))都具有时间精度,可以是经典的数值精度 10 15,从这个意义上讲,它们都计算连续时间。
脉冲神经网络的通用模拟代码大部分时间都处于脉冲到达计算节点并需要传送到目标神经元的阶段。这些脉冲是在通信步骤之间的最后一个间隔内由分布在许多计算节点上的源神经元发出的,并且相对于其目标而言本质上是不规则的和无序的。为了找到这些目标,需要将脉冲发送到三维数据结构,并在途中决定目标线程和突触类型。随着网络规模的扩大,计算节点从越来越多的不同源神经元接收脉冲,直到极限情况下计算节点上的每个突触都有一个唯一的源。在这里,我们通过分析展示了这种稀疏性是如何在从十万到十亿个神经元的实际相关网络规模范围内出现的。通过分析生产代码,我们研究了算法更改的机会,以避免间接和分支。每个线程都承载着计算节点上相等份额的神经元。在原始算法中,所有线程都会搜索所有脉冲以挑选出相关的脉冲。随着网络规模的增加,命中率保持不变,但绝对拒绝次数会增加。我们的新替代算法将脉冲均匀地分配给线程,并立即根据目标线程和突触类型对它们进行并行排序。此后,每个线程仅完成向其自身神经元的脉冲部分的传递。无论线程数如何,所有脉冲都只被查看两次。新算法将脉冲传递中的指令数量减半,从而将模拟时间缩短了 40%。因此,脉冲传递是一个完全可并行的过程,具有单个同步点,因此非常适合多核系统。我们的分析表明,进一步的进展需要减少指令在访问内存时遇到的延迟。该研究为探索延迟隐藏方法(如软件流水线和软件诱导预取)奠定了基础。