赞
踩
本文从多方面探讨FPGA,帮助你深入理解。
微信搜索关注《Java学研大本营》
最近,英特尔以167亿美元收购了FPGA最大的生产商之一Altera,这是英特尔迄今为止最大的一笔收购。同时,微软正在其数据中心中使用FPGA;而亚马逊也在其云服务中提供FPGA支持。以前,FPGA主要用于电子工程,但在软件工程中使用比较少。FPGA是否即将起飞,成为CPU和GPU的重要替代品呢?
如果您想计算某些东西,常见的方法是编写针对基于指令的体系结构(如CPU或GPU)的软件。另一种更艰难的方法是为此特定计算设计一个特殊电路——而不是为通用电路(如CPU或GPU)编写指令。
一旦您设计了这个电路,您需要某种方式来实现这个设计,这样您就可以实际进行计算。有个方法是实际生产一个实现该计的电路(这被称为特定应用集成电路或ASIC),但这需要相当大的资金成本。
一种更简单的方法,也是本文的主题,是使用可重构集成电路Field Programmable Gate Array(FPGA)来实现电路设计。您可以将FPGA配置为任何您想要的电路(只要它适合FPGA)。这与大多数程序员所习惯的基于指令的硬件(如CPU和GPU)非常不同。基于指令的硬件通过软件进行配置,而FPGA则是通过指定硬件电路进行配置。
为什么要优先选择使用FPGA来进行计算,而不是更为常见的CPU或GPU?与GPU和CPU相比,FPGA在以下几个方面有所不同:
延迟:计算需要多长时间? →FPGA在这方面表现良好。
连接性:我们可以连接哪些输入/输出以及哪种带宽? →FPGA可以直接连接输入,并提供非常高速的带宽。
工程成本:表达计算需要多少工作量和难度多大? →通常相比于FPGA,基于指令的体系结构的工程成本更低,因为它们只需要编写相应的软件程序即可。因此使用FPGA进行计算必须确认值得,才能抵消其更高的工程成本。
能源效率:计算某些东西需要消耗多少能量? →这是FPGA的主要优点之一,但是是否选择FPGA而不是CPU或GPU,取决于具体的应用场景。
让我们详细讨论每个方面。
如果您正在编程喷气式战斗机的自动驾驶仪或高频算法交易引擎等应用程序,那么低延迟是您需要的:输入和响应之间的时间尽可能短。这就是FPGA比CPU(或必须通过CPU通信的GPU)更好的地方。
使用FPGA可以实现延迟在或低于1微秒左右,而使用CPU,延迟小于50微秒已经很不错了。此外,FPGA的延迟更具确定性。这种低延迟的主要原因之一是FPGA可以更加专业化:它们不依赖于通用操作系统,并且通信不必经过通用总线(如USB或PCIe)的限制。
在FPGA上,您可以直接将任何数据源(如网络接口或传感器)连接到芯片的引脚上。这与GPU和CPU形成了鲜明的对比,在GPU和CPU中,您必须通过标准化总线(如USB或PCIe)连接数据源,并依赖操作系统将数据传递给应用程序。直接连接到芯片的引脚可以提供非常高的带宽(以及低延迟)
例如,在天文无线电应用(如LOFAR和SKA)中需要这种高带宽。在这些应用中,现场有许多专用传感器,生成大量数据。在发送数据之前,需要减少数据量,以使其更易于管理。为此,荷兰无线电天文研究所ASTRON设计了Uniboard²,这是一个带有四个FPGA的板,它可以处理比阿姆斯特丹互联网交换所更多的数据。
在深入讨论能源效率问题之前,我们先来谈谈FPGA的主要缺点:FPGA比基于指令的架构(即CPU和GPU)更难编程/配置。传统上,这些硬件电路是通过硬件描述语言(HDL),如VHDL和Verilog来描述的,而软件则是通过众多编程语言之一,如Java、C和Python来编程的。
从理论上讲,硬件描述语言和编程语言都可以用于表达任何计算(两者都是图灵完备的),但是在工程细节上的差异是巨大的。
一个新兴的趋势是高级综合(HLS):使用常规编程语言(如OpenCL或C++)对FPGA进行编程,从而实现更高级别的抽象。然而,即使使用这些语言,对FPGA进行编程仍然比对基于指令的系统进行编程困难一个数量级。
编程FPGA的一个主要困难是长时间的编译时间。例如,使用英特尔的OpenCL编译器,编译一个典型的FPGA程序需要4到12小时。这是由于FPGA编译过程中的布局和路由阶段:我们想要的定制电路需要映射到我们拥有的FPGA资源,并且路径要尽可能短。这是一个复杂的优化问题,需要大量的计算。尽管英特尔提供了一个仿真器,测试正确性不需要这个漫长的步骤,但是确定和优化性能仍需要进行这些耗时的编译阶段。
英特尔在通讯中经常强调FPGA的能源效率是其明显的优点。然而,事实并不是那么明确,尤其是在浮点运算方面,但如果比较FPGA、CPU和GPU的能源效率,FPGA明显更加节能,我们应该优先考虑使用FPGA。
FPGA在逻辑和固定精度(与浮点相反)计算方面表现出色,这使其在加密货币挖掘(例如比特币)中具有优势。其实以前每个人都使用FPGA挖掘比特币。
顺便说一下,现在每个人都使用ASIC(专用集成电路)进行比特币挖掘。它是专门为一个目的而构建的特殊集成电路。虽然ASIC是一种更节能的解决方案,但需要大量的设计和生产芯片的前期投资才能达到成本效益。
FPGA在能源效率方面的另一个优点是,FPGA板不需要主机计算机运行,因为它们有自己的输入/输出接口,我们可以节省主机的能源和费用。这与GPU相反,后者使用PCIe或NVLink与主机系统通信,因此需要主机才能运行。(GPU需要主机的规则的一个例外是NVidia Jetson,但这不是高端GPU。)
许多高性能计算应用,如深度学习,通常依赖于浮点算术,这是GPU擅长的领域。过去,FPGA在浮点计算方面效率较低,因为浮点单元必须从逻辑块组装而成,这样会消耗大量资源。
现代的FPGA,如Arria 10和Stratix 10,拥有内置的浮点单元,使其在浮点运算方面表现更好。在能源效率方面,加入浮点单元是否使FPGA在浮点计算方面更具吸引力?它们比GPU更节能吗?
我们将最先进的GPU与最先进的FPGA进行比较。现在最快的专业GPU是Tesla V100,理论最大值为15 TFLOPS(Tera-floating-point-operations per second,用于测量浮点性能的标准),功耗约为250瓦。而现在最佳的FPGA板之一是Nallatech 520C,它使用由Altera/Intel推出的新Statix 10芯片,该卡的理论最大值为9.2 TFLOPS,功耗约为225瓦。
比较这两个设备的能源效率,GPU在理论上似乎更节能,达到56 GFLOP/W(每瓦的千兆浮点运算,用于测量浮点性能的能源效率标准),而FPGA仅达到40.9 GFLOP/W。因此,如果您现在要购买新的浮点硬件,并且需要主机计算机,那么在这种简单的比较中,GPU似乎更适合您。
然而,这种差异很小,而且很有可能新的FPGA卡片,例如即将推出的基于Stratix 10 FPGA的卡片,在浮点计算方面比Volta更节能。此外,上述比较类似于在苹果和橘子之间进行,因为Tesla V100使用12纳米工艺下生产的,而Stratix 10使用较旧的14纳米工艺。
虽然比较表明,如果您现在需要节能的浮点计算,最好还是选择GPU,但这并不意味着GPU在浮点计算方面本质上更节能。目前,GPU在浮点能源效率方面处于领先地位,但这可能在不久的将来会发生变化。
如果不需要主机,则需要将带有主机的高端GPU与不带主机的高端FPGA进行比较。如果我们使用以上比较中的相同数据,那么如果主机占116.7瓦(在多GPU设置的情况下,每个GPU占用的电力),则具有主机的GPU和没有主机的FPGA的能源效率完全相同。现代主机的耗电量在50-250瓦范围内,使FPGA更具竞争力。
在某些领域,FPGA是不可或缺的。在军事应用中,如导弹制导系统,由于其低延迟,FPGA被广泛应用于测量。在射电天文学应用中,FPGA的专门输入/输出对于处理大量数据至关重要。在加密货币挖掘中,FPGA在固定精度和逻辑运算方面的能源效率更具有优势。
然而,英特尔花167亿美元收购Altera并不仅仅是为了这些小众市场,他们还有更大的计划。他们希望渗透高性能计算和云计算这两个市场(即在类似亚马逊的数据中心中使用)。
笔者个人认为,FPGA在未来几年内不会在高性能计算市场上大展拳脚,即使它们比GPU更节能一点,但开发FPGA软件仍然比开发GPU软件困难得多。HPC社区已经习惯了GPU,让人们从GPU转向FPGA需要更大的好处。从更长远的角度来看,即超过5年,可能会发现FPGA确实提供了这样大的好处,这似乎是英特尔所期望的。
另一个市场是云服务提供商。英特尔计划在云服务器中配备FPGA或者在CPU-FPGA混合环境中运行。其想法是将计算的某些部分卸载到FPGA中或使用FPGA来自定义网络拓扑。
微软无疑与英特尔合作,在其数据中心使用FPGA,并拥有由100,000个FPGA组成的网络。微软大力宣传Bing搜索的性能和灵活性提升很多,现在部分计算任务已由FPGA完成。亚马逊也在其热门的EC2平台上提供FPGA节点。未来是否会延续这种趋势还有待观察。
那么这些以前有点小众的FPGA是否即将成为主流呢?笔者个人持怀疑态度。笔者认为FPGA要想真正起飞需要两个条件:
它们应该更容易编程,特别是通过缩短编译时间来实现。
它们应该在浮点计算上更加节能。
英特尔正在努力解决这些问题,但这是很大的障碍。
《Spring Cloud 微服务快速上手》介绍了当下最主流的属于Spring生态的微服务框架,它继承了Spring Boot的优点,开发部署都非常简单。本书内容全面,介绍了微服务架构的发展历程,包含Spring Cloud Netflix 和 Spring Cloud 阿里巴巴的组件,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等。在解读核心组件的实现原理的同时,配以案例进行实践。本书内容包含微服务架构和云原生架构,读者在掌握微服务之后,可以进一步掌握云原生知识。
Spring Cloud 微服务快速上手https://item.jd.com/13251159.html
精彩回顾
微信搜索关注《Java学研大本营》
访问【IT今日热榜】,发现每日技术热点
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。