
Intel和AMD都斥巨资收购了领先的FPGA公司。撇开相对较小的嵌入式计算和通信/互联网市场,这些基本上是对FPGA作为数据中心服务器CPU的关键组合的未来的赌注。但除非克服了在软件程序员工作的难题和设备管理方面的主要挑战,否则这种组合将是个未知数。
理解为什么AMD对FPGA供应商Xilinx如此感兴趣,或者说Intel多年前为何对Altera感兴趣,有助于了解FPGA到底是什么,以及这些设备在目前芯片行业中发挥什么作用。人们的想法很简单,不幸的是,事实正是被这种简单的想法和许多复杂的技术所掩盖。
首先是名字。FPGA是Filed-Programmable Gate Array的缩写,这个市场化的术语其实非常不合适,因为这些设备既不是可编程的,也不是门阵列。它们是工程师设计和构建集成电路的方式中一些困难问题的解决方案。
ASIC
今天几乎所有复杂的数字IC都是通过单一任务链来构建的,即曾经被称为ASIC(Application-Specific IC)的设计流程。
确定了对芯片要求的精确表述后,设计者收集一系列的功能块:处理器、内存模块、加速器功能和专用控制器,它们共同满足了要求。这些模块中的大多数都采用的IP,并从供应商库中提取。少数没有这种形式的,设计者将用HDL(Hardware Description Language)来描述,但不要与C++或Python等编程语言混淆。编程语言描述了一个处理器应该执行的一系列步骤,以执行一个算法。HDL描述的是一块硬件的结构,而不是一连串的事件。
然后,设计工具将这些IP模块和HDL描述组合成一个逻辑元素、寄存器和连接它们的线段的列表,即一个SoC的基本部分。然后,设计团队详尽地测试这个所谓的网表。随后的工具通过几个曲折的步骤将网表转换为代表即将在SoC上制造的实际晶体管和导线的形式,然后转换为在芯片上打印这些特征的图案。大量的数据要经过更多的测试,然后被送到掩膜车间和制造实际集成电路的工厂。
这个过程可以制造出相当接近底层芯片工艺的潜在最大密度、速度和能效的集成电路。但它需要大量的时间,从需求到第一块芯片诞生需要9个月的时间,这并不罕见,如果有设计错误、需求变化或工厂的延误,从开始到结束的链条很容易达到一年或更长时间。而且还有大量的初始成本,不仅包括设计团队的工作,还有一套掩模和最初运行芯片的昂贵的成本。在许多情况下,例如不确定的设计要求,在快速发展的市场或小批量的生产,ASIC方法并不理想。
FPGA来救场FPGA正是为了解决这个问题而出现的。但FPGA的密度和速度会降低,功耗也大幅增加,FPGA让设计团队实际上跳过了网表开发后的所有步骤。相反,设计者直接将网表实施在现成的FPGA芯片中。这可以节省几个月的后端芯片设计时间和掩膜车间及制造时间,以及数万美元的前期费用。FPGA集成电路的单价会大大高于同类ASIC芯片的量产单价。但通常,如果设计发生变化或产量较低,ASIC摊销后的单位成本实际上可能高于FPGA。
可配置性是关键
那么,FPGA是如何避免所有这些步骤的呢?简单的说,FPGA是作为标准产品的IC量产的,然后进行配置(通常在上电时)以执行所需的功能。稍微长一点的答案是,FPGA用三个可配置的元素取代了ASIC设计的三个基本元素,逻辑功能、寄存器和线段,高度灵活的可配置逻辑单元、可配置寄存器和在可配置开关盒之间运行的巨大的线段云。
为了提高密度和性能,许多FPGA包括内存块、算术单元甚至整个CPU内核的硬件块,这些硬件块在硬逻辑中实现,就像在ASIC中一样,而不是可配置单元。因此设计者可以根据需要将这些块整合到他们的设计中。
通过配置逻辑元件来执行设计者想要的功能,设置寄存器的操作,并设置开关盒,将逻辑单元、寄存器和硬模块连接成一个逻辑网络,设计者可以直接在FPGA中实施网表,而不需要任何曲折的后端设计或将任何设计文件发送给第三方。设计人员使用FPGA供应商的工具来创建配置文件,FPGA在上电时将文件加载到自身,仅此而已。
从网表到工作芯片的时间非常短,对于较小的设计来说是几天甚至几小时,以及较低的前端成本,就使FPGA在一系列应用中很受欢迎,包括工业、医疗和军事用途。而且,芯片的制造尺寸范围很广,可以实现从小型工业控制器到大型百万门SoC的各种功能。
一个巨大的小众市场
早期采用FPGA的行业是通信和互联网行业。能够设计快速的数据包处理引擎或无线信号处理器,在几天内将其应用于芯片,并在电路中全速测试,对于这个快速发展的行业来说是天赐之物,特别是在互联网爆炸的年代和每一代新的无线技术的前沿。该行业不仅可以使用FPGA进行原型设计和早期生产,而且往往需求变化非常快,以至于没有时间在全面生产中用成本较低的ASIC取代FPGA。这种情况导致了高端FPGA销量的大幅增长,使两个主要的FPGA厂商Xilinx和Altera从非常小众的Fabless小公司变成了数十亿美元营收的体量。
但是,随着互联网泡沫破裂和无线行业部署速度的放缓,艰难的3G发展到更加艰难和昂贵的4G,然后是旷日持久且非常有挑战性的5G,有利可图的空间就越来越少了。FPGA供应商开始寻找另一个爆炸性增长的机会。所以,他们找到了数据中心。
目前,数据中心是一个巨大的服务器阵列,而服务器是由承载着高端CPU的卡片组成。这种架构与FPGA有什么关系并不直观。至少对于数据中心的架构师来说,这一点最初并不明显,他们对FPGA供应商的第一次进展感到不解。
但拨开表面,在该数据中心内,所有这些CPU都在运行程序。除了极少数例外,CPU实际运行代码的大部分时间,而不是等待网络或存储的时间,可能是花在10%的代码上,即所谓的内核。如果能使内核执行得更快,而且理想情况下,如果你能把它们直接放到硬件,这样你就不必一次又一次地获取指令、加载和存储数据并进行分支,你可以使许多工作负载运行得更快,功耗更低,并可能使用更少的内存。
因此,FPGA供应商认为,将最重要的内核实现为FPGA中的硬件加速器。不仅内核的执行速度会快得多,而且由于FPGA是可重新配置的,你可以对其进行实时调整,以加速当前工作负载需要的任何内核。理论上,这对数据中心的架构师来说是一个巨大的胜利。加速、节能,而且,如果你在数据中心的每个CPU旁边放一个FPGA,就可以保留重新定位云管理所依赖的工作负载的所有灵活性。
FPGA行业最先听到的部分是“每个CPU旁边的FPGA”。这引发了向数据中心行业的重大转折。可以说,拥有FPGA公司确实给了CPU公司更多接触嵌入式计算的机会,这一转折吸引了Intel和AMD的注意。
但是,有几个问题,就像泰坦尼克号的冰山一样,可能比最初所认识的更重要。第一个问题是我们在开始时提到的配置FPGA和编程CPU之间的区别。技能组合是完全不同的。HDL不仅与C或Python或其他语言完全不同,且做的是不同的事情。一个是用逻辑单元和寄存器来描述硬件元素的网络,另一个用随时间离散的顺序操作来描述算法。一个需要对数字逻辑硬件有深刻的理解,另一个则需要熟悉计算机编程。
现在,绝大多数为数据中心编写工作负载的人是计算机程序员。他们可能是某个应用领域的专家,甚至是一套算法的专家,但他们通常对数字逻辑硬件知之甚少或一无所知。很快就可以看出,这些人虽然是各自领域的专家,但不可能成功地配置FPGA来加速他们的部分工作负载。这就需要一个FPGA专家,而又没有那么多的专家。
这些现实情况都会限制FPGA加速器对普通云计算用户的吸引力,技术编程团队在一些高度计算密集型应用(如天气分析、蛋白质折叠等等)中很快就意识到了这点。
人们曾试图弥合这一差距。一个明显的办法是认识到人们想要加速的许多最关键的内核是非常相似的,比如三角函数。事实上,其中许多已经是数学或科学库中的库函数。因此,如果你让一个FPGA专家团队去配置FPGA以加速这些常见算法中的内核,那么很多人甚至在不了解FPGA的情况下就可以使用它们。这项工作正在继续。
另一项工作是创建一个工具链,可以将计算机程序直接转化为FPGA配置,无需人工干预。事实证明,这是一个更加艰巨的挑战。C-to-netlist工具已经存在好几年了,对于某些类型的算法和专门为翻译而编写的代码,它们工作得很好。但坦白讲,把一大块C++或Python塞进一个工具,并在另一端有一个好的FPGA实现,仍然是一项进行中的工作。
资源管理问题
除了编程与配置问题外,还有整个资源管理的问题。在数据中心,特别是云计算数据中心,架构师希望每个CPU能够同时处理多个任务,当一个任务必须暂停时,CPU能在多任务之间快速切换。架构师们还希望他们的自动化数据中心管理工具能够在给定的CPU上快速启动任务,跟踪其性能,并在其不再活动时快速销毁,将资源释放给其他任务。他们还期望这些共同驻留的任务之间有绝对的安全性,没有数据从一个任务泄漏到另一个任务。
CPU供应商为满足这些需求付出了大量的工作,包括特殊指令和操作模式。但现有的FPGA在设计时没有考虑到这些要求。对FPGA进行分区,使其能够支持几个不同的加速器并同时为几个不同的任务服务是可能的,但并不简单。保证数据不会在分区之间泄漏是非常重要的。而且,配置FPGA可能需要几分钟的时间,而不是像在CPU上启动一个新任务那样只需几毫秒。因此,在FPGA最初设想的工作环境和云环境之间存在着巨大的不匹配。
这些障碍并没有阻止主要的云计算供应商提供FPGA与CPU结合的实例,也没有阻止一些高级开发者利用这些芯片。但在这一点上,FPGA还没有像GPU那样深入地渗透到云计算领域,毕竟GPU有好几年的领先优势。
也许CPU与FPGA在板卡甚至芯片层面的更紧密地集成会加速采用。当然,Intel、AMD和超大规模公司的大量资源可以克服云端FPGA的编程和管理挑战。但面对每一代FPGA芯片高昂的开发成本,以及数据中心CPU性能的持续改善,很难说FPGA在数据中心领域的前景会如何。
现场可配置性使FPGA成为在某些情况下实现SoC的一种快速、通常较低成本的方式。理论上,这也可以使它们成为云数据中心CPU芯片的理想伴侣。但仍有一些主要问题需要克服。