大赞Xilinx SDAccel:把FPGA开发带入软件定义时代

作者:杨东

众所周知,Xilinx公司是FPGA芯片厂商的领导者,如今已经成立了30个年头,为我们电子开发者提供了很多优秀的迭代产品,同时不断优化的FPGA开发工具软件。但是随着互联网时代的到来,FPGA的可扩展、高性能等优势使其可以在多领域大展身手,例如Intel、 百度等商业巨头都开始着手使用FPGA作为他们的数据中心,利用FPGA实现一些深度学习、人工神经网络算法等。

六年前Xilinx便开始了一项打破传统FPGA开发流程的研究项目,使软件开发的一套流程能够移植到FPGA开发上来,现在SDAccel开发环境终于与大家见面了。做为Xilinx SDx生态系统中的一员,SDAccel是首个面向OpenCL、C和C++进行架构优化的编译器,能够让开发者在FPGA上实现类似CPU/GPU的开发体验,例如编译、调试和优化等,例如其实现的FPGA数据中心加速服务相比CPU/GPU单位功耗性能提升了25倍,时延则缩短了50到70倍。

Xilinx推出SDAccel:打破传统
下面的百度公司在2014年热门芯片研讨会上公布的一份调查结果显示:

  • 中端 FPGA能够实现375 GFLOPS 的性能,功耗仅为10-20W。
  • 基于FPGA 的加速器可部署在所有类型的服务器中。
  • 和 CPU 和 GPU 相比, FPGA 在深度神经网络(DNN)预测系统中性能更加出色。DNN 系统用于语言识别、图像搜索、OCR、面部识别、网页搜索以及自然语言处理等各种不同应用。
  • 传统的FPGA开发设计使用Verilog语言实现RTL设计,这种开发设计周期长、一些算法的verilog实现相比软件编程语言更加的晦涩难懂,而借助一些软件库可以轻松实现我们的想法,加快产品的研发周期,SDAccel开发环境让没有FPGA开发经验的软件工程师也能够受益于FPGA平台的优势。

    SDAccel FPGA软开发三步走

    图1 SDAccel开发环境

    图1 SDAccel开发环境

    编译:
    软件开发过程中编译代码是第一阶段,而且代码的编译结果与CPU/GPU资源的使用规则一般都是固定的,程序开发人员只需要关心算法的具体实现就可以了。而FPGA的编译过程则是一大难题:编译结果怎么在FPGA的可编程逻辑资源中实现以及FPGA程序代码的存储方式等问题。
    SDAccel解决了这些问题,它能够识别选定FPGA型号的逻辑资源和内部存储结构类型,编译器能够在不同状态之间提取并行语句,使用基于阵列读写方式的自动内存结构,完成整个FPGA代码的编译过程。

    调试:
    在软件开发过程中,完成编译过程并不代表应用程序开发正确,我们还需要在目标硬件上进行不断的调试,发现问题改正错误,软件的调试是一个非常容易理解的问题,但是FPGA得调试却是另一回事,为了能够实现FPGA的调试功能,SDAccel引用了软件调试中经常使用的printf和GBD。

    Printf的FPGA实现会浪费一些逻辑资源,这些资源本可以用于实现一些算法功能的,但是这里SDAccel做了一些改进优化,将printf的数据生成与解码显现分离开来,从硬件角度来看,生成printf数据只需要消耗非常少的逻辑资源,数据解码显示则完全有上位机完成,这样实现printf功能几乎对FPGA逻辑资源是零损耗。

    程序开发人员可以使用SDAccel的仿真模式进入在线仿真功能,可以像软件调试一样设置断点、单步调试等操作。

    优化:
    FPGA应用的优化准则与CPU上的优化准则是一样的,只是实现方法不同,CPU上的优化是要关注处理的缓存大小和运算单元数量,而FPGA上的应用优化则关心所选器件型号的逻辑资源和运行时的性能。

    总结展望
    Xilinx推出的SDAccel让我们看到FPGA开发新的形式,可以让我们像软件一样完成FPGA应用的开发,同样的编译、调试、优化改进操作流程。Xilinx近年来的不断创新带来了一些业界传统变革,如最近提出的All Programmable 概念、SDx开发生态系统,同时它也不再是传统的可编程逻辑公司。这些创新不仅让FPGA应用到更多的领域,也预示着一个新的时代的到来——软件定义时代,我们能做的只有不断学习,紧追时代脚步。

    声明:本文为原创文章,转载需注明作者、出处及原文链接,谢谢!