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