HLS-卷积运算单元设计与SDK测试.docx

上传人:s9****2 文档编号:560569766 上传时间:2023-12-26 格式:DOCX 页数:40 大小:166.01KB
返回 下载 相关 举报
HLS-卷积运算单元设计与SDK测试.docx_第1页
第1页 / 共40页
HLS-卷积运算单元设计与SDK测试.docx_第2页
第2页 / 共40页
HLS-卷积运算单元设计与SDK测试.docx_第3页
第3页 / 共40页
HLS-卷积运算单元设计与SDK测试.docx_第4页
第4页 / 共40页
HLS-卷积运算单元设计与SDK测试.docx_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《HLS-卷积运算单元设计与SDK测试.docx》由会员分享,可在线阅读,更多相关《HLS-卷积运算单元设计与SDK测试.docx(40页珍藏版)》请在金锄头文库上搜索。

1、HLS卷积运算单元设计与SDK测试目录.O 一、引言o二、概念O 三、程序0四、优化o五、测试O六、补充一、引言ap_uint CHout,/输出特征的通道数ap uintKx,/卷积核的宽度ap uintKy,/卷积核的高度ap_uintSx,/卷积核扫描时,宽度方向的步进ap_uintSy,/卷积核扫描时,高度方向的步进ap_uintmode,/卷积的模式,valid还是samerelu en,/激活非线性反激活层标志dtype_bus feature_in,输入feature map的数据,由于C中无法使用可变数组,故使用指针,传地址来定位具体数据,四维 数组按一维分布/之前池化使用的是

2、固定大小的,可以按照固定数组来传,但这里数组长度是变的输入feature map数据小输入feature map数据小ap_uint feature_in_precision, /数点位置dtype_bus W,/输入权重的数据,也是指针索引ap_uint Wprecision,ap_uint Wprecision,/输入权重数据小数点位置dtypebus feature_out,/输出feature map的数据,也是指针索引输出feature map数据小输出feature map数据小ap_uint feature_out_precision /数点位置);/mode: 0:VALID,

3、 1:SAME#endif 2、conv corc. cpp 文件。ttinclude conv core. hvoid Conv(/输入特征图四维:C/K H W K/输入权重值五维:CHoutKyKxCHin/KK/输出特征图四维:C/K H W K,均可以计算出来ap_uint CHin, /输入通道数(输入图层方向上的数目)(卷 积核与特征图参量)ap_uint Hin, /输入特征的高度(卷积核与特征图参量)ap_uint Win, /输入特征的宽度(卷积核与特征图参量)ap_uint CHout, /输出特征的通道数(卷积核参量)ap_uintKx,/卷积核的宽度ap_uintKy

4、,/卷积核的高度ap uintSx,/卷积核扫描时,宽度方向的步进ap_uintSy,/卷积核扫描时,高度方向的步进ap_uintmode, /卷积的模式,valid还是sameap uintrelu_en,/激活非线性反激活层标志dtype_bus feature_in,/ 输入 feature map 的数据,由于C中无法使用可变数组,故使用指针,传地址来定位具体数据,四维 数组按一维分布/之前池化使用的是固定大小的,可以按照固定数组来传,但这里数组氐度是变的ap uint feature in precision,ap uint feature in precision,/输入featu

5、re map数据小数点位置dtype_bus W,dtype_bus W,/输入权重的数据,也是指针索引ap uint W_precision,ap uint W_precision,/输入权重数据小数点位置dtype_bus feature_out,/输出feature map的数据,也是指针索引ap uint feature out precisionap uint feature out precision/输tH feature map数据小数点位置)/mode: 0:VALID, 1:SAME ap_uint pad_x, pad_y; / padding 数据,表示 x 和 y 方

6、向待填补的行列数ap_uint CHin_div_K=(CHin+K-l)/K; / 输入图层方向上,切块后每个的长度ap uint out truncate;out_truncate=feature_in_precision+W_precision-feature_out_precision;if (mode=0) / valid T不进行 padding pad x=O;pad y=0;)else / same模式下进行padding,具体padding的数据值,在之前 概念部分补充了(pad _x=(Kx-1)/2; pad _y= (Ky-l)/2;/通过输入的参数数据,计算输出图层的

7、高度和宽度,这个的公式也是固定的ap uint Hout, Wout;Wout=(Win+2*pad_x-Kx)/Sx+1;Hout= (Hin+2*pad_y-Ky)/Sy+1;dtype_acc sum=0;dtype_bus out_tp=0;/对输出feature map的数据进行计算/关于是输出方向上需要多少重循环的定位:输出是一个四维的数据,需要前三重做迭代,第四重做处理/ 一是输出图像的高度,二是输出图像的宽度,三是输入图层方向上切块了多少,四是具体索引到哪个子块LOOPi:for(int i=0;iHout;i+)/输出高度和宽度方向上的循环LOOP_j:for(int j=0

8、;jWout;j+)(/输出通道方向上的循环,CHout表示有多少个 kernel,是卷积核专门的一个参数,与输入特征图无关LOOP cout:for(intcout=0;coutCHout;cout=cout+l)(/第四维上的数据处理/把卷积核size一个点,在所有子块上的结果都求出来,再循环size上所有点L00P_ii:for(int ii=0;iiKy;ii+)LOOP_jj:for(intjj=O;jjKx;jj+)/ CHin_div_K输入方向上切块的循环/输入通道方向上被切块了,需要做一个循环,按输入通道上子块的数目LOOP_cin:for(intcin=O;cinCHin

9、div K;cin=cin+1)h=i*Sy-pad_y+ii;w=j*Sx_pad_x+jj;tp;padding的范围内是获取特征图数据和权重数据的ap_intap_int dtype_mul_bus dtype bus dat;dtype_bus wt;/判断是否在/这段if代码 if(h=0 & w=0& hHin & wWin)/输入数据 dat=feature_incin h w K/根据四维数据的这个索引,来算出一维的数据/INT16*K feature_inC/K H W为 feature_in 的形状,K相当于 INT16*K 了/ dat=fcature_incin h w

10、7j这个形状里取的索引dat二feature incin*Hin*Win+h*Win+w;/INT16*K weightCHout Ky Kx CHin/Kj权重的形状,K相当于 INT16*K 了/wt=weightcout ii jj cin为这个形状里取的索引wt=Wcout*CHin div K*Kx*Ky+ii*CHin div K*Kx+jj*CHin div K+cin;/std:cout,dat=,dat, W=z/wtstd:endl;elsedat=0;wt=O;/每次取出一个特征图子块和权重子块,来进行累加for (int k=0;kK;k+)(/具体子块的累加过程,对应

11、元素相乘/ tp 是一个32*k的数据,位宽32*ktp. range(k*32+31, k*32) = (dtype_dat)dat. range (k*16+15,k*16)* (dtypc_dat)wt. range (k*16+15, k*16);for (intk=0;kK;k+)累加,40位的数据,这个累加是移位前的数据sum+=(dtype mul)tp. range(k*32+31, k*32);/std:cout,sum=/zsumstd:endl;/std:coutz/sum=/zsumstd:endl;if(cin=CHin_div KT) & (jj=KxT) & (i

12、iKy-1)(/如果使用了非线性激活层,小于0就设为0if (relu_en & sumout_truncate;/移位如果范围,进行前后的钳位if(res32767) rcs=32767;elseif(res-32768) res=-32768;dtypc_dat res_16=rcs;out_tp. range (cout%K)*16+15, (cout%K)*16)=res;sum=O:/ feature_outcoutijcoutif( (cout%K)=K-l) | (cout= (CHout-1) 涉及内容包括:多位宽并行,动态定点数运算,设置LOOPJTRIPCOUNT来性能分

13、析等。二、概念1、功能定义。为了让卷积运算单元更具灵活性,在输入图层的长宽高、卷积核的大小、2、feature的内存排布。之前的池化模块的feature,是一个四维数组。而卷积核没有分块前,也是四维的。这边按问答方式对一些概念进行整理。为什么未分块前,卷积核(fc&lurc、kernel)为四维的? 从下面这张图上看,卷积核可以表示为2x3x3x3,即:个数x长x宽x通道 feature_ out (cout/K)*Wout*Hout+i*Wout+j=out tp;out tp=0;)3、main, cpp 文件。C仿真是必须的,用来保证C语言这边的设计是没有问题的。ttinclude stdio. httinclude convcore.httdefine IN_WIDTH 10ftdefine INJEIGHT 10ttdefine IN CH 1#define IN_CH_DIV_K (IN_CH+K-1)/K)甘define KERNEL WIDTH 5#define KERNEL HEIGHT 5 ttdefine XSTRIDE 1 甘define Y STRIDE 1#define RELU_EN 0/0:VALID, 1:SAME/0:VALID,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号