From ca70a8f6851cb41e580c81ef222c8afd25f58324 Mon Sep 17 00:00:00 2001 From: Thomas <purcell@fhi-berlin.mpg.de> Date: Sun, 29 Nov 2020 09:36:04 +0100 Subject: [PATCH] revert changes with dgemv as it was slower --- .../feature_space/FeatureSpace.cpp | 13 ++--- src/utils/compare_features.cpp | 54 +++++++------------ 2 files changed, 22 insertions(+), 45 deletions(-) diff --git a/src/feature_creation/feature_space/FeatureSpace.cpp b/src/feature_creation/feature_space/FeatureSpace.cpp index 443a6929..90456540 100644 --- a/src/feature_creation/feature_space/FeatureSpace.cpp +++ b/src/feature_creation/feature_space/FeatureSpace.cpp @@ -568,10 +568,8 @@ void FeatureSpace::sis(std::vector<double>& prop) if(node_value_arrs::N_SELECTED > _n_sis_select) _project(prop.data(), scores_sel_all.data(), _phi_selected, _task_sizes, prop.size() / _n_samp); - for(auto& feat : _phi_selected) - feat->set_standardized_value(); - start = omp_get_wtime(); + std::cout << "Number of features: " << _start_gen[0] << '\t' << _start_gen[1] << '\t' << _start_gen[2] << '\t' << _n_feat << std::endl; while((cur_feat_local != _n_sis_select) && (ii < _scores.size())) { if(_is_valid(_phi[inds[ii]]->value_ptr(), _n_samp, _cross_cor_max, scores_sel_all, _scores[inds[ii]], cur_feat + cur_feat_local, 0)) @@ -581,7 +579,7 @@ void FeatureSpace::sis(std::vector<double>& prop) phi_sel.push_back(_phi[inds[ii]]); phi_sel.back()->set_selected(true); phi_sel.back()->set_d_mat_ind(cur_feat + cur_feat_local); - phi_sel.back()->set_standardized_value(); + phi_sel.back()->set_value(); ++cur_feat_local; } @@ -722,8 +720,6 @@ void FeatureSpace::sis(std::vector<double>& prop) _phi_selected[inds[ii] + node_value_arrs::N_SELECTED - _n_sis_select]->set_value(); ++cur_feat; } - for(int ff = 0; ff < node_value_arrs::N_SELECTED - _n_sis_select; ++ff) - _phi_selected[ff]->set_value(); } else { @@ -739,14 +735,11 @@ void FeatureSpace::sis(std::vector<double>& prop) _phi_selected.push_back(phi_sel[ind]); _phi_selected.back()->set_selected(true); _phi_selected.back()->set_d_mat_ind(cur_feat); - _phi_selected.back()->set_standardized_value(); + _phi_selected.back()->set_value(); ++cur_feat; ++cur_feat_local; } - - for(auto& feat : _phi_selected) - feat->set_value(); } if(cur_feat != node_value_arrs::N_SELECTED) diff --git a/src/utils/compare_features.cpp b/src/utils/compare_features.cpp index 8471bf02..0f2cce14 100644 --- a/src/utils/compare_features.cpp +++ b/src/utils/compare_features.cpp @@ -1,29 +1,17 @@ #include <utils/compare_features.hpp> std::vector<double> comp_feats::CORR_CHECK; - bool comp_feats::valid_feature_against_selected_max_corr_1(double* val_ptr, int n_samp, double cross_cor_max, std::vector<double>& scores_sel, double cur_score, int end_sel, int start_sel) { double base_val = util_funcs::r(val_ptr, val_ptr, n_samp); - if(std::any_of(scores_sel.begin() + start_sel, scores_sel.begin() + end_sel, [cur_score](double score){return std::abs(score - cur_score) < 1e-5;})) + for(int dd = start_sel; dd < end_sel; ++dd) { - double alpha = 1.0 / util_funcs::stand_dev(val_ptr, n_samp); - CORR_CHECK.resize(end_sel - start_sel); - dgemv_( - 'T', - n_samp, - end_sel - start_sel, - alpha, - node_value_arrs::get_d_matrix_ptr(start_sel), - n_samp, - val_ptr, - 1, - 0.0, - comp_feats::CORR_CHECK.data(), - 1 - ); - return (base_val - std::abs(comp_feats::CORR_CHECK[idamax_(end_sel - start_sel, comp_feats::CORR_CHECK.data(), 1) - 1]) > 1e-9); + if(abs(cur_score - scores_sel[dd]) > 1e-5) + continue; + + if((base_val - std::abs(util_funcs::r(node_value_arrs::get_d_matrix_ptr(dd), val_ptr, n_samp))) < 1e-9) + return false; } return true; } @@ -43,26 +31,22 @@ bool comp_feats::valid_feature_against_selected_max_corr_1_feat_list(double* val return true; } + bool comp_feats::valid_feature_against_selected(double* val_ptr, int n_samp, double cross_cor_max, std::vector<double>& scores_sel, double cur_score, int end_sel, int start_sel) { double base_val = util_funcs::r(val_ptr, val_ptr, n_samp); - double alpha = 1.0 / util_funcs::stand_dev(val_ptr, n_samp); - - CORR_CHECK.resize(end_sel - start_sel); - dgemv_( - 'T', - n_samp, - end_sel - start_sel, - alpha, - node_value_arrs::get_d_matrix_ptr(start_sel), - n_samp, - val_ptr, - 1, - 0.0, - comp_feats::CORR_CHECK.data(), - 1 - ); - return (base_val - std::abs(comp_feats::CORR_CHECK[idamax_(end_sel - start_sel, comp_feats::CORR_CHECK.data(), 1)]) < (1.0 - cross_cor_max + 1e-10)); + volatile bool is_valid = true; + + #pragma omp parallel for schedule(dynamic) + for(int dd = start_sel; dd < end_sel; ++dd) + { + if(!is_valid) + continue; + + if((base_val - std::abs(util_funcs::r(node_value_arrs::get_d_matrix_ptr(dd), val_ptr, n_samp))) < (1.0 - cross_cor_max + 1e-10)) + is_valid = false; + } + return is_valid; } bool comp_feats::valid_feature_against_selected_feat_list(double* val_ptr, int n_samp, double cross_cor_max, std::vector<node_ptr>& selected, std::vector<double>& scores_sel, double cur_score) -- GitLab