写点什么

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

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

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

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

关注

评论

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

Cordova插件中JavaScript代码与Java的交互细节介绍

汪子熙

Java JavaScript 移动应用 28天写作 12月日更

Camtasia视频剪辑功能详解

淋雨

Camtasia

嚯,这款AI建模工具实在太强大了,快来pick!

百度开发者中心

AI python编辑器

【福利】腾讯WeTest专有云解决方案,限时开放招募体验官

WeTest

Selenium之css怎么实现元素定位?

六十七点五

大前端 软件测试 自动化测试 接口测试 selenium

vCenter管理软件用什么牌子好?有哪些用处?

行云管家

虚拟化 vcenter

Java和ABAP中的几种引用类型的分析和比较

汪子熙

Java 引用 28天写作 abap 12月日更

超赞圆形动画进度条,爱了爱了(使用HTML、CSS和bootstrap框架)

海拥(haiyong.site)

CSS 大前端 28天写作 签约计划第二季 12月日更

当我们谈论“远程开发”时,我们在谈论什么

Draven Gorden

云原生 开发者工具 开发工具 远程协作 开发环境

使用工具Source Monitor测量您Java代码的环复杂度

汪子熙

Java 软件工程 28天写作 12月日更 代码复杂度

实用机器学习笔记一:概述

打工人!

机器学习 深度学习 算法 学习笔记 12月日更

第五模块总结

张靖

#架构实战营

Sinfonia: a new paradigm for building scalable distributed systems--翻译理解【1】

Krysta

分布式 transaction Sinfonia DSM 两阶段提交改进

一场关于元宇宙公司之死的剧本杀

白洞计划

架构实战营 - 模块五作业

随风King

「架构实战营」

PackML从会到不会——命令标签(4)

陈的错题集

标准化 PackML

等保工作中常见导致测评结论为差的高风险项

行云管家

网络安全 等级保护 等保测评 等保结论

短视频平台的风控系统设计

Bill Zhang

架构团队如何重构内部系统

智联大前端

重构

数创新境,ToB要做难而正确的事

ToB行业头条

我不用“996”,更不用“007”,可我赚的就是比你多

六十七点五

软件测试 自动化测试 接口测试 测试工程师 功能测试

基于星环科技大数据平台 辽宁城市建设职业技术学院打造智慧校园

星环科技

大数据

一周信创舆情观察(11.22~11.28)

统小信uos

云智慧正式开源运维管理平台(OMP),加速AIOps社区生态建设

云智慧AIOps社区

运维 运维监控 开源软件 运维体系 运维系统

分享一个从源码快速构建应用的小工具

Draven Gorden

开发者工具 开发工具 开源项目

小程序与H5适合的场景应用都有哪些

Speedoooo

ios开发 APP开发 容器安全 Andriod开发 容器应用

模块5作业

覃飞

凭什么说jdk11比jdk8好?

老地平线

JVM jdk8 JDK11

数据云平台助力企业数字化转型

星环科技

大数据 数字化 云平台

Linux一学就会之Centos8用户管理

学神来啦

Linux centos 运维 linux云计算

恒源云(GPUSHARE)_CIFAR-10数据集实战:构建ResNet18神经网络

恒源云

深度学习 算法

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