效率与灵活性是任何工程学科的基本权衡之一,在计算机体系结构中也是如此。对于任何给定的任务,例如视频解码,与编写运行在通用处理器(如CPU)上的软件解码器,甚至是GPU的SIMD阵列相比,专用硬件是更节能的解决方案。为特定目的而设计的芯片被称为专用IC或ASIC。然而,设计和制造ASIC显然是困难的,一旦部署了芯片,就不能使用专用硅片区域。
FPGA或现场可编程门阵列位于通用处理器(如CPU和ASIC)之间,处于可编程性和效率范围之内。 FPGA由大量的逻辑块和存储单元组成。逻辑块通常是可用于计算简单逻辑功能的小型可编程查找表。单元之间的连接也是可重新配置的。多个可编程逻辑块和连接可被配置为创建更复杂的单元,例如ALU。
您可以利用FPGA的可重构性将其转换为专用于您的应用的计算设备。例如,考虑只执行某些类型的整数运算的算法。在这种情况下,您可以将FPGA重新配置为充当大量整数ALU,并支持您的应用程序所需的整型操作。没有必要浪费浮点逻辑上的任何逻辑单元,并且进一步整数ALU可以为您的应用程序而不是通用单元定制。因此,对于某些应用而言,FPGA实现通常可以提供比同样算法的CPU或GPU实现高得多的性能/瓦特。 FPGA的效率部分来自硬件为您的应用程序重新配置的事实。
反过来,FPGA中的整数单位可能不如专为您的应用程序设计和优化的ASIC(功率或面积方面)那样高效。然而,与ASIC不同的是,如果您决定在将来调整算法,您可以简单地用新的程序重新刷新FPGA,而不是再次到绘图板去设计,验证和制造新的ASIC,同时丢弃旧的。一些FPGA甚至允许动态部分重新配置,其中FPGA的一部分被重新编程,而另一部分仍然被激活。
然而,编程FPGA传统上一直很困难,需要专门的硬件描述语言(HDL),如VHDL或Verilog。一些其他的选择,如SystemC,也保持一定的利基。对于编程FPGA更简单的工具已经引起了相当大的兴趣,这就是OpenCL进来的地方。与VHDL和Verilog等工具相比,OpenCL相当容易学习和使用,从而解决了FPGA的传统弱点之一。此外,已经有大学课程和工业研讨会在OpenCL或CUDA或C ++ AMP等类似语言中教授异构编程概念,因此熟悉OpenCL概念的程序员数量正在迅速增加。
虽然专家可能会继续使用HDL,但OpenCL将使更多的程序员能够使用FPGA。即使HDL专家也可以使用OpenCL作为一种在FPGA上创建想法的快速方法。有趣的是,Xilinx(目前最大的FPGA供应商)最近也宣布,他们正在努力将OpenCL用于他们的FPGA,但未宣布任何时间表。在本文中,我们将介绍Altera的OpenCL产品,这些产品已经上市销售。在继续之前,我会补充一点警告。我自己的专长和经验主要是在GPU和CPU上使用OpenCL(以及类似的API),而不是在FPGA或HDL中使用。你可以把这篇文章想象成CPU / GPU程序员对FPGA世界的看法。我还没有Altera SDK的第一手经验。本文是基于我阅读Altera文档和白皮书,以及围绕Web的各种FPGA相关文献。来自Altera的人也对本文有很大的帮助,因为他们能够为我的许多问题得到答案。
Altera的产品和路线图
Altera设计和制造FPGA芯片,然后将这些芯片出售给合作伙伴和客户。 CPU和GPU公司通常具有不同的特性,如内核数量,频率,特性,存储器接口等。同样,Altera在每条线内提供多个产品线和多个产品。产品在规格上有所区别,例如自适应逻辑模块(ALM)的数量,片上存储器的类型和大小以及外部I / O带宽。 FPGA供应商也开始在芯片上增加一些额外的可编程处理器。例如,Altera的一些Stratix V FPGA在芯片上集成了DSP模块,Cyclone V FPGA在芯片上集成了ARM CPU内核。 FPGA还可能具有片上高速收发器,用于连接外部I / O设备,如摄像机,医疗成像设备,网络设备和高速存储设备。网络和高速流媒体/过滤类型的应用特别适用于这种设备。
下面显示了Altera Stratix V FPGA(源代码)框图,其中显示了具有逻辑模块和互连,片上存储器(m20k模块),DSP模块,收发器和其他I / O接口的核心逻辑结构:
Altera合作伙伴将在FPGA周围设计一个产品,例如基于PCIe的电路板,并可能添加自己的定制,例如板上支持的I / O接口,外围设备以及相关板载存储器的大小和带宽(如果有的话) 。基于PCIe的电路板远不是部署FPGA的唯一方法,有些客户可能选择定制解决方案。不过,我们将重点介绍本文的基于PCIe的用例。
Altera目前这一代高端产品线是Stratix V品牌,是目前唯一支持OpenCL的产品系列。 Stratix V系列目前在台积电采用28nm工艺制造。有趣的是,FPGA制造商通常是采用新工艺技术的首批产品之一。在第一批28nm GPU或移动CPU之前,Altera的28nm产品开始出货。 Altera也宣布了20nm产品(品牌Arria 10)。值得注意的是,Altera已经与英特尔达成协议,在英特尔的制造工厂中制造即将推出的Stratix 10品牌14nm FPGA。
去年年底,Altera在FPGA上推出了OpenCL的私人测试版。 SDK现在已经公开。 Altera的实现建立在OpenCL 1.0的基础之上,但是提供定制的扩展以利用FPGA的独特功能。更多信息可以在Altera的OpenCL页面上找到。他们还采用了OpenCL 2.0临时规范的一些功能,例如管道。从性能的角度来看,Altera发布了白皮书,表明与CPU和GPU相比,FPGA在某些应用中的性能/功耗要高得多。 Altera研究中使用的典型FPGA电路板功耗在20W的范围内,远低于高端分立GPU,如经常在200W范围内的Tesla系列GPU。 Altera声称,在FPGA上运行的OpenCL要么超越GPU,要么在某些应用程序的功耗相当低的情况下与性能相匹配。 Altera并没有声称这对每一个应用都是正确的,但是我认为这对某些类型的应用来说是合理的。
我们将介绍一些OpenCL术语以及这些概念如何映射到FPGA。接下来,我们将看看Altera的OpenCL实现的一些细节,最后我将提供一些结论性意见。