From 9c0dead824a5ffe87a042325ff5d776a2427ca54 Mon Sep 17 00:00:00 2001 From: Thomas <purcell@fhi-berlin.mpg.de> Date: Mon, 19 Apr 2021 09:03:49 +0200 Subject: [PATCH] Fix Bug in MPI ops When passing into it have the right sized vector --- src/feature_creation/feature_space/FeatureSpace.cpp | 4 +++- src/mpi_interface/MPI_ops.cpp | 10 ++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/feature_creation/feature_space/FeatureSpace.cpp b/src/feature_creation/feature_space/FeatureSpace.cpp index 938abef6..6a4900af 100644 --- a/src/feature_creation/feature_space/FeatureSpace.cpp +++ b/src/feature_creation/feature_space/FeatureSpace.cpp @@ -923,7 +923,9 @@ void FeatureSpace::sis(const std::vector<double>& prop) // Collect the best features from all ranks std::vector<node_sc_pair> local_sel(_n_sis_select, std::make_tuple<node_ptr, double>(nullptr, std::numeric_limits<double>::max())); for(int ff = 0; ff < phi_sel.size(); ++ff) - local_sel.push_back(mpi_reduce_op::make_node_sc_pair(phi_sel[ff], scores_sel[ff])); + { + local_sel[ff] = mpi_reduce_op::make_node_sc_pair(phi_sel[ff], scores_sel[ff]); + } std::vector<node_sc_pair> selected(_n_sis_select); mpi::all_reduce( diff --git a/src/mpi_interface/MPI_ops.cpp b/src/mpi_interface/MPI_ops.cpp index d0426008..ff2f11f1 100644 --- a/src/mpi_interface/MPI_ops.cpp +++ b/src/mpi_interface/MPI_ops.cpp @@ -28,12 +28,14 @@ void mpi_reduce_op::set_op(std::string project_type, double cross_cor_max, int n std::vector<node_sc_pair> mpi_reduce_op::select_top_feats(std::vector<node_sc_pair> in_vec_1, std::vector<node_sc_pair> in_vec_2) { - std::vector<node_sc_pair> out_vec; - out_vec.reserve(N_SIS_SELECT); - in_vec_2.insert(in_vec_2.end(), in_vec_1.begin(), in_vec_1.end()); + // Set up an output vector + std::vector<node_sc_pair> out_vec(N_SIS_SELECT); + // Merge input vectors and sort + in_vec_2.insert(in_vec_2.end(), in_vec_1.begin(), in_vec_1.end()); std::sort(in_vec_2.begin(), in_vec_2.end(), my_sorter); + // Populate the output vector int ff = 0; int out_ind = 0; while((out_ind < N_SIS_SELECT) && (ff < in_vec_2.size())) @@ -41,7 +43,7 @@ std::vector<node_sc_pair> mpi_reduce_op::select_top_feats(std::vector<node_sc_pa const node_ptr cur_node = std::get<0>(in_vec_2[ff]); if(cur_node && IS_VALID(cur_node->value_ptr(), cur_node->n_samp(), CROSS_COR_MAX, out_vec, std::get<1>(in_vec_2[ff]))) { - out_vec.push_back(in_vec_2[ff]); + out_vec[out_ind] = in_vec_2[ff]; ++out_ind; } ++ff; -- GitLab