Browse Source

conv7x7s2 pack1to4 bf16s neon kernel

tags/20200413
nihui 6 years ago
parent
commit
6561334c5f
3 changed files with 5611 additions and 3 deletions
  1. +5589
    -0
      src/layer/arm/convolution_7x7_pack1to4_bf16s.h
  2. +10
    -0
      src/layer/arm/convolution_arm.cpp
  3. +12
    -3
      src/layer/arm/packing_arm.cpp

+ 5589
- 0
src/layer/arm/convolution_7x7_pack1to4_bf16s.h
File diff suppressed because it is too large
View File


+ 10
- 0
src/layer/arm/convolution_arm.cpp View File

@@ -51,6 +51,7 @@ namespace ncnn {
#include "convolution_3x3_pack4_bf16s.h"
#include "convolution_3x3_pack1to4_bf16s.h"
#include "convolution_3x3_pack4to1_bf16s.h"
#include "convolution_7x7_pack1to4_bf16s.h"
#endif // __ARM_NEON


@@ -1375,6 +1376,15 @@ int Convolution_arm::forward_bf16s(const Mat& bottom_blob, Mat& top_blob, const
activation->forward_inplace(top_blob, opt);
}
}
else if (kernel_w == 7 && kernel_h == 7 && dilation_w == 1 && dilation_h == 1 && stride_w == 2 && stride_h == 2)
{
conv7x7s2_pack1to4_bf16s_neon(bottom_blob_bordered, top_blob, weight_data_pack1to4_bf16, bias_data, opt);

if (activation)
{
activation->forward_inplace(top_blob, opt);
}
}
else
{
// num_output


+ 12
- 3
src/layer/arm/packing_arm.cpp View File

@@ -31,7 +31,13 @@ Packing_arm::Packing_arm()

int Packing_arm::forward(const Mat& bottom_blob, Mat& top_blob, const Option& opt) const
{
if (opt.use_bf16_storage)
size_t elemsize = bottom_blob.elemsize;
int elempack = bottom_blob.elempack;

bool elemtype_is_bf16 = (elemsize == 2u && elempack == 1) || (elemsize == 8u && elempack == 4);
bool elemtype_is_fp32 = (elemsize == 4u && elempack == 1) || (elemsize == 16u && elempack == 4);

if (opt.use_bf16_storage && elemtype_is_bf16)
return forward_bf16s(bottom_blob, top_blob, opt);

if (use_padding)
@@ -39,8 +45,11 @@ int Packing_arm::forward(const Mat& bottom_blob, Mat& top_blob, const Option& op
return Packing::forward(bottom_blob, top_blob, opt);
}

size_t elemsize = bottom_blob.elemsize;
int elempack = bottom_blob.elempack;
if (!elemtype_is_fp32)
{
// non-fp32 type
return Packing::forward(bottom_blob, top_blob, opt);
}

if (elempack == out_elempack)
{


Loading…
Cancel
Save