From 0c9070ba82fb4e6b6997cdd76b88442175a2f8ab Mon Sep 17 00:00:00 2001 From: Luca Giacchino Date: Tue, 12 Aug 2025 19:52:49 -0700 Subject: [PATCH] Add autovectorized implementation of binary quantize --- src/vector.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/vector.c b/src/vector.c index 7da2bf3..4c1f695 100644 --- a/src/vector.c +++ b/src/vector.c @@ -946,8 +946,18 @@ binary_quantize(PG_FUNCTION_ARGS) float *ax = a->x; VarBit *result = InitBitVector(a->dim); unsigned char *rx = VARBITS(result); + int i; + int count = (a->dim / 8) * 8; + unsigned char result_byte; - for (int i = 0; i < a->dim; i++) + for (i = 0; i < count; i += 8) + { + result_byte = 0; + for (int j = 0; j < 8; j++) + result_byte |= (ax[i + j] > 0) << (7 - j); + rx[i / 8] = result_byte; + } + for (; i < a->dim; i++) rx[i / 8] |= (ax[i] > 0) << (7 - (i % 8)); PG_RETURN_VARBIT_P(result);