为什么FPGA主频比CPU慢,却可以帮其加速?

我们知道,FPGA的频率一般只有几百MHz,而CPU的频率却高达数GHz。那么,有不少网友心中就有一个疑问:“为什么FPGA主频比CPU慢,但却可以用来帮CPU做加速?”。

今天,EDN就和大家系统性地讨论下这个问题。

将FPGA主频与CPU相比不妥

在开始之前,首先要明确一点,将FPGA的主频与CPU比较,实际是风马牛不相及的问题。FPGA和CPU是两种完全不同的器件,前者是专用,是硬件编程,而后者是通用,是软件编程。

不同体系结构性能和灵活性的比较。(图片来源:《如何评价微软在数据中心使用 FPGA 代替传统 CPU 的做法?》)

表面上看,FPGA的时钟频率要低;对于通用计算任务,FPGA设计貌似不如CPU设计。但是实际上,单个FPGA的并行度却比CPU要高得多。FPGA的行为是确定性的,用作硬件加速器没有时间片、线程或资源冲突的问题。它始终以完全相同的速度执行一件事。因此,如果需要低延迟,那么FPGA就可能是最佳选择。

计算密集型任务,CPU、GPU、FPGA、ASIC 的数量级比较(以16位整数乘法为例,数字仅为数量级的估计)(图片来源:《如何评价微软在数据中心使用 FPGA 代替传统 CPU 的做法?》)

FPGA并行计算机制

如知乎网友young cc所言,虽然CPU主频很高,但其是通用处理器,做某个特定运算(如信号处理,图像处理)可能需要很多个时钟周期。而FPGA可以通过编程重组电路,直接生成专用电路。加上电路并行性,可能做这个特定运算只需要一个时钟周期。

举例来说,CPU主频为3GHz,FPGA主频为200MHz。若做某个特定运算,CPU需要30个时钟周期,而FPGA只需一个,那么耗时情况是:

CPU:30/3GHz =10ns;

FPGA:1/200MHz =5ns。

可以看到,FPGA做这个特定运算速度比CPU快,能帮助加速。

另外,CPU的主频是加过流水线之后的。比如是15级流水线,则第一条指令执行了15个时钟周期后才能出结果。

但是,使用FPGA也不一定总能做加速。

例如,知乎网友Evan172就表示,使用FPGA做加速,只是在某些强计算和数据处理的方面,因为其硬件电路并行运行和有很多DSP硬核资源供调用的特点,可以工作得更出色。

FPGA本身也只是辅助角色,做控制的还是CPU本身,所以FPGA并不能代替CPU,只是在完成一件大任务的过程中将某部分任务分解给FPGA可以更好地一起完成任务。在这过程中也会有额外的开销产生,在某些场合,可能用了FPGA而效果更差也是有的。

另外,通常说的使用FPGA加速比CPU和GPU省电,是指在完成同样的任务下,FPGA耗费的电力比起CPU和GPU更少一些。这是相对而言的,并不是说FPGA本身就一定省电。

一个有趣的例子:数组加法计算

知乎用户doing举了一个很有趣的例子。他指出,假设用FPGA完整实现了CPU,然后再跑软件的话,的确比CPU慢。问题是FPGA不会那么干,它会直指问题本质,解决问题。

例如,有两个数组,其中有256个32位数。现在要把它们对应相加变成一个数组,用CPU写最快大概是这个样子:

r[0] = a[0] + b[0];

r[1] = a[1] + b[1];

...

r[255] = a[255] + b[255];

当然也可能会这么写(在分支预测准确,指令缓存不大的情况下可能更快):

for (int i = 0; i < 255; i++)

r[i] = a[i] + b[i];

对FPGA来说,也可以用上面相同的写法,不同在于:

CPU是一个一个加法计算,而FPGA排好逻辑电路,在一个时钟周期内计算完毕。就算CPU主频比FPGA快100倍也赶不上啊。话说后来CPU大量的增加SIMD指令,就有点这个意思,不过这相当于提供库函数,没那么灵活。

FPGA并行是真并行,CPU完全没得比。CPU如果想并行最多也就是让多个核并行,但是对于大部分算法实现来说,如上例,多个核之间的同步调度开销远远大于计算开销,就算多个核之间的调用开销可以做的很小,一般CPU也就那几个核,而FPGA只要门足够,想并行几路就可以并行几路。

所以在做可并行的计算密集型任务时,比如信号处理,网络传输等等FPGA可以帮上忙;但是如果做常见的以串行为主的任务,FPGA的确远远比不上CPU。如果要类比的话,有点像似GPU和CPU之间的关系。

“当年写Verilog的时候,我就想如果CPU里面自带一块FPGA,应用程序程序可以在初始化期间直接烧一段代码下去,那岂不是很爽。后来,有了能写shader的3D显卡...”

为什么FPGA成为数据中心尖端技术?

最后再讨论一个话题,就是为什么FPGA一直是数据中心领域最尖端的技术?

有人可能认为,再大的问题(算力)都可以通过堆CPU核心来解决。那么,假设有一台强大的48核服务器,即使使用非常高端的FPGA,也很难达到相同的吞吐量。而且,FPGA硬件设计还需要由强大的团队来完成,非常烧钱。

这时,如果把机会成本和能源效率两者考虑进去,好处就开始显现出来了。

首先来看能源效率。假设这台48核服务器的功耗为400W并且发热严重,那么就会对数据中心运营不利——能耗和散热是数据中心运营的两项最大支出。而将FPGA连接起来只执行一项任务,就可以实现很高的能效而开销极低。通过正确的设计,可以在实现低功耗的同时获得高吞吐量。

其次,机会成本(这个问题不太明显)。系统中的CPU内核数量就那么多。购买新的内核并且安装需要花很长时间,而且最好是将通用CPU内核保留用于通用任务(例如虚拟机订阅)。每个CPU核卖不出去就会烧钱。

当有任务大量占用CPU时间(例如AI推理)时,FPGA就成为了不错的选择。

一个有关微软Project Catapult项目当中FPGA的趣事

当年,微软必应团队在其Project Catapult项目中发现,在启用FPGA时,CPU的总体利用率实际上略有上升。所有的人都感到困惑,因为从直觉来看FPGA应该要减少CPU负载。但是后来他们发现,数据中心的业务流量达到了原来的2倍!由于效率提高,流量实现了两倍的负载均衡。由此可见FPGA的强大之处。

结语

维基百科的相关词条提到两点:FPGA的优势在于其并行特性,有时对于某些应用而言可以使速度明显变快;可以使用FPGA来对算法中的某些部分加速,也可以在FPGA和通用处理器之间共享部分计算。

综上,FPGA有两个优点:FPGA并行度远超CPU;CPU是通用电路,FPGA是定制电路。但是也有两个缺点:开发周期长;并不是所有东西都适合FPGA。

【QQ交流群】

群号:173560979,进群暗语:FPGA技术江湖粉丝。

多年的FPGA企业开发经验,各种通俗易懂的学习资料以及学习方法,浓厚的交流学习氛围,QQ群目前已有1000多名志同道合的小伙伴,无广告纯净模式,给技术交流一片净土,从初学小白到行业精英业界大佬等,从军工领域到民用企业等,从通信、图像处理到人工智能等各个方向应有尽有。

【微信交流群】

现微信交流群已建立09群,人数已达数千人,欢迎关注“FPGA技术江湖”微信公众号,可获取进群方式。

后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。

江湖偌大,继续闯荡,愿大侠一切安好,有缘再见!

为什么FPGA主频比CPU慢,却可以帮其加速?相关推荐

  1. FPGA较传统CPU强在哪里?

    微软数据中心里的服务器仍然由传统的英特尔 CPU 主宰,但据报道,微软现在正计划采用现场可编程阵列或现场可编程门阵列(FPGA)来代替原有的处理器架构,让微软可以采用自主软件专门修改并为自己服务. 一 ...

  2. FPGA与普通CPU的区别

    CPU与FPGA的根本区别在于软件与硬件的差异.CPU为 冯诺依曼结构,串行 地执行一系列指令:而FPGA可以实现 并行操作 ,就象在一个芯片中嵌入多个CPU,其性能会是单个CPU的十倍.百倍.一般来 ...

  3. FastFormers:实现Transformers在CPU上223倍的推理加速

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要5分钟 Follow小博主,每天更新前沿干货 作者:Parth Chokhra 编译:ronghuaiyang 导读 使用多头注意力的Tran ...

  4. 计算机里为什么显示cpu主频高,cpu主频显示不对是什么原因怎么解决

    有网友反映电脑cpu主频经常显示不对,是什么故障吗?这该怎么办呢?那么下面就由学习啦小编来给你们说说cpu主频显示不对的解决方法吧,希望可以帮到你们哦! cpu主频显示不对的解决方法: 问:我刚买了不 ...

  5. 跑分cpu_【新机】A14芯片最新跑分成绩曝光:3GHz主频,CPU/GPU提升20%丨特斯拉又双叒降价了...

    前不久苹果正式发布了iPad Air 4,首发了5nm的A14芯片.官方表示CPU性能相比上一代提升了40%,GPU性能则提升了30%.不过这个是和A12对比,那么相较于A13到底提升了多少呢? 此前 ...

  6. 计算机型号cpu主频,电脑cpu型号怎么看好不好 教你看cpu主频等详细性能参数

    "这CPU可是四核的,比那些双核的强多了~" "你看到没,这U主频4GHz,你那i7主频才3.2GHz" 这种话术我们经常会在某些奸诈的装机店里听见,但如果你选 ...

  7. 如何修改服务器cpu主频,服务器cpu参数怎么看【图文】

    CPU也就是中央处理器,它是我们电脑的核心部件.所以CPU越好的话那么电脑运行的就越流畅,于是CPU参数就是判定CPU好坏的依据了.它的参数指标有主频,主频越高的CPU就运行的越快,主频=外频X倍频. ...

  8. 基于 FPGA 的 RISC CPU 设计(2)详细的模块设计思路及其 Verilog 代码

    引言         其实,一个 CPU 的设计中,各个子模块都是比较基本的.比较简单的,只是组合起来的一个整体架构会比较复杂而已,无论是时序路径,还是数据通路和控制通路,这里,主要详细介绍整个微架构 ...

  9. FPGA初学者必看,四大解惑帮你少走弯路

    1.不熟悉 FPGA的内部结构,不了解可编程逻辑器件的基本原理. FPGA为什么是可以编程的?恐怕很多菜鸟不知道,他们也不想知道.因为他们觉得这是无关紧要的. 他们潜意识的认为可编程嘛,肯定就是像写软 ...

最新文章

  1. [architecture]-ARMV7架构下SecureMonitor双系统切换时保存和恢复哪些寄存
  2. Oracle 之 用户与权限
  3. c语言结构体指针初始化
  4. c语言设计一维数组,一维数组 (1)C语言程序设计.pdf
  5. python 上下文管理器
  6. 贪心算法—建立雷达(POJ 1328)
  7. (09)Vivado IO约束
  8. sama5d36 OUT0-OUT3 对应关系 带光模块的系统
  9. atmega8a如何烧写程序_快捷又安全!如何利用芯片内部Bootloader烧写程序?
  10. STAMP:Short-TermAttention/MemoryPriorityModelfor Session-basedRecommendation
  11. 打字测试软件源码 vb,打字测试程序 VB代码
  12. 如何设计网页排版和样式 - 前端页面设计
  13. Java中的Constants类
  14. 【EndNote文献管理】批量导入删除引用
  15. python代码怎么变成软件_从Python代码到APP,你只需要一个小工具:GitHub已超6000星
  16. 《建筑工程定额与预算》
  17. 一种改进的进化模型和混沌优化的萤火虫算法-附代码
  18. 第二章 大数据如此重要,引无数英雄竞折腰
  19. k8s集群搭建普若米修斯,监控rabbitmq集群
  20. Mina中的区块证明

热门文章

  1. CCF-CSP 201812-1小明上学 简单思路 满分题解
  2. 记录解决问题--人大金仓sys_dump: error: connection to database or services “xxx“ failed: 致命错误: 用户 “system“
  3. 2022年6月青少年软件编程C语言一级真题答案
  4. js代码大全(各种方法、属性)《转载》
  5. echarts基本属性大全
  6. 批量给所有文件夹添加统一的前缀名称
  7. mysql 汉字_让MySQL支持中文
  8. adb shell 模拟鼠标导入通讯录
  9. 微信小程序-类似分享论坛
  10. 基于微信小程序的菜谱管理系统(小程序+Java后台实现)