vivadohlsdsp_FPGA硬件加速学习vivado hls-----------------卷积加速

本文介绍了使用Vivado HLS在FPGA上实现卷积加速的过程,探讨了如何通过ARRAY_PARTITION、ARRAY_RESHAPE和PIPELINE指令优化嵌套循环,以提高计算效率。同时,讨论了不同优化策略对资源利用和计算间隔的影响,并通过实例分析展示了优化效果。
摘要由CSDN通过智能技术生成

对嵌套循环的加速。

void ConvProcess(float temp[CHN_IN],float sum[CHN_OUT])

{

//#pragma HLS ARRAY_PARTITION variable=filter_buf complete dim=2

int i,j;

convprocess1:

for(j=0;j

b882b8796a5d970fb8bf2b74bad95746.png

void ConvProcess(float temp[CHN_IN],float sum[CHN_OUT])

{

#pragma HLS ARRAY_PARTITION variable=filter_buf complete dim=2

int i,j;

convprocess1:

for(j=0;j

使用这种优化方法的效果,综合时间较长。

dda2f1262e5b0e76727731d33388f51b.png

换一个清晰一点的卷积思路

void ConvProcess(float temp[CHN_IN],float sum[CHN_OUT])

{

//#pragma HLS ARRAY_PARTITION variable=filter_buf complete dim=2

int i,j;

float tmp_sum;

convprocess1:

for(i=0;i

浮点乘法需要3个dsp 浮点加法需要两个dsp

浮点乘法需要5个周期 浮点加速需要10个周期

对内层的convprocess2进行pipeline指令优化。

cad23bc1a9213ff6222579a4fcfe5524.png

对外层的convprocess使用pipeline指令。

最外层pipeline 内层unroll。

189bed49367332ccba4375ad92431974.png

此时,对端口进行切割操作。

#pragma HLS ARRAY_RESHAPE variable=temp complete dim=1

#pragma HLS ARRAY_RESHAPE variable=filter_buf complete dim=2

a71dcfad8c8cfedfada6e56db7b12f3f.png

看来在没有了数据读写端口的限制下,可以达到initiation interval为1的间隔。

如果按照给最大资源的思路进行优化的话

void ConvProcess(float temp[CHN_IN],float sum[CHN_OUT])

{

#pragma HLS ARRAY_RESHAPE variable=filter_buf complete dim=2

#pragma HLS ARRAY_RESHAPE variable=sum complete dim=1

#pragma HLS PIPELINE

#pragma HLS ARRAY_RESHAPE variable=temp complete dim=1

#pragma HLS ARRAY_RESHAPE variable=filter_buf complete dim=2

//#pragma HLS ARRAY_PARTITION variable=filter_buf complete dim=2

int i,j;

for(j=0;j

25ff73f129c270a7172492ca5b20687c.png

为了更好的分析,把chn in改为3 cnh out改为6

分析报告如下

1088e958be2c261742d5bfa3e4cc540e.png

这里的一个疑问就是为什么乘法的环节这么少。

如果不对端口和数组做优化呢

e97f3ab9d71e442e8e945d8335e3353a.png

分析图如下:

95d13e18117153a9692bee2a20de9b13.png

如果对权重数组做优化呢?

feaabd0a2409b9ec9b9223ce207ed9a6.png

发现没有变换。看来如果不对输入输出同样做优化的话,就没啥用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值