57template<
typename Task_,
class Run_>
58void parallelize(
const int num_workers,
const Task_ num_tasks, Run_ run_task_range) {
59#ifndef MNNCORRECT_CUSTOM_PARALLEL
63 MNNCORRECT_CUSTOM_PARALLEL(num_workers, num_tasks, run_task_range);
71template<
typename Index_>
87template<
typename Index_,
typename Distance_>
88using NeighborSet = std::vector<std::vector<std::pair<Index_, Distance_> > >;
90template<
typename Index_,
typename Float_>
94 std::unique_ptr<knncolle::Prebuilt<Index_, Float_, Float_> > original_index;
98 struct CorrectedBatch {
99 CorrectedBatch() =
default;
101 std::unique_ptr<knncolle::Prebuilt<Index_, Float_, Float_> > index;
102 std::vector<Index_> ids;
104 std::vector<CorrectedBatch> corrected;
107template<
typename Input_>
108using I = std::remove_cv_t<std::remove_reference_t<Input_> >;
111template<
typename Index_,
typename Float_,
class Matrix_>
112std::unique_ptr<knncolle::Prebuilt<Index_, Float_, Float_> > subset_and_index(
113 const std::size_t num_dim,
114 const std::vector<Index_>& subset,
115 const Float_*
const data,
119 const auto num_subset = subset.size();
120 for (I<
decltype(num_subset)> f = 0; f < num_subset; ++f) {
121 const auto curdata = data + sanisizer::product_unsafe<std::size_t>(subset[f], num_dim);
122 std::copy_n(curdata, num_dim, buffer + sanisizer::product_unsafe<std::size_t>(f, num_dim));