查看原文
其他

对比CPU和GPU,FPGA优势、劣势、应用全解析

学研妹 Java学研大本营 2024-01-02

全面了解FPGA。

长按关注《Java学研大本营》

1 FPGA简介

当我们需要进行计算时,通常会选择使用基于指令的架构,比如中央处理器(CPU)或图形处理器(GPU),编写适用于这些架构的软件程序。这些架构是通用的,可以执行各种不同类型的计算任务。

然而,还有一种不同的方法,即为特定的计算任务设计专门的电路,不依赖于通用架构和软件。这种方法更加费力,需要进行电路设计和硬件实现,但可以在特定计算任务上获得更高的性能和效率。

本文重点介绍这种能获取高性能的方法,即使用可重构集成电路,也称为现场可编程门阵列(FPGA)。FPGA是一种特殊的芯片,可以通过配置来实现各种不同的电路功能。可以根据特定的计算需求,将FPGA配置成一个定制的电路,以执行特定的计算任务。与基于指令的架构不同,FPGA不需要编写软件程序,而是直接配置硬件电路来执行计算任务。

2 FPGA的优劣势

为什么我们倾向于使用 FPGA 进行计算,而不是更常见的CPU或GPU?与GPU和CPU相比,FPGA在以下几个方面存在差异:

  • 延迟:计算需要多长时间?

    → FPGA在这方面表现良好。

  • 连通性:可以连接哪些输入/输出,以及带宽是多少?

    → FPGA可以直接连接输入,并提供非常高的带宽。

  • 工程成本:表达计算需要多少工作量?

    → 工程成本通常比基于指令的架构要高得多,因此其优势必须物有所值。

  • 能源效率:计算需要消耗多少能源?

    → 这经常被列为FPGA的一个巨大优势,但FPGA是否比CPU或GPU更好,实际上取决于应用场景。

接下来更详细地讨论每个方面。

3 低延迟

FPGA相对于CPU和GPU具有更低的延迟。在特定的应用场景下,使用FPGA可以实现非常低的延迟。

使用FPGA,可以实现约等于或低于1微秒的延迟;而使用CPU,延迟小于50微秒已经是非常不错的表现了。此外,FPGA的延迟更加可预测,更具确定性。主要原因是FPGA更加专用化:它们不依赖于通用操作系统,并且通信无需通过通用总线(如USB或PCIe)进行。

因此,对于需要高性能和低延迟的应用场景,例如喷气式战斗机的自动驾驶仪或高频算法交易引擎,选择使用FPGA是个更好的选择,它能够提供非常短的延迟,更可靠的性能,并且能够满足特定的需求,不受通用架构和操作系统的限制。

4 连通性

在FPGA上,可以直接把任何数据源(如网络接口或传感器)连接到芯片的引脚上,这点与GPU和CPU形成鲜明对比,因为在GPU和CPU上,必须通过标准化总线(如USB或PCIe)连接数据源,并依赖操作系统将数据传递给应用程序。FPGA的与芯片引脚的直接连接提供了极高的带宽和低延迟。

这种高带宽在无线电天文学应用中是必需的,比如LOFAR和SKA。在这些应用中,现场装有许多专用传感器,产生大量数据。为了更方便处理,必须在发送之前减少数据量。为此,荷兰无线电天文学研究所ASTRON设计了Uniboard²,这是一块搭载了四个FPGA的板卡,其每秒处理的数据量比阿姆斯特丹互联网交换中心还要多。

5 工程成本

在讨论能源效率这个微妙问题之前,让我们先讨论FPGA的主要缺点:相比基于指令的架构(即CPU和GPU),它们的编程/配置要困难得多。传统上,这些硬件电路是通过硬件描述语言(HDL),如VHDL和Verilog,进行描述的,而软件则是通过众多编程语言之一,如Java、C和Python进行编程的。

从理论上讲,硬件描述语言和编程语言都可以用来表达任何计算(都是图灵完备的),但在工程细节上存在巨大的差异。

一种新兴的趋势是高级综合(HLS):使用常规编程语言(如OpenCL或C++)对FPGA进行编程,从而实现更高级别的抽象。然而,即使使用这样的语言,编程FPGA的难度仍然比编程基于指令的系统高一个数量级。

编程FPGA的困难部分很大程度上是长时间的编译时间。例如,使用英特尔的OpenCL编译器,编译一个典型的FPGA程序需要4到12个小时之间。这是由于布局和布线阶段:想要的定制电路需要映射到拥有的FPGA资源上,并且路径尽可能短。这是一个复杂的优化问题,需要大量计算。英特尔提供了一个仿真器,因此测试正确性不需要进行这个漫长的步骤,但确定和优化性能确实需要进行这些漫长的编译阶段。

6 能源效率

在英特尔的宣传中,一直强调FPGA在能源效率方面具有明显的优势。然而,实际情况并不那么明确,尤其是在涉及浮点计算时。但我们首先来考虑FPGA相对于CPU或GPU在能源效率方面的明显优势。

就逻辑和固定精度计算而言,FPGA在能源效率方面表现出色。尤其在加密货币挖掘中,正是这一特性使得FPGA具有优势。实际上,过去很多人都使用FPGA进行比特币挖掘。

值得一提的是,如今大多数人都使用ASIC(专用集成电路)进行比特币挖掘。ASIC是专门为特定目的而构建的定制集成电路。虽然ASIC是更为能源高效的解决方案,但需要巨额的前期投资用于设计和批量芯片生产,才能实现成本效益。

从能源效率的角度来看,FPGA板不需要依赖主机计算机运行,因为它们具备自己的输入/输出接口,这样可以节省主机的能源和金钱开销。而与之相反的是GPU,GPU需要通过PCIe或NVLink与主机系统进行通信,因此需要主机的运行支持。(NVidia Jetson是GPU的一个例外,但它并不是高端GPU。)

7 浮点数的能效——FPGA与GPU的比较

许多高性能计算应用,如深度学习,通常依赖于浮点运算,GPU在这方面表现出色。过去,FPGA在浮点计算方面效率相对较低,因为需要从逻辑块组装浮点单元,这消耗了大量资源。

像Arria 10和Stratix 10这样的新一代FPGA在FPGA结构中集成了浮点单元,使其在浮点计算方面更为出色。那么,添加浮点单元是否使FPGA在能效上对浮点计算更有吸引力?它们比GPU更节能吗?

把最先进的GPU与最先进的FPGA进行比较。目前市面上最快的专业GPU是Tesla V100,理论最大性能为15 TFLOPS(每秒兆浮点运算,是测量浮点性能的标准单位),功耗约为250瓦。其中一款最好的FPGA开发板是Nallatech 520C,它采用Altera/Intel的新一代Statix 10芯片。该开发板的理论最大性能为9.2 TFLOPS,功耗约为225瓦。

如果把这两个设备在能效上进行比较,GPU似乎更节能,在理论上能达到56 GFLOP/W(每瓦吉浮点运算,是测量浮点性能能效的标准单位),而FPGA仅能达到40.9 GFLOP/W。因此,如果要购买新的浮点数硬件,并且需要主机电脑,那么在这种粗略的比较中,选择GPU可能更合适。

然而,这种差距很小,并且有可能新一代基于Stratix 10的FPGA开发板在浮点计算方面比Volta更节能。此外,上述比较是在不同工艺节点下进行的,因为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的定点和逻辑运算能效优势明显。

推荐书单

《深入理解Java高并发编程》

《深入理解Java高并发编程》致力于介绍Java高并发编程方面的知识。由于多线程处理涉及的知识内容十分丰富,因此介绍时必须从Java层面的讲解一直深入到底层的知识讲解。为了帮助读者轻松阅读本书并掌握其中知识,本书做了大量基础知识的铺垫。在第1篇基础知识储备中,主要介绍计算机原理、并发基础、常见语言的线程实现、Java并发入门、JUC之Java线程池、JUC之同步结构、Java NIO详解等内容。在第2篇深入Java并发原理中,详细介绍了JUC包中所有使用的原子类的原理与源码实现;非常关键且容易出错的volatile关键字的原理,从Java、JVM、C、汇编、CPU层面对其进行详细讲解;synchronized在JVM中获取锁和释放锁的流程;JUC包的核心结构——AQS的原理与源码实现,通过逐方法、逐行的解释,帮助读者彻底掌握AQS中提供的获取锁、释放锁、条件变量等操作的实现与原理。最后,详细介绍了JVM中JNI的实现原理,将Java Thread对象中的所有方法在JVM层面的实现流程进行了详细描述,以帮助读者在使用这些方法时,知道底层发生了什么,以及发生异常时如何从容解决问题。

【半价促销中】购买链接:https://item.jd.com/13523064.html


精彩回顾

10分钟讲透FPGA工作原理

掌握这18项技能,成为卓越的FPGA工程师

7个进行容器管理的Docker命令

7个杀手级IntelliJ IDEA插件

使用JIB插件轻松实现Spring Boot应用容器化

长按关注《Java学研大本营》
长按访问【IT今日热榜】,发现每日技术热点
继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存