Skip to content

Commit 5b11105

Browse files
committed
Implement fvec_inner_product_sve for FP32 inner product using SVE
Signed-off-by: Thatikonda.Varunreddy <Thatikonda.Varunreddy@fujitsu.com>
1 parent 56bd304 commit 5b11105

3 files changed

Lines changed: 26 additions & 1 deletion

File tree

src/simd/distances_sve.cc

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,28 @@ fvec_L2sqr_sve(const float* x, const float* y, size_t d) {
4040
return svaddv_f32(svptrue_b32(), sum);
4141
}
4242

43+
float
44+
fvec_inner_product_sve(const float* x, const float* y, size_t d) {
45+
svfloat32_t sum = svdup_f32(0.0f);
46+
size_t i = 0;
47+
48+
svbool_t pg = svptrue_b32();
49+
50+
while (i < d) {
51+
if (d - i < svcntw())
52+
pg = svwhilelt_b32(i, d);
53+
54+
svfloat32_t a = svld1_f32(pg, x + i);
55+
svfloat32_t b = svld1_f32(pg, y + i);
56+
sum = svmla_f32_m(pg, sum, a, b);
57+
i += svcntw();
58+
}
59+
60+
float result = svaddv_f32(svptrue_b32(), sum);
61+
62+
return result;
63+
}
64+
4365
float
4466
fp16_vec_L2sqr_sve(const knowhere::fp16* x, const knowhere::fp16* y, size_t d) {
4567
svfloat32_t sum1 = svdup_f32(0.0f);

src/simd/distances_sve.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ namespace faiss {
2222
float
2323
fvec_L2sqr_sve(const float* x, const float* y, size_t d);
2424

25+
float
26+
fvec_inner_product_sve(const float* x, const float* y, size_t d);
27+
2528
float
2629
fp16_vec_L2sqr_sve(const knowhere::fp16* x, const knowhere::fp16* y, size_t d);
2730

src/simd/hook.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,7 @@ fvec_hook(std::string& simd_type) {
445445
fvec_madd = fvec_madd_sve;
446446
fvec_madd_and_argmin = fvec_madd_and_argmin_sve;
447447

448-
fvec_inner_product = fvec_inner_product_neon;
448+
fvec_inner_product = fvec_inner_product_sve;
449449
fvec_L2sqr_ny = fvec_L2sqr_ny_sve;
450450
fvec_inner_products_ny = fvec_inner_products_ny_neon;
451451

0 commit comments

Comments
 (0)