以神经网络为例,看HLS如何优化硬件设计 您所在的位置:网站首页 企业微信无法打开相机权限怎么办 以神经网络为例,看HLS如何优化硬件设计

以神经网络为例,看HLS如何优化硬件设计

#以神经网络为例,看HLS如何优化硬件设计| 来源: 网络整理| 查看: 265

被题目难度劝退的,可能就无法享受到HLS给我们带来的乐趣了,读下去——

我是蔡宇杰,复旦大学微电子系博士,达尔闻入驻讲师。

之前我分享过HLS工具的使用入门课程,发现大家对于由C语言生成电路这件事情很感兴趣。但是,你要知道使用软件思维实现的C语言代码生成的电路不管是在工作效率还是面积方面都是极差的,这样的电路的运行效率通常比不上CPU,“硬件加速”成了“硬件减速”。

如果你能熟练使用HLS工具,结果就大不同了,先给大家普及一个简单的小知识:对比HLS生成的电路从外部存储器中获取数据的两种方法,来看看HLS中的stream。

请大家回忆一下,我们的运算模块是如何获取大量数据的?其中一种方法是使用AXI-HP接口,就如下图这样:

这段代码的意思是,数组a储存在外部存储器之中,HLS生成的电路会从数组a对应的地址依次读回数据。这样写确实可以实现对数组a的访问,但是很可惜,这些访问在电路实现时采用的是基于AXI-HP协议的单次访问的形式,而不是突发传输,因此总线利用效率极低(关于突发传输的好处,可以参考我之前的SOC课程,链接:url.cn/5hWpW5k。)

目前根据Xilinx的官方资料,要让HLS工具生成的AXI-HP口进行突发传输,只能通过使用memcpy函数,如下图:

但是使用memcpy进行传输,依旧有一定的弊端。首先,这会使对于数组a的访问不再那么灵活,且需要一块内部存储区(数组val)对外部存储器a中的数据进行缓存。其次,memcpy函数依旧无法使用AXI-HP中outstanding的特性(关于outstanding的好处,可以参考我之前的SOC课程,链接url.cn/5hWpW5k),因此对于DDR这类需要预充电的外部存储器而言,其总线利用效率依旧不高。

因此在HLS工具里,基于axi-stream的数据访问是一种比AXI-HP更加高效的方法,如下图所示:

在这种方法里,一个高效的DMA作为stream的source,而HLS生成的电路作为stream的sink。高效的DMA本身通过AXI-HP接口从外部存储器中获取数据,并通过axi-stream送给HLS生成的运算电路。此方法与之前的方法相比,优势在于电路外部的DMA工作时可以使用axi-hp的burst与outstanding的特性,总线利用效率比使用HLS工具生成的axi-hp接口的效率高出很多。

HLS工具的强大优势远不止上面这个实例,虽然我们使用的是“C转verilog”的这种HLS工具,但我们的设计思想依旧是硬件电路的开发,HLS工具可以帮助我们简化硬件的工作量。如果你深入了解他的思想,掌握优化的方法,你就可以自由的生成自己想要的“完美电路”。目前HLS工具的使用资料很少,官网有一些,但是很多教学的视频我发现有重大弊端它们只教优化选项的使用方法,并没有教大家分析“我想要把它优化成啥样”,这种方法我们永远不知道我们的优化是不是最优,而且也不知道我们当前生成的电路“有多优”。

所以,我也一直在自己的学习过程中去摸索如何搞清楚我们要生成的电路的架构,例如数据是怎么送进去的、内部并行是怎么做的、哪些操作是可以流水线并行做的等等。除此之外,我也做了大量的实战,让HLS与HDL的联合开发,我使用的是卷积加速器实例,分析其中哪些模块适合用HLS工具快速生成,哪些模块只能用HDL代码实现,并使用HLS与HDL联合开发出此卷积加速器。

我常常在各类群里被提问HLS, SOC加速各类问题,大家也可以把自己感兴趣的或者有疑问的点留言的方式告诉我,关于这些内容,我在不停的总结和论证,形成体系的课程,已经有大纲雏形(如下)

预告:正式开始录制和上线达尔闻的时间应该会放在11月份,如果大家对HLS学习感兴趣,或者对课程设计有建议,欢迎大家在留言反馈,被采纳的考虑正式开课后给予免费学习名额。

如果你对计算机视觉、神经网络、AI、HLS、SOC、FPGA等有兴趣,欢迎加入达尔闻技术交流群。进群方式:识别下方二维码进群;如二维码过期,在“达尔闻说”公众号回复:宇杰,即可获得进群通知。前100名进群有福利!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有