diff --git a/src/layer/arm/prelu_arm.cpp b/src/layer/arm/prelu_arm.cpp index 845a8c217..d1959e0a9 100644 --- a/src/layer/arm/prelu_arm.cpp +++ b/src/layer/arm/prelu_arm.cpp @@ -25,6 +25,112 @@ DEFINE_LAYER_CREATOR(PReLU_arm) int PReLU_arm::forward_inplace(Mat& bottom_top_blob, const Option& opt) const { int dims = bottom_top_blob.dims; + int elempack = bottom_top_blob.elempack; + + if (opt.use_packing_layout) + { + + if (elempack == 4) + { + float32x4_t _zero = vdupq_n_f32(0.f); + + if (dims == 1) + { + int w = bottom_top_blob.w; + + float* ptr = bottom_top_blob; + + if (num_slope > 1) + { + const float* slope = slope_data; + + #pragma omp parallel for num_threads(opt.num_threads) + for (int i=0; i 1 ? vld1q_f32((const float*)slope_data + i * 4) : vdupq_n_f32(slope_data[0]); + + for (int j=0; j 1 ? vld1q_f32((const float*)slope_data + q * 4) : vdupq_n_f32(slope_data[0]); + + for (int i=0; i