很久没有看FPGA了,本来想继续学习HLS,就上Xilinx的网站看了看。结果发现了SDx 开发环境,很新的一个东西。由于我对这方面了解不多,本篇博文仅仅只是资料的整合和介绍。
1.SDx开发环境
Xilinx官网这样解释SDx:SDx™ 是一种面向系统和软件工程师的开发环境。 SDx 让没有 FPGA 专业知识的系统和软件工程师也能通过使用高层次编程语言,来获益于带有业界标准处理器的可编程硬件的强大威力。SDAccel 是首个面向 OpenCL、C 和 C++进行架构优化的编译器,并结合了#库、开发板,可在FPGA上实现类似 CPU/GPU 的开发运行体验 。
FPGA的结构,FPGA、GPU、CPU之间的优势劣势在我的FPGA学习之基本结构和高层次综合(HLS)-简介中略有涉及,网上也有大量的资料。简单来说,FPGA是一种可编程的器件,采用HDL语言来编写改变其结构。其全并行等特性使得FPGA有极强的计算能力。但FPGA开发是困难的,之前的集成开发环境是ISE,通常采用VHDL或Verilog HDL编写代码。HDL,即硬件描述语言,所以这个时候是和软件工程师没什么关系的(不知道这样说对不对)。
后来主推Vivado,有了HLS(高层次综合),倒有几份文档是面向软件工程师的,但具体怎么样,我也不太清楚——我并没有使用过Vivado。但毫无疑问的是,Vivado不是面向“软件工程师”的。
由此看来,SDx开发平台对Xilinx应该具有很大的意义。而SDAccel是其中最新的一个组成部分(另一个是SDNet,“软”定义网络),Xilinx的对SDAccel描述如下
首个面向 OpenCL、 C 和 C++进行架构优化的编译器
2.FPGA计算
FPGA用于高效能计算,这个想法出项很长时间了。各大公司也进行了一些尝试,下一代计算设备CPU/GPU/FPGA:FPGA规模商用还需时日中提到了FPGA、CPU、GPU和DSP之间的对比,大体结果是GPU性能最强而FPGA具有更高的性能功耗比。文中还提到了微软利用FPGA对Bing数据中心进行加速的计划,以及Baidu在这方面的研究。
关于微软的项目,Microsoft, Baidu find speedier search results through specialized chips中有更详细的介绍。这一项目中利用了Altera的FPGA,文中写道Xilinx的V6系列FPGA曾经被尝试使用并被放弃。
置于百度,Xilinx官方给出的背景资料中提到了Baidu的研究。总结来说,FGPA计算在功率受限下具有很高的性能,可以用在数据中心的加速中。在Machine Learning中,FPGA在实现深度神经网络(Deep Neural Network,DNN)上有很好的表现。(百度采用Mid-range FPGAs,利用的是K7系列XC7K480T)
这一点点的优势的背后是巨大的劣势。首先,FPGA的计算能力不是最强的;其次,FPGA的开发环境不成熟,难度较大,时间周期长;其三,FPGA局限性大,支持性差。
3.SDAccel简介
本节内容主要来自或参考于SDAccel背景资料
这份文档的副标题是“Bringing The Best Performance/Watt to the Data Center”,也就是说这是对于功率受限的数据中心提出的,另一份白皮书中提到是“Tomorrow’s Data Center”这是其自身的定位。图中可以看出FPGA极高的效能比(不知道纵坐标具体指什么……)
文中指出开发者希望数据中心有以下几个特性:
- 高效能
- 完整的软件开发环境
- 利于升级的设计
然而这些正是SDAccel所能带给我们的,关于SDAccel有这样一则新闻赛灵思推出针对OpenCL、 C和 C++的SDAccel开发环境。SDAccel设计思路如下图,它强调的是“FPGA 上类似GPU/GPU的开发体验”。
背景资料中仅对SDAccel特性做了简要说明。
开发体验:CPU/GPU开发者可以通过重用或维护OpenCL,C,C++代码轻易将应用程序迁移到FPGA上。SDAccel报还一些基本的库(OpenCL built-ins, DSP, Video, and linear algebra libraries),同时Auviz还提供了OpenCV和BLAS。程序调试成型之前并不需要FPGA参与,之后需要进行RTL仿真
升级:SDAccel可以实现即时的硬件动态重配,FPGA硬件可复用,因此应用可以平滑的升级。
性能和总结:SDAccel生成的代码在某些方面甚至超过了手工编写的HDL code,和其他编译器相比较更是有巨大优势。
背景资料中并没有提供更多的信息,总结起来就是——Xilinx说他的产品很好。
4.其他
25倍说得很模糊,单词用的是“表现”。本文的标题取自Xilinx,如果从GFLOPs衡量的话,Xilinx官网给出了下面一个图(高性能计算应用)。图中采用K10进行对比,最新的K80在保持K10功耗下,计算能力大概变成了原来的两倍。Virtex7差不多是最新的 FPGA(20nm),因此FPGA相对于GPU的优势并不明显。
就仅有的资料而言,Xilinx对其作出了很多限制(譬如数据中心,功耗限制),无疑在这些方面FPGA有很大的优势。但前景到底如何呢?