accelerate elkan_kmeans (#4937)

Signed-off-by: cmli <chengming.li@zilliz.com>
This commit is contained in:
ophunter233 2021-04-14 19:25:50 +08:00 committed by GitHub
parent 446af1c46a
commit 5d1df500f6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1038,7 +1038,7 @@ void elkan_L2_sse (
const float *y_i = y + i * d;
for (size_t j = j0; j < i; j++) {
const float *y_j = y + j * d;
Y(i, j) = sqrt(fvec_L2sqr(y_i, y_j, d));
Y(i, j) = fvec_L2sqr(y_i, y_j, d);
}
}
@ -1047,18 +1047,22 @@ void elkan_L2_sse (
const float *x_i = x + i * d;
int64_t ids_i = j0;
float val_i = sqrt(fvec_L2sqr(x_i, y + j0 * d, d));
float val_i_2 = val_i * 2;
float val_i = fvec_L2sqr(x_i, y + j0 * d, d);
float val_i_time_4 = val_i * 4;
for (size_t j = j0 + 1; j < j1; j++) {
if (val_i_2 <= Y(ids_i, j)) {
if (val_i_time_4 <= Y(ids_i, j)) {
continue;
}
const float *y_j = y + j * d;
float disij = sqrt(fvec_L2sqr(x_i, y_j, d));
float disij = fvec_L2sqr(x_i, y_j, d / 2);
if (disij >= val_i) {
continue;
}
disij += fvec_L2sqr(x_i + d / 2, y_j + d / 2, d - d / 2);
if (disij < val_i) {
ids_i = j;
val_i = disij;
val_i_2 = val_i * 2;
val_i_time_4 = val_i * 4;
}
}