写点什么

为何使用 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:156678
用户头像

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

关注

评论

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

详解数据结构中栈的定义和操作

华为云开发者联盟

数据结构 开发 华为云 华为云开发者联盟 企业号 4 月 PK 榜

再获殊荣!华为云GaussDB喜提“科技进步一等奖”

华为云开发者联盟

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

600+ 道 Java面试题及答案整理(建议收藏)

Java你猿哥

Java spring 分布式 mybatis 多线程

《一时重构一时爽,一直重构一直爽》

后台技术汇

代码重构 软件重构 三周年连更

MySQL进阶之道,MySql性能实战源码+笔记+项目实战

程序知音

Java MySQL 数据库 后端

中国边缘云公有云服务市场 Top2,百度智能云让智算无处不在

百度开发者中心

云计算 #百度智能云# 边缘云

电子元器件“切开后”,原来是这样子的!

元器件秋姐

科普 三极管 元器件 二极管 电感

关于Java微服务的打包问题

Java你猿哥

Java 微服务 SSM框架

【重磅】针对小微企业信息安全,行云管家堡垒机隆重推出免费版

行云管家

云计算 企业上云 安全运维 运维安全

迪斯克分投趣模式挖矿分红dapp系统开发功能详情

开发v-hkkf5566

微服务 Spring Boot 整合Redis 实战开发解决高并发数据缓存

Bug终结者

redis缓存 三周年连更

带你掌握数仓的作业级监控TopSQL

华为云开发者联盟

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

Alibaba微服务线上架构攻略,从实战到源码精讲

程序知音

Java 微服务 SpringCloud java架构 后端技术

如何在页面中监听“不存在”的 DOM 节点

茶无味的一天

JavaScript DOM web api 水印 MutationObserver

矢量图片转换工具:Vector Magic 免激活版

真大的脸盆

Mac Mac 软件 图片格式转换 图片格式

使用depay信用卡开通chatGPT付费API

石云升

AI ChatGPT 三周年连更

OpenHarmony开发者大会举办,OpenHarmony项目群授牌30家捐赠单位及个人

最新动态

好用的eval | python小知识

AIWeker

Python python小知识 三周年连更

2023年,人工智能和数据训练呈现哪些新趋势?

澳鹏Appen

人工智能 机器学习 数据标注

【Linux】之如何卸载干净zabbix服务?(超详细)

A-刘晨阳

Linux zabbix 三周年连更

景区共享电动车厂家如何找?投放前景如何

共享电单车厂家

共享电动车厂家 景区共享电单车 共享电单车投放 共享电单车生产

Qz学算法-数据结构篇(引入)

浅辄

数据结构 三周年连更

熬夜肝到秃头!阿里顶配级Spring Security笔记

程序知音

Java spring 后端 spring security java架构

工作两年才真正搞懂Spring的核心概念:spring基础框架及技术生态

Java你猿哥

Java spring Spring Boot spring框架 Spring核心

好用的配置工具yaml | python小知识

AIWeker

Python python小知识 三周年连更

聊聊实例化需求

老张

需求分析 实例化需求

聊聊 CSS 隐藏元素的 10 种实用方法

茶无味的一天

CSS 隐藏元素

详解HTTP Keep-Alive选项说明及注意事项

阿泽🧸

keep-alive 三周年连更

原生开发能不能动态化?移动端动态能力建设的流派有哪些?

没有用户名丶

Gartner发布中国容器管理平台供应商识别指南,灵雀云实力入选

York

容器 云原生 系统架构 研究报告 平台选型

最新Java岗面试清单:分布式+Dubbo+线程+Redis+数据库+JVM+并发

Java你猿哥

Java spring JVM 多线程 myssql

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