mirror of
https://gitee.com/milvus-io/milvus.git
synced 2026-02-02 01:06:41 +08:00
accelerate elkan_kmeans (#4937)
Signed-off-by: cmli <chengming.li@zilliz.com>
This commit is contained in:
parent
446af1c46a
commit
5d1df500f6
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user