走进汉振-月博登录中心入口

月博登录中心入口-月博首页登录中心入口
en
月博登录中心入口-月博首页登录中心入口
走进汉振
into hanchine
汉振分享 | 基于fpga的异构加速方案探讨
日期:2021年04月09日

01 fpga与传统cpu架构的对比

fpga与传统cpu方案的设计时间与应用性能对比:

图1. 基于rtl设计的项目研发周期与性能参数比对

图1描述了目前市面上已有的各类计算平台与fpga平台之间研发周期和方案性能的对比。从图中可以看出x86平台的第一版demo研发周期最短,而基于rtl设计的fpga工程研发周期最长;但是经过后续的不断优化,x86最终获得的产品性能可能最低,而基于fpga的设计方案的最终产品通常也能获得最高的性能参数。

图2. 基于vivado hls编译器设计的项目研发周期与性能参数比对

xilinx官方近年推出的hls工具使得基于fpga的项目研发周期有了一定时间的缩短,用户可以在研发成本与产品性能之间找到一个更适合的平衡点。

02 cpu和fpga指令执行过程

cpu的时钟假设为2ghz,传统的cpu在执行一次指令操作时通常要经历如下的流程:if->id->exe->mem->wb。每一步具体指令的意义如下表所述。

图3.cpu指令执行步骤

图4. 多指令执行模式下cpu执行过程

从图3可以看出,cpu在执行某次操作的时候需要按照固有的流程从if->id->exe->mem->wb依次执行一轮。图4描述了多指令同时执行时cpu的执行示意图,从图4中可以看出,cpu系统在经过一定的latency后每个周期均可吐出一次执行结果,相比于图3的执行流程已经有了一定的加速效果。


图5. fpga指令执行流程


图6. 多指令模式下fpga指令执行流程

图5描述了fpga方案的指令执行示意图。基于fpga平台设计的加速器,不需要如cpu一样经历if->id->exe->mem->wb固定的指令流水,其可以直接运行exe部分,因此fpga的运行效率更高;如果是fpga多指令执行,则如图6所示,随着执行单元的增加,指令的执行时间并不会有所增加。

比较上述cpu和fpga之间的方案,可以发现虽然cpu的主频时钟要比fpga更高,但是由于处理机制的问题,当指令执行的并行度提高到一定规模时,fpga的加速方案要比cpu更高效。但是基于fpga的加速方案其并行度并不能一味的增加,而需要受限于fpga本身的资源限制,因此设计者通常需要在性能与成本之间追求一个最优的平衡点满足自己设计的产品需要。

03 cpu与fpga算法的加速对比示例


上一节描述了fpga和cpu在指令执行阶段的区别,本节我们讨论在执行具体算子操作时cpu和fpga的区别之处。

3.1

3项运算代码


图7. cpu上示例代码的执行流程

图8. fpga上代码的执行流程示意图

对比图7和图8,可以发现fpga和cpu在执行示例代码的区别之处:cpu在源数据的读取和运算步骤必须串行执行,而运算结果的写入内存和源数据读取执行可以并行执行;而fpga的并行维度则可以扩展到数据的读取、运算和写出之间的任意维度。


_

同样是执行一段三项运算代码,cpu在执行完这段操作时需要8个时钟周期,而fpga只需要4个时钟周期;


_

上述比较仅聚焦cpu内指令处理的exe阶段,因为这是指令cpu中与fpga共有的唯一阶段。

3.2

循环代码

循环示例代码:

图9. 基于cpu的循环迭代调度

图10. 基于fpga的循环迭代调度

对于cpu架构,当其执行一段循环代码时,必须将当前的循环执行完后才能继续迭代下一轮的循环;而fpga在处理循环函数时,可以通过消耗fpga的片上资源对循环进行展开,使函数可以同一时间执行n次的迭代计算,其运行效率相当于cpu的n倍。

假设每次迭代的消耗时间如图9和图10所示:


_

关于代码的循环展开,假设每次循环需要消耗4个时钟周期,cpu内部需要在第一轮循环执行完后才能执行下一轮循环,因此cpu总共需要消耗8个周期;而fpga则可以将两次循环展开并行执行实现加速,总共只需要消耗5个时钟周期。

04 fpga算法加速的常用手段

本节描述在fpga框架下提升效率的常用手段:流水化操作

图11. 没有流水化操作的fpga实现

图12. 采用流水化操作的fpga实现

图11和图12描述了fpga内部实现某一具体运算的两种思路。

假设某次运算需要执行a、b、c、d、e四个算子。图11中四个算子在两个寄存器之间执行完所有的算子操作;图12则在每两个算子之间都加入寄存器即流水化操作。两种方案有如下的区别点:


_

非流水线模式算法总耗时为两级寄存器之间的延时,假设为10ns,运行时钟频率100mhz,一个时钟周期;


_

流水线模式由于每两个操作之间都加入了寄存器打拍,所以时钟可以跑得更高,假设运行时钟频率为500mhz,则算法总耗时10ns,五个时钟周期;


_

单次算法执行的时间不变,但是流水线模式显著提升算法模块的吞吐率。

05 总结

1

对比传统的fpga方案和cpu方案,基于fpga的设计需要更长的研发周期,但是往往能获得最佳的工作性能。

2

针对传统的基于rtl设计的fpga方案由于研发周期长的缺陷,xilinx公司近年推出了基于hls技术的高层次综合编译工具,该工具类似于传统的c代码编译器,可以将c语言自动转换成rtl代码并生成最终的bit文件,可以大大缩短产品的研发周期。

3

hls相比于传统的rtl设计,可能会消耗更多的资源,因此如果对成本敏感的产品,是基于传统的rtl代码设计还是基于hls设计更合适,需要做好评估工作。


【注】本文中的相关图片均摘录自xilinx的hls开发手册ug998 : 

introduction to fpga design with vivado high-level synthesis


网站地图