From 482cacd420ada7c0bd0fe46a500b62cb76439955 Mon Sep 17 00:00:00 2001
From: Pierre-Emmanuel Viel
Date: Wed, 1 Jul 2020 18:27:07 +0200
Subject: [PATCH] Mix of 32 and 64bits vector types prevents vectorisation for
distance computation. Argument "a" is of type ElementType* that is either
int* or float*, while b was double*. Mixing types prevents the possibility to
use SSE or AVX instructions. On implementation without SIMD instructions,
this doesn't show any impact on performance.
---
.../include/opencv2/flann/kmeans_index.h | 22 +++++++++----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/modules/flann/include/opencv2/flann/kmeans_index.h b/modules/flann/include/opencv2/flann/kmeans_index.h
index f743d75224..b556b4ad8a 100644
--- a/modules/flann/include/opencv2/flann/kmeans_index.h
+++ b/modules/flann/include/opencv2/flann/kmeans_index.h
@@ -726,15 +726,6 @@ private:
}
- cv::AutoBuffer dcenters_buf(branching*veclen_);
- Matrix dcenters(dcenters_buf.data(), branching, veclen_);
- for (int i=0; i radiuses(branching);
cv::AutoBuffer count_buf(branching);
int* count = count_buf.data();
@@ -748,10 +739,10 @@ private:
int* belongs_to = belongs_to_buf.data();
for (int i=0; inew_sq_dist) {
belongs_to[i] = j;
sq_dist = new_sq_dist;
@@ -763,6 +754,15 @@ private:
count[belongs_to[i]]++;
}
+ cv::AutoBuffer dcenters_buf(branching*veclen_);
+ Matrix dcenters(dcenters_buf.data(), branching, veclen_);
+ for (int i=0; i