diff --git a/mindspore/lite/nnacl/fp16/activation_fp16.c b/mindspore/lite/nnacl/fp16/activation_fp16.c index da3ff04d0e..4fb9daac75 100644 --- a/mindspore/lite/nnacl/fp16/activation_fp16.c +++ b/mindspore/lite/nnacl/fp16/activation_fp16.c @@ -18,24 +18,17 @@ #include "nnacl/errorcode.h" int ReluFp16(const float16_t *src, float16_t *dst, int ele_num) { - int eight_block = UP_DIV(ele_num, C8NUM); - int i; - for (i = 0; i < eight_block - 1; i++) { - int index = i * C8NUM; + int offset = 0; #ifdef ENABLE_NEON - float16x8_t relu_src = vld1q_f16(src + index); - float16x8_t zero_src = vdupq_n_f16(0); - relu_src = vmaxq_f16(relu_src, zero_src); - vst1q_f16(dst + index, relu_src); -#else - int j; - for (j = 0; j < C8NUM; j++) { - dst[index + j] = src[index + j] < 0 ? 0 : src[index + j]; - } -#endif + float16x8_t zero = vdupq_n_f16(0); + for (; offset <= ele_num - C8NUM; offset += C8NUM) { + float16x8_t src_value = vld1q_f16(src + offset); + float16x8_t rst_value = vmaxq_f16(src_value, zero); + vst1q_f16(dst + offset, rst_value); } - for (int j = (eight_block - 1) * C8NUM; j < ele_num; ++j) { - dst[j] = src[j] < 0 ? 0 : src[j]; +#endif + for (; offset < ele_num; offset++) { + dst[offset] = src[offset] < 0 ? 0 : src[offset]; } return NNACL_OK; }