阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

为何使用 FPGA 取代 CPU 和 GPU?

  • 2018-09-17
  • 本文字数:4362 字

    阅读完需:约 14 分钟

近日,英特尔收购了Altera 这一全球最大FPGA 制造商之一,为此支付167 亿美元,这也成了迄今为止英特尔最大手笔的一次收购。此外还有其他新闻表示,微软开始在自己的数据中心内使用FPGA 亚马逊也开始提供 FPGA 驱动的云服务。原本 FPGA 主要应用于电子工程领域,软件工程方面鲜少有人使用。这是否意味着 FPGA 已经开始迎来新的发展势头,成为 CPU 和 GPU 之外的另一个重要选择?

FPGA 到底是什么?

如果需要计算一些数据,最常用的方法是针对 CPU 或 GPU 这样基于指令的架构编写计算所需的软件。或者采取一种更麻烦的办法,专门针对特定的计算需求设计出一套专用电路,而非面向 CPU 和 GPU 这样的通用电路编写指令。

在设计出自己的电路后,还要设法实现所需设计,以便真正开始计算。此时可以考虑的一种方式,需要非常深厚的技术能力,你需要真正创建出能实现所需设计的电路(这种方式也叫做 ASIC,即专用集成电路)。

但此时还有一种更简单的方法,这也是本文的重点:使用现场可编程门阵列(Field Programmable Gate Array,FPGA)这种可重构的集成电路来实现自己的电路设计。我们可以将 FPGA 配置为自己需要的任何电路(只要 FPGA 能够容纳下)。这与很多程序员已经熟悉的,基于 CPU、GPU 指令的硬件编程方式有着很大差异。基于指令的硬件是通过软件配置的,而 FPGA 是通过指定所需硬件电路配置的。

FPGA 的优劣

为何要用 FPGA 来完成计算任务,而非选择更通用的 CPU 或 GPU?这种方式与 CPU 和 GPU 的差异主要体现在下列几方面:

  • 延迟:完成计算工作需要多久? → FPGA 在这方面更胜一筹。
  • 连接性:可以连接哪些输入 / 输出,带宽如何? → FPGA 可以直接连接至输入,提供非常高的带宽。
  • 工程成本:为了表达所需计算,需要付出多少精力? → FPGA 的工程成本通常远高于基于指令的架构,那么选择这种方式,肯定是因为其他方面的优势值得这样做。
  • 能效:计算过程能耗如何? → 这往往是 FPGA 最大的优势,但 FPGA 是否真的能胜过 CPU 或 GPU,这主要取决于具体应用。

下文将深入探讨上述这几个差异。

低延迟

如果需要为喷气式战斗机的无人驾驶功能计算数据,或开发高频算法交易引擎,低延迟肯定是必须的,此时需要让输入数据和得出结果之间的等待时间尽可能短。这些领域中 FPGA 远远胜过 CPU(或 GPU,因为 GPU 也需要通过 CPU 进行通信)。

FPGA 很容易可以实现 1 毫秒左右,甚至低于 1 毫秒的延迟,而就算表现最好的 CPU,其延迟通常也在 50 毫秒左右。更重要的是,FPGA 的延迟往往是确定的。能实现如此低的延迟,主要原因之一在于 FPGA 通常专用性更强:无需依赖通用操作系统,也无需通过通用总线(例如 USB 或 PCIe)通信。



(也许)正在天上飞翔的 FPGA

连接性

我们可以借助 FPGA 将任何数据源,例如网络接口或传感器直接连接到芯片。而 CPU 和 GPU 的做法与此大为不同,它们必须通过标准化总线(如 USB 或 PCIe)与数据源建立连接,并依赖操作系统向应用程序提供数据。与芯片直接连接可获得更高带宽(以及更低延迟)。

有些场合中,这样的高带宽是必不可少的,例如 LOFAR SKA 这样的射电天文学应用程序。此类应用场景需要在现场部署大量专用传感器,并产生海量数据。但为了提高整个系统的可管理性,必须大幅减少传感器生成的数据量,随后传递给应用程序进行处理。因此荷兰射电天文研究所 ASTRON 设计了 Uniboard²,这是一种包含四块 FPGA 芯片的基板,其每秒可处理的数据量甚至超过了位于阿姆斯特丹的互联网交换中心!



这些看似小巧的射电天线会生成海量数据。(图源: Svenlafe en.wikipedia

工程成本

在深入讨论能效问题前,先来看看 FPGA 一个最大的劣势:相比基于指令的架构(如 CPU 和 GPU),它们的编程 / 配置工作实在是太难了!一般来说,这些硬件电路是通过硬件描述语言(Hardware Description Languages,HDL)描述的,如 VHDL 和 Verilog,而软件则可通过各种编程语言,例如 Java、C 和 Python 编程而来。

从理论角度来看,硬件描述语言和编程语言都可用于表达任何计算(这两者都是图灵完备的),但工程方面的细节却存在极大差异。

该领域目前有一个新趋势:高级合成(High Level Synthesis,HLS),这是指使用诸如 OpenCL 或 C++ 等常规编程语言为 FPGA 编程,借此也可实现更高级的抽象。然而就算使用此类编程语言,FPGA 编程的困难程度依然要比为基于指令的系统编程高出一个数量级。

FPGA 编程最困难的部分在于漫长的编译过程。例如在使用英特尔 OpenCL 编译器的情况下,典型的 FPGA 程序编译通常需要 4-12 小时,这是因为要进行繁琐的“布局和布线(Place-and-route)”操作,将我们需要的自定义电路映射到 FPGA 资源,同时确保以尽可能短的路径实现所需结果。这是一种非常复杂的优化问题,整个过程需要投入巨大的运算能力。虽然英特尔提供了一种仿真器,让我们可以用较短时间测试最终结果的正确性,但确定并优化性能的过程依然要经历冗长的编译过程。



FPGA 编译过程为你的偷懒提供了一个好借口(图源: XKCD )。

能效

在对外交流中,英特尔始终将能效视作 FPGA 的一大显著优势。然而实际情况并不那么明显,浮点计算方面尤其如此。不过我们首先还是来看看 FPGA 在能效方面远远胜过 CPU 和 GPU 的应用场景。

FPGA 的高能效主要体现在逻辑计算和固定精度计算领域(而非浮点计算领域)。在密码学货币(如比特币)挖矿方面,这一特点让 FPGA 呈现出巨大优势。时至今日,几乎每个人都已经习惯于通过 FPGA 挖矿了。

顺带一提,目前几乎所有人在挖矿时都会使用 ASIC(专用集成电路),这就是一种针对某种具体应用专门设计的特殊集成电路。ASIC 是一种能效更高的解决方案,但前期需要付出更多投资来设计芯片,同时芯片的产量必须足够大才能分摊高昂成本。接着还是继续说回 FPGA 吧。

FPGA 在能效方面的另一个优势在于,FPGA 基板无需主机即可直接通电运行,它有自己的输入 / 输出,因此还可以在主机方面节约能耗和资金。这一点与 GPU 计算完全不同,GPU 需要借助 PCIe 或 NVLink 与主机系统通信,因此必须装在主机中方能运行。(不过也有一个例外, NVidia Jetson 无需主机即可运行,但这并不是什么高端 GPU。)

浮点运算能效 —— FPGA vs GPU

诸如深度学习等很多高性能计算用例中,通常需要依赖浮点算法,这是 GPU 最擅长的领域之一。以前,FPGA 浮点运算效能非常低,因为必须通过逻辑块组装浮点单元,这一过程会耗费大量资源。

一些新型 FPGA,例如 Arria 10 Stratix 10 在 FPGA 构造中直接内置了浮点单元,浮点运算能力有了显著提升。额外增加的浮点运算单元是否可以改善 FPGA 的浮点计算能效?是否能比 GPU 能效更高?

那我们就用最先进的 GPU 和 FPGA 对比看看吧。目前市面上最先进的专业级 GPU 就是 Tesla V100 了,理论上最大运算速度可达 15 TFLOPS(万亿次浮点运算 / 秒,一种衡量浮点运算能力的标准单位),该 GPU 功耗约 250 瓦特。而目前市面上最先进的 FPGA 应该是 Nallatech 520C ,其中搭载了 Altera/ 英特尔联合研发的 Statix 10 芯片,该基板的理论最大运算速度为 9.2 TFLOPS,功耗约为 225 瓦特。

如果从能效角度对比这两个设备,GPU 的能效无疑更高,理论上可实现 56 GFLOP/W(十亿次浮点运算 / 瓦特,这是一种衡量浮点运算能效的标准单位),而 FPGA 仅为 40.9 GFLOP/W。因此如果你目前就需要购买新的浮点运算硬件设备,并且需要配合主机使用,GPU 貌似会是更好的选择,至少从上述这种粗糙的对比中可以得出这样的结论。

然而两者的差距并不大,并且后续发布的新款 FPGA,例如这块即将发布的基于 Stratix 10 的 FPGA 在浮点运算方面很可能会实现比 Volta(译注:Tesla V100 的开发代号)更高能效。更重要的是,上述对比涉及的两种产品本身也有本质差异,毕竟 Tesla V100 使用了 12 纳米制程,而 Stratix 10 使用了更古老的 14 纳米制程。

根据上述对比,如果需要能效更高的浮点运算设备,那么现阶段依然有必要继续坚持选择 GPU,但这个对比并不能证明 GPU 在浮点运算方面能效始终更出色。浮点运算能效这场战役,目前的胜者是 GPU,但不久的将来战果可能会有所变化。



FPGA 的能耗标签:取决于具体应用(图片版权:欧盟)。

如果主机并非必须,那么就有必要对使用高端 GPU 的主机,和完全不使用主机的高端 FPGA 进行一下对比了。如果继续沿用上述对比中使用的数据,对于装备 GPU 的主机和不装备主机的 FPGA,只有主机功耗为 116.7 瓦特(如果是多 GPU 主机,则为每颗 GPU 对应的主机功耗)时,两者的能效才能维持相同。通常,现代化主机的功耗介于 50-250 瓦特之间,这样看来 FPGA 的优势就比较大了。

综述和展望

FPGA 在某些领域是必不可少的。例如军事领域的导弹导航系统中,使用 FPGA 主要是看中了低延迟的特性。射电天文学领域,FPGA 的专用输入 / 输出是顺利处理海量数据的关键。在密码学货币挖矿应用中,高能效固定精度计算和逻辑计算也是 FPGA 的一大优势。



艺术家对在建的 SKA 射电天文望远镜的构想图(图源:SKA Organisation/Swinburne Astronomy Productions)

然而英特尔斥资 167 亿美元收购 Altera 可不仅仅是为了涉足这种利基市场,他们还有更远大的目标。据猜测,他们的目标在于高性能计算和云计算这两个市场(例如被用于亚马逊那样的数据中心)。

面向高性能计算的 FPGA

依个人拙见,我觉得未来几年内,FPGA 都不会在高性能计算市场引起太大轰动。就算 FPGA 在能效方面比 GPU 出色些,FPGA 的软件开发依然要比 GPU 开发困难很多。HPC 社区已经习惯于使用 GPU,让大家从 GPU 改为使用 FPGA 明显需要更大的动力。着眼于更长远的未来,例如未来 5 年以上,届时 FPGA 也许可以提供足够大的收益和动力,而这可能恰恰就是英特尔所希望的。

面向云提供商的 FPGA

云提供商也是个巨大的市场。在英特尔的愿景中,他们希望看到使用 FPGA,或混合使用 CPU 和 FPGA 的云服务器。这种想法的目的在于将某些计算任务分摊给 FPGA,并且 / 或者使用 FPGA 提供定制化的网络拓扑。

微软毫无疑问会与英特尔密切合作,他们正在实现使用 FPGA 的数据中心,并且已经搭建了包含 100000 块 FPGA 的网络。借此,微软的必应搜索引擎已经在性能和灵活性方面获得了巨大收益,现在一部分必应搜索的计算工作已经交由 FPGA 处理。亚马逊也在广受欢迎的 EC2 平台上提供了 FPGA 节点。这趋势是否会成为潮流?我们拭目以待吧。

展望

原本较为“小众”的 FPGA 能否成为主流?个人而言我很怀疑。我认为,FPGA 如果要真正普遍起来,需要满足两个条件:

  • 必须简化编程工作,尤其是缩短编译时间。
  • 执行浮点计算时,必须实现更高能效

英特尔正在努力解决这些问题,只不过摆在他们前方的障碍还有很多。

作者: Atze van der Ploeg ,阅读英文原文: Why use an FPGA instead of a CPU or GPU?

感谢蔡芳芳对本文的审校。

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2018-09-17 18:155717
用户头像

发布了 283 篇内容, 共 102.1 次阅读, 收获喜欢 61 次。

关注

评论

发布
暂无评论
发现更多内容

拿起手中的键盘做公益侠客,让你的第一个低代码应用为公益发光发热!

InfoQ写作社区官方

低代码 公益 大学生 热门活动 码上公益

企业文档爆炸,如何管?

小炮

企业文档管理工具

Day346&347&348&349

爱好编程进阶

程序员 后端开发

当.Net撞上BI可视化,这3种“套路”你必须知道

葡萄城技术团队

看板 数据大屏 BI数据分析

ansible template jinja2 渲染

ghostwritten

ansible

ansible 模块:script

ghostwritten

ansible

Day274

爱好编程进阶

Java 程序员 后端开发

hive踩过的小坑

爱好编程进阶

Java 程序员 后端开发

HIVE3 深度剖析 (上篇)

明哥的IT随笔

大数据 hie

Apache DolphinScheduler 2.X保姆级源码解析,中国移动工程师揭秘服务调度启动全流程

Apache DolphinScheduler

Apache 大数据 开源 DolphinScheduler workflow

AIRIOT物联网低代码平台如何配置MQTT驱动?

AIRIOT

物联网 低代码平台 驱动配置

萌新看过来,你还学不懂VScode插件吗?

葡萄城技术团队

报表

基于 FFI 的 PyFlink 下一代 Python 运行时介绍

Apache Flink

大数据 flink 编程 流计算 实时计算

容器化 | 构建 RadonDB MySQL 集群监控平台

RadonDB

MySQL 数据库 容器化 RadonDB KubeSphere

Eclipse中查看源代码

爱好编程进阶

Java 程序员 后端开发

idea启动tomcat报错,org

爱好编程进阶

Java 程序员 后端开发

等保三级全称是什么?是什么意思?

行云管家

网络安全 等级保护 等保三级 等保2.0

“银行家算法”大揭秘!在前端表格中利用自定义公式实现“四舍六入五成双”

葡萄城技术团队

银行家算法 纯前端表格技术

还在写SQL做SAP二开?通过RFC调用NetWeaver,让HANA数据库操作更可靠

葡萄城技术团队

ERP 全套信息化系统 二开

Hugging Face创始人亲述:一个GitHub史上增长最快的AI项目

OneFlow

人工智能 深度学习 nlp 开源社区

docker下kibana搭建

爱好编程进阶

Java 程序员 后端开发

「码」力集结!他们用作品为FinClip黑客松打造出一道靓丽的风景线

Speedoooo

小程序 hackathon 黑客马拉松 黑客松 小程序容器

Go1.18泛型浅谈

CodeWithBuff

golang 泛型 新特性 Go 语言

美哭了,一款开发者必备的接口管理工具!

Liam

Postman 开发工具 API API接口管理 接口管理工具

windows服务器是什么?运维管理用什么工具好?

行云管家

windows 服务器 自动化运维 服务器运维

ansible 模块:add_host

ghostwritten

ansible

IO流详细解答,博主亲自手敲代码,快速上手

爱好编程进阶

Java 程序员 后端开发

ansible 模块:set_fact

ghostwritten

ansible

IntelliJ IDEA开发最佳配置

爱好编程进阶

Java 程序员 后端开发

无形资产管理系统解决方案

低代码小观

资产管理 CRM 财务审核系统 CRM系统 企业管理软件

有趣、实用、全面,是程序员心中理想人工智能教材的样子了

图灵教育

深度学习 PyTorch

为何使用FPGA取代CPU和GPU?_架构_Atze van der Ploeg_InfoQ精选文章