#ifndef __INFINIOP_REDUCE_CPU_H__ #define __INFINIOP_REDUCE_CPU_H__ #include "../../../utils.h" #include #ifdef ENABLE_OMP #include #endif #include namespace op::common_cpu { namespace reduce_op { template using ReduceToSame = std::disjunction< std::is_same, std::is_same, std::is_same, std::is_same, std::is_same, std::is_same, std::is_same, std::is_same, std::is_same, std::is_same>; template ::value>> T sum(const T *data, size_t len, ptrdiff_t stride = 1) { T result = 0; for (size_t i = 0; i < len; i++) { result += data[i * stride]; } return result; } float sum(const fp16_t *data, size_t len, ptrdiff_t stride = 1); template ::value>> T max(const T *data, size_t len, ptrdiff_t stride = 1) { T result = data[0]; for (size_t i = 1; i < len; i++) { result = std::max(result, data[i * stride]); } return result; } float max(const fp16_t *data, size_t len, ptrdiff_t stride = 1); template ::value>> T sumSquared(const T *data, size_t len, ptrdiff_t stride = 1) { T result = 0; for (size_t i = 0; i < len; i++) { T val = data[i * stride]; result += val * val; } return result; } float sumSquared(const fp16_t *data, size_t len, ptrdiff_t stride = 1); } // namespace reduce_op } // namespace op::common_cpu #endif //__INFINIOP_REDUCE_CPU_H__