基于BWDSP的反向传播卷积核求梯度向量化算法

for(int fo = 0; fo < Nfo; ++fo)
  for(int fi = 0; fi < Nfi; ++fi)
    for(int kx = 0; kx < Kx; ++kx)
      clr_XYZTMACC(); //乘累加寄存器清零  
      for(int ky = 0; ky < Ky; ky += 2) {
		for(int x = 0; x < H; ++x)
          for(int y = 0; y < W; y += 16) {
			  //读取16个out_bp的数据至寄存器
			  //读取16*2 = 32 个input的数据至寄存器(分两个时钟周期读取)
			  //因为双字读取时,两个字是相邻的,即两个相邻的字对应一个out_bp的字
			  XYZTfetch_from_16_conv_window_to_register();
			  //16个MACC同时计算
			  XYZTMACC0 += R0 * R4 || XYZTMACC1 += R1 * R4
			  || XYZTMACC2 += R2 * R5 || XYZTMACC3 += R3 * R5
		  }
		 //end of computing 1 matrix of out_bp
		 //----------------------reduce and sum操作--------------------------
		 XYZTCopy_MACC_to_register(); //拷贝到寄存器
		 //每个执行宏内部先进行sum操作
		 XYZTR0 = R0 + R2 || XYZTR1 = R1 + R3
		 //将Macro Y/Z/T内的R0和R1的值传到Marco X
		 gatherToMacroX_R2_7();
		 //Macro X 内部进行reduce_sum
		 for(int i=2; i<7;i+=2) XR0 += Ri || XR1 += Ri+1;
		 //将2个输出结果从寄存器写入内存
		 df(fo,fi,kx,ky) = XR0;
		 || df(fo,fi,kx,ky+1) = XR1;
	  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值