FPGA需要跑多快?影响FPGA计算性能的几大因素

原文作者:FPGA设计论坛

FPGA vs. ASIC

        专用芯片ASIC的开发流程是:设计、验证、流片、封装、测试;

        而FPGA已经是做好的芯片,所以不需要流片、封装、测试。这样,可以至少节省四个月的时间。

        另外ASIC还有可能多次流片才能成功,同步的软件开发也需要芯片做好才能完成大部分功能,这些也是时间成本。

        在量小的时候,FPGA的成本低,量大了之后,ASIC的成本低。

        FPGA的功耗比ASIC高,因为有很多多余的逻辑,不过比CPU省电,毕竟CPU的多余逻辑更多。

        相比ASIC,FPGA的调试比较方便,可以直接烧到FPGA执行,也可以用调试工具抓取芯片里面的信号查看状态。

FPGA需要跑多快?

        跟Intel CPU相比,FPGA的主频差一个数量级,一般FPGA芯片时钟频率300MHz左右,而Intel CPU可以到3GHz,就是说CPU 1秒能做30亿次计算,而FPGA只能做3亿次,差了10倍。

        另外FPGA用作可重构计算是来加速CPU的,如果和CPU跑一样快就没意思了,所以一般要比CPU快5倍才行。

        FPGA的开发周期是比较久的,1年甚至2年很正常,在这个过程中,CPU上的软件算法还在不断升级,所以有可能FPGA算法设计的比CPU快,等开发完,却发现CPU上的软件算法快速迭代,已经超过FPGA算法了。这种事还是比较常见的,不只是软件算法升级,CPU自己也会升级,这些都有可能让FPGA加速器做了无用功。比如用FPGA做一个数据压缩卡,可是CPU可能就自己带了一个数据压缩功能,成本还比FPGA卡低,开发FPGA的人白干一场。

        所以,正常来说,FPGA算法加速性能设计的时候要比CPU快5-10倍才能保证最终做出来的产品是可以实现硬件加速的目标。

影响FPGA计算性能的几大因素

数据并行性

        对FPGA计算来说,同时处理大量的数据,同时数据之间没有相互依赖是最好的。这样,可以有几百上千个并行计算单元独立处理几百上千个数据,如果数据之间有依赖,比如有很多的if else,就并发不起来,A必须要等B完成才能执行。就跟步骑兵混合军团出征,如果将军下令大家要同步进军,步兵要和骑兵一起冲,骑兵不能跑太快,要等步兵一起走,那这个仗就没法打了,只能被敌人包饺子。

数据大小和计算复杂度

        FPGA并行计算是很多个计算并行执行,如果每个计算单元要处理的数据太多,同时计算逻辑太复杂,那么占用的FPGA计算资源就变多了,这样总的并行单元数量相应减少,性能下降。而且,老司机都知道,计算逻辑太复杂,在电路上消耗的时间变多,还会导致每个模块的延迟变长,这样时钟频率也会下降,也会影响到性能。

流水线

        计算复杂的时候,延迟会变长,如果要求计算任务在一个时钟周期里完成,那么时钟周期就变长了,相应的频率降低,性能下降。所以为了提高时钟频率,FPGA会采用流水线技术,把复杂的计算分解成几段,放到几个时钟周期里完成。这样做的后果就是,计算需要的时间变长了,但是总的性能却提高了

静态控制逻辑

        我们写软件程序的时候,习惯了给函数很多参数作为条件,根据参数内容执行函数的操作。FPGA做计算就不希望靠参数内容确定怎么计算,而是希望一开始就定好。比如在软件里面,算个位数的平方和二位数的平方差不多,可是到FPGA里面,个位数需要的计算资源少,二位数占用的多,一个计算单元要同时支持个位数和二位数平方计算就会很占资源,最好是一开始就确定好算哪一种,不要动态确定。

        归根结底,我们只要明白FPGA计算快的两大优点就是并行和流水线,但是必须时刻有并行计算的思想,尽量压缩算法占用的资源,这样才能用有限的FPGA计算资源实现最强大的并行计算能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值