cpp-toolbox  0.0.1
A toolbox library for C++
Loading...
Searching...
No Matches
bfknn_parallel.hpp
Go to the documentation of this file.
1#pragma once
2
7
8namespace toolbox::pcl
9{
10
11// Generic parallel brute-force KNN implementation
12template<typename Element, typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
13class CPP_TOOLBOX_EXPORT bfknn_parallel_generic_t : public base_knn_generic_t<bfknn_parallel_generic_t<Element, Metric>, Element, Metric>
14{
15public:
18 using element_type = typename traits_type::element_type;
19 using metric_type = typename traits_type::metric_type;
20 using distance_type = typename traits_type::distance_type;
23 using value_type = typename Element::value_type;
24
27
32
33 // Set input data implementations
34 std::size_t set_input_impl(const container_type& data);
35 std::size_t set_input_impl(const container_ptr& data);
36
37 // Set metric implementations
38 void set_metric_impl(const metric_type& metric);
39 void set_metric_impl(std::shared_ptr<toolbox::metrics::IMetric<typename Element::value_type>> metric);
40
41 // KNN search implementations
42 bool kneighbors_impl(const element_type& query,
43 std::size_t num_neighbors,
44 std::vector<std::size_t>& indices,
45 std::vector<distance_type>& distances);
46
47 bool radius_neighbors_impl(const element_type& query,
48 distance_type radius,
49 std::vector<std::size_t>& indices,
50 std::vector<distance_type>& distances);
51
52 void enable_parallel(bool enable) { m_parallel_enabled = enable; }
53 [[nodiscard]] bool is_parallel_enabled() const noexcept { return m_parallel_enabled; }
54
55private:
56 container_ptr m_data;
57 metric_type m_compile_time_metric;
58 std::shared_ptr<toolbox::metrics::IMetric<typename Element::value_type>> m_runtime_metric;
59 bool m_use_runtime_metric = false;
60 bool m_parallel_enabled = true;
61 static constexpr std::size_t k_parallel_threshold = 1024;
62};
63
64// Type aliases for common use cases
65template<typename DataType>
67
68} // namespace toolbox::pcl
69
Definition metric_factory.hpp:23
Definition vector_metrics.hpp:18
KNN算法的基类(CRTP模式) / Base class for KNN algorithms (CRTP pattern)
Definition base_knn.hpp:69
std::shared_ptr< container_type > container_ptr
Definition base_knn.hpp:76
std::vector< element_type > container_type
Definition base_knn.hpp:75
Definition bfknn_parallel.hpp:14
bfknn_parallel_generic_t & operator=(bfknn_parallel_generic_t &&)=delete
typename base_type::container_ptr container_ptr
Definition bfknn_parallel.hpp:22
typename base_type::traits_type traits_type
Definition bfknn_parallel.hpp:17
typename traits_type::distance_type distance_type
Definition bfknn_parallel.hpp:20
bfknn_parallel_generic_t(const bfknn_parallel_generic_t &)=delete
void enable_parallel(bool enable)
Definition bfknn_parallel.hpp:52
typename traits_type::metric_type metric_type
Definition bfknn_parallel.hpp:19
bfknn_parallel_generic_t & operator=(const bfknn_parallel_generic_t &)=delete
typename base_type::container_type container_type
Definition bfknn_parallel.hpp:21
bool is_parallel_enabled() const noexcept
Definition bfknn_parallel.hpp:53
typename Element::value_type value_type
Definition bfknn_parallel.hpp:23
typename traits_type::element_type element_type
Definition bfknn_parallel.hpp:18
bfknn_parallel_generic_t(bfknn_parallel_generic_t &&)=delete
Definition base_correspondence_generator.hpp:18
KNN算法的特征定义 / KNN algorithm traits definition.
Definition base_knn.hpp:23