市面上有两种运动控制器的方案:
DSP和专用IC(FPGA),我们来对比一下两种方案的执行速度。
虽然CPU主频很高,但其是通用处理器,做某个特定运算(如信号处理,图像处理)可能需要很多个时钟周期;而FPGA可以通过编程重组电路,直接生成专用电路,加上电路并行性,可能做这个特定运算只需要一个时钟周期。
假设我们用FPGA完整的实现了CPU,然后再跑软件的话,的确比CPU慢。问题是FPGA不会那么干,它会直指问题本质,解决问题。
即使我们用FPGA实现一个CPU,也是为了做一些芯片验证或者说需要一些需要CPU和FPGA需要紧密结合的场景,这种场景现在也逐步由SoC的FPGA实现了。
所以我们需要更多的计算位宽或者更大的数组,或者矩阵的运算的时候,我们使用FPGA的优势就体现出来。再多的计算,也就是放置更多的逻辑资源。
FPGA的并行是真并行,CPU完全没得比。CPU如果想并行最多也就是让多个核并行,但是对于大部分算法实现来说,如上例,多个核之间的同步调度开销远远大于计算开销,就算多个核之间的调用开销可以做的很小,一般CPU也就那几个核,而FPGA只要门足够,想并行几路就可以并行几路。
所以在做可并行的计算密集型任务时,比如信号处理,网络传输等等FPGA可以帮上忙;但是如果做我们常见的串行为主的任务而言,FPGA的确远远比不上CPU。
FPGA 是配角
使用FPGA不一定总能加速,只是在某些强计算和数据处理的方面,因为其硬件电路并行运行和有很多DSP硬核资源供调用的特点,可以工作得更出色。FPGA本身也只是辅助角色,起控制的还是CPU本身,所以FPGA并不能代替CPU,只是在完成一件大任务的过程中将某部分任务分解给FPGA可以更好地一起完成任务。在这过程中也会有额外的开销产生,在某些场合,可能用了FPGA而效果更差也是有的。
另外,通常说的使用FPGA加速比CPU和GPU省电,是指在完成同样的任务下,FPGA耗费的电力比起CPU和GPU更少一些,相对而言的,并不是说FPGA本身就一定省电。
FPGA的弱点
1.开发周期长。需要对特定的应用编写特定的FPGA。只要干的事情稍有不同,一般来说FPGA代码就要重新写一遍或者是至少要修改很多东西。开发代价和码农码几行代码完全不可比。而且一般需要若干工程师花费若干周才能搞的定。重点是会写的人还不多。
2.并不是所有东西都适合FPGA。FPGA适合于做那些可并行计算的东西,例如矩阵运算。如果是一些判断类的问题,FPGA算得并没有CPU快(这个时候时钟周期才是关键因素)。所以现实中都是有人来分析,在整个任务中有哪些地方可以并行计算,把这些地方替换为FPGA卡。
由于现在机器学习、大数据比较火,里面矩阵运算成千上万,所以没有出现定制的ASIC之前,FPGA加速还是业界主流。现在百度、微软、谷歌等公司都已经把FPGA加速运用到了实际的商业运营中。
鉴于此,我们开发的ARM+FPGA(TC6014)的方案在需要高精度,高速,并行计算的场合下,完胜DSP的串行算法方案,并且将核心算法集成在专用的FPGA上,完全没有运算出错跑飞的可能性,稳定性也完胜DSP方案。