来QCon北京,现场感受“纯血鸿蒙”的魅力!席位有限,抓紧报名 了解详情
写点什么

为何使用 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?

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

公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2018-09-17 18:155702
用户头像

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

关注

评论

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

数字藏品交易平台App开发,数字藏品系统源码搭建

V\TG【ch3nguang】

数字藏品开发 数字藏品app

软博会,2024上海国际软件产品展览会|世亚软博会

AIOTE智博会

软件博览会 软件展会 软博会 世亚软博会 软件展览会

Alfred 5 for Mac(Mac应用快速启动器) v5.1.2(2145)中文激活版

mac

Alfred 苹果mac Windows软件 快速启动工具

区块链上增发代币发行合约系统搭建开发

V\TG【ch3nguang】

智能合约 代币

低代码助力加速构建应用程序

高端章鱼哥

低代码开发 应用程序 JNPF

身为程序员,你有哪些提高写代码效率的工具?

这我可不懂

Google 代码编写 AI编码

CAD迷你看图 for Mac(MiniCAD) v4.4.5中文特别版

mac

苹果mac Windows软件 CAD迷你看图 设计软件

2023-08-28:用go语言编写。给你一个正整数数组nums, 同时给你一个长度为 m 的整数数组 queries。 第 i 个查询中,你需要将 nums 中所有元素变成 queries[i] 。

福大大架构师每日一题

福大大架构师每日一题

软件测试/测试开发丨Web自动化测试策略

测试人

Python 程序员 软件测试 自动化测试 测试开发

与信创国产化高度适配的低代码开发框架

力软低代码开发平台

报名开启丨邀你一起探索云端 AI 新兴技术和发展模式

TRaaS

Apache IoTDB:更适合工业物联网场景的新型数据库,存、查、用不再是难题

Apache IoTDB

想解决技术债,你要先学会如何量化它

互联网工科生

程序员 敏捷开发 技术债 敏捷宣言

OSCS开源安全周报第 57 期:Smartbi windowUnloading限制绕过导致远程代码执行

墨菲安全

网络安全 安全漏洞 oscs

响应式编程——初识 Flux 和 Mono

emanjusaka

Java 响应式编程 后端

BackupLoupe for Mac(数据还原备份工具)v3.9中文版

mac

苹果mac Windows软件 数据备份工具

低代码平台:IT开发的一种重要方式

树上有只程序猿

系统开发 低代码开发 JNPF 传统开发

Elasticsearch最佳实践:如何保证你的数据安全

腾讯云大数据

Elastic Search

科兴未来 | 2023年SCIP绿色化学化工创新创业大赛!

科兴未来News

GaussDB技术解读系列:高安全之密态等值

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 8 月 PK 榜

合约一键跟单软件开发,币安欧意交易所合约跟单API量化机器人搭建

V\TG【ch3nguang】

量化交易机器人开发 合约跟单 币安智能链

Node与Express后端架构:高性能的Web应用服务

互联网工科生

Web Node Express

共创共赢,天翼云携手用友打造商业创新一体化解决方案!

天翼云开发者社区

云计算 AI 数据治理

服务网格实施周期缩短 50%,丽迅物流基于阿里云 ACK 和 ASM 的云原生应用管理实践

阿里巴巴云原生

阿里云 云原生 服务网格 容器服务

AI 狂飙,云端 IDE 如何书写未来?TVP 吐槽大会邀您来论道

CODING DevOps

HarmonyOS Codelab 优秀样例——购物应用,体验一次开发多端部署魅力

HarmonyOS开发者

HarmonyOS

移动应用高级语言开发——并发探索

OpenHarmony开发者

OpenHarmony

阿里云 X 森马 AIGC T 恤设计大赛开启!穿什么由你定,赢 Airpods,作品定制联名T恤

阿里巴巴云原生

阿里云 云原生 AIGC

突破连接壁垒,火山引擎边缘云网络的先行之路

火山引擎边缘云

云服务边缘架构 边缘云 边缘云原生

鹏云块存储在多副本情况下,如何兼顾数据一致性和效率?

鹏云网络

分布式系统 数据强一致性 副本一致性 分布式存储,

互助公排模式系统功能及矩阵开发设计

V\TG【ch3nguang】

互助 公排模式

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