为什么CPU主频一般都比FPGA快,但是却说FPGA可以帮助CPU加速?

主频只是影响计算速度的一个因素 , 并不是全部 。 在执行一些计算密集型的任务场景中 , FPGA的计算速度是更快的 , 目前FPGA作为CPU的协处理器已经广泛应用在Intel、AMD等公司的产品中 。
CPU、GPU、和FPGA的比较
下图是左侧为CPU的组成 , 中间为GPU , 右侧为FPGA
为什么CPU主频一般都比FPGA快,但是却说FPGA可以帮助CPU加速?
文章图片
来源:Xilinx
桌面端的CPU为冯诺依曼结构 , 从上图可以看出 , 其基本组成为控制器 , Cache , 和ALU 。 而计算单元ALU在CPU中的占比不大 , 所以它的并行计算能力有限 。
中间的为GPU , 绿色的计算单元占了绝大部分 , 所以并行计算能力很强 。 弱点是控制能力很弱 , Cache小 , 为了保证计算能力 , 就需要大量的高速DDR保证数据吞吐率 。
右侧为FPGA , 包含可编程的I/O、DSP、memory、PCIE等 , 因为大量存储单元的存在 , FPGA在做计算的时候可以直接从内部存储单元读取数据 。
推荐一个国外的FPGA学习网站--fpga4fun , 里边有FPGA的介绍及26个实战项目及实现代码 , 非常适合入门学习!
正因为CPU、GPU、和FPGA在结构上的不同 , 也让他们在实际应用层面有所侧重 。 下图是不同体系结构性能和灵活性的比较:
为什么CPU主频一般都比FPGA快,但是却说FPGA可以帮助CPU加速?
文章图片
目前主流的方案是把CPU和GPU都集成在一个SoC中 , 通过片内总线互联 。 在执行并行计算的时候 , 比如进行图像处理 , FPGA的优势就体现出来了 , 通过协作分工 , 使芯片的工作效率最大化 。
目前的3D封装以及chiplet等技术为这样的组合提供了可实现性 。
为什么CPU主频一般都比FPGA快,但是却说FPGA可以帮助CPU加速?
文章图片
为什么FPGA计算速度会比CPU更快?
在执行大量的运算场景中 , FPGA相比GPU的核心优势在于低延迟 。 FPGA比CPU延迟低 , 在本质上是体系结构的区别 。 FPGA同时拥有流水线并行和数据并行 , 而CPU几乎只有数据并行 , 虽然也会才有流水线设计 , 但深度受限 。 因此 , FPGA更适合做需要低延迟的流式处理 , GPU更适合做大批量同构数据的处理 。
举个例子:
我们有四个全加器 , 每一个的进为输出连接到下一个的进位输入 , 这样实现的加法器被称作行波进位加法器(Ripple-CarryAdder,RCA) 。 其特点为:
为什么CPU主频一般都比FPGA快,但是却说FPGA可以帮助CPU加速?】结构特点:低位全加器的Cout连接到高一位全加器Cin
优点:电路布局简单 , 设计方便
缺点:高位的运算必须等待低位的运算完成
为什么CPU主频一般都比FPGA快,但是却说FPGA可以帮助CPU加速?
文章图片
我们来看一下其关键路径的延迟:
总延迟时间:(T+T)*4+T=9T,推广到n位 , 总时间为(2n+1)*T 。
为什么CPU主频一般都比FPGA快,但是却说FPGA可以帮助CPU加速?
文章图片
每一个全加器计算的时候必须等待它的进位输入产生后才能计算 , 所以四个全加器并不是同时进行计算的 , 而是一个一个的串行计算 。 这样会造成较大的延迟 。
我们把这个电路改进一下:提前计算出“进位信号” , 对进位信号进行分析 。
这样我们就得到了一个:超前进位加法器(Carry-LookaheadAdder,CLA)
为什么CPU主频一般都比FPGA快,但是却说FPGA可以帮助CPU加速?
文章图片
为什么CPU主频一般都比FPGA快,但是却说FPGA可以帮助CPU加速?
文章图片
其中 , C1、C2、C3、C4都由下面的电路计算好 , 需要3级门延迟 , 然后在全加器中关键路径上还有1级延迟 , 如图: