Updated SumCenters and SetNewCenters to use float [skip ci]

This commit is contained in:
Andrew Kane
2024-04-24 16:08:19 -07:00
parent cf46c3f651
commit 1129d23df9

View File

@@ -255,30 +255,30 @@ ShowMemoryUsage(MemoryContext context, Size estimatedSize)
#endif #endif
static void static void
VectorSumCenter(const void *v, Vector * aggCenter) VectorSumCenter(const void *v, float *x)
{ {
Vector *vec = (Vector *) v; Vector *vec = (Vector *) v;
for (int k = 0; k < aggCenter->dim; k++) for (int k = 0; k < vec->dim; k++)
aggCenter->x[k] += vec->x[k]; x[k] += vec->x[k];
} }
static void static void
HalfvecSumCenter(const void *v, Vector * aggCenter) HalfvecSumCenter(const void *v, float *x)
{ {
HalfVector *vec = (HalfVector *) v; HalfVector *vec = (HalfVector *) v;
for (int k = 0; k < aggCenter->dim; k++) for (int k = 0; k < vec->dim; k++)
aggCenter->x[k] += HalfToFloat4(vec->x[k]); x[k] += HalfToFloat4(vec->x[k]);
} }
static void static void
BitSumCenter(const void *v, Vector * aggCenter) BitSumCenter(const void *v, float *x)
{ {
VarBit *vec = (VarBit *) v; VarBit *vec = (VarBit *) v;
for (int k = 0; k < aggCenter->dim; k++) for (int k = 0; k < VARBITLEN(v); k++)
aggCenter->x[k] += (float) (((VARBITS(vec)[k / 8]) >> (7 - (k % 8))) & 0x01); x[k] += (float) (((VARBITS(vec)[k / 8]) >> (7 - (k % 8))) & 0x01);
} }
/* /*
@@ -287,7 +287,7 @@ BitSumCenter(const void *v, Vector * aggCenter)
static void static void
SumCenters(VectorArray samples, VectorArray aggCenters, int *closestCenters, IvfflatType type) SumCenters(VectorArray samples, VectorArray aggCenters, int *closestCenters, IvfflatType type)
{ {
void (*sumCenter) (const void *v, Vector * aggCenter); void (*sumCenter) (const void *v, float *x);
if (type == IVFFLAT_TYPE_VECTOR) if (type == IVFFLAT_TYPE_VECTOR)
sumCenter = VectorSumCenter; sumCenter = VectorSumCenter;
@@ -302,21 +302,21 @@ SumCenters(VectorArray samples, VectorArray aggCenters, int *closestCenters, Ivf
{ {
Vector *aggCenter = (Vector *) VectorArrayGet(aggCenters, closestCenters[j]); Vector *aggCenter = (Vector *) VectorArrayGet(aggCenters, closestCenters[j]);
sumCenter(VectorArrayGet(samples, j), aggCenter); sumCenter(VectorArrayGet(samples, j), aggCenter->x);
} }
} }
static void static void
HalfvecSetNewCenter(const void *v, Vector * aggCenter) HalfvecSetNewCenter(const void *v, float *x)
{ {
HalfVector *newCenter = (HalfVector *) v; HalfVector *newCenter = (HalfVector *) v;
for (int k = 0; k < aggCenter->dim; k++) for (int k = 0; k < newCenter->dim; k++)
newCenter->x[k] = Float4ToHalfUnchecked(aggCenter->x[k]); newCenter->x[k] = Float4ToHalfUnchecked(x[k]);
} }
static void static void
BitSetNewCenter(const void *v, Vector * aggCenter) BitSetNewCenter(const void *v, float *x)
{ {
VarBit *newCenter = (VarBit *) v; VarBit *newCenter = (VarBit *) v;
unsigned char *nx = VARBITS(newCenter); unsigned char *nx = VARBITS(newCenter);
@@ -324,8 +324,8 @@ BitSetNewCenter(const void *v, Vector * aggCenter)
for (uint32 k = 0; k < VARBITBYTES(newCenter); k++) for (uint32 k = 0; k < VARBITBYTES(newCenter); k++)
nx[k] = 0; nx[k] = 0;
for (int k = 0; k < aggCenter->dim; k++) for (int k = 0; k < VARBITLEN(newCenter); k++)
nx[k / 8] |= (aggCenter->x[k] > 0.5) << (7 - (k % 8)); nx[k / 8] |= (x[k] > 0.5) << (7 - (k % 8));
} }
/* /*
@@ -334,7 +334,7 @@ BitSetNewCenter(const void *v, Vector * aggCenter)
static void static void
SetNewCenters(VectorArray aggCenters, VectorArray newCenters, IvfflatType type) SetNewCenters(VectorArray aggCenters, VectorArray newCenters, IvfflatType type)
{ {
void (*setNewCenter) (const void *v, Vector * aggCenter); void (*setNewCenter) (const void *v, float *x);
if (type == IVFFLAT_TYPE_HALFVEC) if (type == IVFFLAT_TYPE_HALFVEC)
setNewCenter = HalfvecSetNewCenter; setNewCenter = HalfvecSetNewCenter;
@@ -347,7 +347,7 @@ SetNewCenters(VectorArray aggCenters, VectorArray newCenters, IvfflatType type)
{ {
Vector *aggCenter = (Vector *) VectorArrayGet(aggCenters, j); Vector *aggCenter = (Vector *) VectorArrayGet(aggCenters, j);
setNewCenter(VectorArrayGet(newCenters, j), aggCenter); setNewCenter(VectorArrayGet(newCenters, j), aggCenter->x);
} }
} }