1818namespace zvec {
1919namespace ailego {
2020
21+ #if defined(__riscv_vector)
22+ float SquaredEuclideanDistanceRVV (const float *lhs, const float *rhs,
23+ size_t size);
24+ float EuclideanDistanceRVV (const float *lhs, const float *rhs, size_t size);
25+ #endif
26+
2127#if defined(__ARM_NEON)
2228void SquaredEuclideanDistanceFp32NEON (const float *lhs, const float *rhs,
2329 size_t size, float *out);
@@ -44,14 +50,29 @@ float SquaredEuclideanDistanceFp32Scalar(const float *lhs, const float *rhs,
4450// -----------------------------------------------------------
4551// SquaredEuclideanDistance
4652// -----------------------------------------------------------
53+ <<<<<<< HEAD
54+ =======
55+ #if defined(__SSE__) || defined(__ARM_NEON) || defined(__riscv_vector)
56+ >>>>>>> 05b06b8 (feat: add RVV non-batch distance operators)
4757// ! Compute the distance between matrix and query (FP32, M=1, N=1)
4858void SquaredEuclideanDistanceMatrix<float , 1 , 1 >::Compute(const ValueType *m,
4959 const ValueType *q,
5060 size_t dim,
5161 float *out) {
62+ <<<<<<< HEAD
5263#if defined(__ARM_NEON)
5364 SquaredEuclideanDistanceFp32NEON (m, q, dim, out);
5465#else
66+ =======
67+ #if defined(__riscv_vector)
68+ if (zvec::ailego::internal::CpuFeatures::static_flags_.RISCV_VECTOR ) {
69+ *out = SquaredEuclideanDistanceRVV (m, q, dim);
70+ return ;
71+ }
72+ #elif defined(__ARM_NEON)
73+ SquaredEuclideanDistanceNEON (m, q, dim, out);
74+ #elif defined(__SSE__)
75+ >>>>>>> 05b06b8 (feat: add RVV non-batch distance operators)
5576#if defined(__AVX512F__)
5677 if (zvec::ailego::internal::CpuFeatures::static_flags_.AVX512F ) {
5778 *out = SquaredEuclideanDistanceFp32AVX512 (m, q, dim);
@@ -64,6 +85,7 @@ void SquaredEuclideanDistanceMatrix<float, 1, 1>::Compute(const ValueType *m,
6485 return ;
6586 }
6687#endif // __AVX__
88+ <<<<<<< HEAD
6789
6890#if defined(__SSE__)
6991 if (zvec::ailego::internal::CpuFeatures::static_flags_.SSE ) {
@@ -74,17 +96,45 @@ void SquaredEuclideanDistanceMatrix<float, 1, 1>::Compute(const ValueType *m,
7496 *out = SquaredEuclideanDistanceFp32Scalar (m, q, dim);
7597#endif // __ARM_NEON
7698}
99+ =======
100+ *out = SquaredEuclideanDistanceSSE (m, q, dim);
101+ #else
102+ float sum = 0 .0f ;
103+ for (size_t i = 0 ; i < dim; ++i) {
104+ sum += MathHelper::SquaredDifference (m[i], q[i]);
105+ }
106+ *out = sum;
107+ #endif
108+ }
109+ #endif // __SSE__ || __ARM_NEON || __riscv_vector
110+
111+ >>>>>>> 05b06b8 (feat: add RVV non-batch distance operators)
77112
78113// -----------------------------------------------------------
79114// EuclideanDistance
80115// -----------------------------------------------------------
116+ <<<<<<< HEAD
117+ =======
118+ #if defined(__SSE__) || (defined(__ARM_NEON) && defined(__aarch64__)) || \
119+ defined (__riscv_vector)
120+ >>>>>>> 05b06b8 (feat: add RVV non-batch distance operators)
81121// ! Compute the distance between matrix and query (FP32, M=1, N=1)
82122void EuclideanDistanceMatrix<float, 1, 1>::Compute(const ValueType *m,
83123 const ValueType *q,
84124 size_t dim, float *out) {
125+ #if defined(__riscv_vector)
126+ if (zvec::ailego::internal::CpuFeatures::static_flags_.RISCV_VECTOR ) {
127+ *out = EuclideanDistanceRVV (m, q, dim);
128+ return ;
129+ }
130+ #endif
85131 SquaredEuclideanDistanceMatrix<float , 1 , 1 >::Compute (m, q, dim, out);
86132 *out = std::sqrt (*out);
87133}
134+ <<<<<<< HEAD
135+ =======
136+ #endif // __SSE__ || __ARM_NEON && __aarch64__ || __riscv_vector
137+ >>>>>>> 05b06b8 (feat: add RVV non-batch distance operators)
88138
89139} // namespace ailego
90- } // namespace zvec
140+ } // namespace zvec
0 commit comments