Introspecting / DepthwiseCONV-HLS

使用HLS设计一个可分卷积(High Level Synthesis)模块,以在FPGA上对其进行加速。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

DepthwiseCONV-HLS

使用HLS设计一个可分卷积(High Level Synthesis)模块,以在FPGA上对其进行加速。

介绍

这是一个Xilinx XUP中用于巩固HLS基础的项目。

可分卷积被应用在许多轻型神经网络中,它能以更少的参数量和计算量(大约可以降低一个量级)来达到相似的精度。在性能受限的嵌入式环境中,这个优点尤为突出。因此,我们想在xczu3eg这样一款面向嵌入式环境的FPGA上实现一个用于加速可分卷积的功能模块。为了巩固还不怎么熟悉的HLS和节约时间,我们将用HLS C作为编程语言。

目标

设计一个能够对可分卷积进行加速的HLS模块。它使用AXI接口读取输入数据和权值,并且在计算过程中能对它们进行复用以减少数据的搬移。同时,充分利用FPGA的资源也是设计的一个原则,这里的资源主要是DSP和BRAM。数据类型预期将使用fp16/int16,因为我还不太会量化😓。

实验环境

FPGA:xczu3eg-sfvc784-1-i 开发工具:Vivado HLS 2018.3 操作系统:Windows 10

进度安排

从1.8到1.26,时间大约3周:

1:通过示例熟悉HLS和AXI接口;

2:实现可分卷积中的分层卷积;

3:实现可分卷积中的1x1卷积。

备注

不知道能做到什么程度,可能性能不会太好,但不论什么情况可分卷积模块都必须完成!希望后续能够做的完善一些。

进度说明

目前的版本只是做了一个非常简陋的可分卷积模块,宽高和深度都是固定的。之前想用AXI实现,然后和Zynq ARM处理器连接用作加速器,但是对接口和驱动并不熟悉,所以暂时没法完成。(比想象中复杂很多。😂)

下面是应用宏的综合结果和基准的对比。其实代码做的修改也很多,但是这里不好比较。目前的设计还有很多性能优化的空间,比如各个函数的延迟更均衡一些、使用更多的DSP、读取数据和计算过程的并行等,但先到这里吧。

优化结果

About

使用HLS设计一个可分卷积(High Level Synthesis)模块,以在FPGA上对其进行加速。


Languages

Language:C 74.2%Language:Tcl 25.8%