Cambricon: An Instruction Set Architecture for Neural Networks
meton-robean opened this issue · comments
作者:杨军
链接:https://www.zhihu.com/question/41469046/answer/123965490
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
I. 采用基于load-store访存模式的RISC指令集。具体指令的选取,根据workload的类型进行计算层面的抽象得出。对于深层神经网络来说,主要的计算和控制任务有几种:
向量计算
矩阵计算
标量计算
分支跳转
其中向量计算、矩阵计算、标量计算属于标准的计算工作。形式上看起来与通用处理器没有区别,主要的区别在于细节的支撑上。比如,对于神经网络计算任务中的高频操作,就可以直接提供硬件指令集的支持,典型的例子就是应用于drop-out的Random-Vector指令,用于在一条指令内部为一个向量进行快速随机初始化,以及应用于激活层的Vector-Expotential,用于在一条指令内部为一个向量进行快速的非线性变换(这里稍微展开一些,针对神经网络的计算任务类型,在硬件层面,还可以为指数运算这样的高耗时操作进行特定优化,比如通过高阶Taylor展开来近似逼近指数运算,因为神经网络往往对于一定程度的数值误差表现出较强的tolerance,这也是一系列模型压缩技术得以有效运转的关键基石)。
而分支跳转的逻辑在神经网络计算任务里,并不像常规计算任务那么复杂,所以指令集的设计上并不需要提供丰富的分支跳转逻辑的支持,相应地,在结构设计环节,也可以减少在分支预测上花费的设计&实现精力。
使用Scratchpad Memory而不是寄存器堆来作为计算数据的主存储。因为AI算法的计算任务与常规的多媒体计算任务不同,指令所操作的数据长度往往是不定长的,所以应用于多媒体指令优化(SIMD)的寄存器堆就不如Scrathpad Memory灵活。
由于标量操作在AI算法中不是高频操作,但是又必须有,所以可以有cache结构,但是可以简化cache层级等设计,这是trade-off.