目前市面上的加速芯片挺多的,比如GPU、FPGA、TPU,以及针对各种特殊应用所开发的加速芯片。自己一直想理清楚这些加速芯片到底在加速什么,一直没有确切答案。一般宽泛的说法是CPU处理效率较低的,我们就进行加速,但个人觉得应该有些更本质的东西。以下是最近个人的一些感悟。
加速其实都是针对CPU而言,而CPU中一般最消耗资源的部分可以认为是循环计算,因此加速是针对这些循环部分做加速。我们大的可以分为IO的加速以及计算部分的加速。
计算加速,以下是一些例子:
1) 比如图像与视频这种针对像素的处理,每个像素块处理的基本步骤都是一致的,但像素的数量巨大因此是一种循环的加速。
2) 神经网络元运算的加速,无论是推理还是训练,其实针对每个神经元的运算也是重复的乘加运算。
3) 查表算法以及各种匹配算法,这块虽然可以看作循环运算,但在循环体内部其实反而是比较复杂的,因此加速时设计的硬件结构反而是比较复杂的。
IO加速:
最简单的可以看网卡芯片,因为报文是重复来的,并且处理的步骤也差不多,大体上也是可以看作循环处理,只是循环的内部的处理步骤比较多而已。
从上面分析可知,异构加速时,实际上是设计一种高效的硬件处理结构,这种处理结构可以针对不同的循环进行加速,因此循环体不同,要设计的硬件结构也不同,就不存在某种通用的硬件加速器了。除了这个处理循环的加速单元,加速芯片还应该加上必要的控制电路以及与主芯片的互联电路。
要将这些异构加速器连接在一起,就需要设计一种高效的互联结构。这个互联结构需要低延迟高吞吐,以及在这之上设计的异构芯片逻辑交互流程,这个目前一般可以认为是DMA。之前我们对DMA的认识一般限制在降低CPU利用率上,但其实他有一个更重要的作用,就是提供异构芯片之间高效的互联机制,因此针对不同的场景这个DMA的要求是不一样的。这个留待下周总结吧,一周总结一点点,没那么累哈。