From 6c701a465a11ab3febaf59c76c71e30fbc281bd7 Mon Sep 17 00:00:00 2001
From: Thomas <purcell@fhi-berlin.mpg.de>
Date: Fri, 25 Jun 2021 09:29:58 +0200
Subject: [PATCH] Remove LossFunction firstprivate

This seems to not be feasable with OpenMP
---
 src/feature_creation/feature_space/FeatureSpace.cpp | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/feature_creation/feature_space/FeatureSpace.cpp b/src/feature_creation/feature_space/FeatureSpace.cpp
index b9c77170..c89598ee 100644
--- a/src/feature_creation/feature_space/FeatureSpace.cpp
+++ b/src/feature_creation/feature_space/FeatureSpace.cpp
@@ -983,9 +983,9 @@ void FeatureSpace::project_generated(std::shared_ptr<LossFunction> loss, std::ve
     int worst_score_ind = std::max_element(scores_sel.begin(), scores_sel.end()) - scores_sel.begin();
     double worst_score = scores_sel[worst_score_ind];
 
-    #pragma omp parallel firstprivate(worst_score, worst_score_ind, loss, scores_sel_all)
+    #pragma omp parallel firstprivate(worst_score, worst_score_ind, scores_sel_all)
     {
-        loss = loss_function_util::copy(loss);
+        std::shared_ptr<LossFunction> loss_copy = loss_function_util::copy(loss);
         std::vector<node_ptr> phi_sel_private(phi_sel);
         std::vector<double> scores_sel_private(scores_sel);
         int index_base = _phi.size() + _n_sis_select * (omp_get_thread_num() + _mpi_comm->size());
@@ -995,7 +995,7 @@ void FeatureSpace::project_generated(std::shared_ptr<LossFunction> loss, std::ve
         std::shared_ptr<NLOptimizer> reparam_optimizer;
         if(_reparam_residual)
         {
-            std::vector<double> prop_vec(loss->prop_project());
+            std::vector<double> prop_vec(loss_copy->prop_project());
             reparam_optimizer = nlopt_wrapper::get_optimizer(_project_type, _task_sizes, prop_vec, _max_phi, _max_param_depth);
         }
         else
@@ -1037,7 +1037,7 @@ void FeatureSpace::project_generated(std::shared_ptr<LossFunction> loss, std::ve
 
             node_value_arrs::clear_temp_reg_thread();
             std::vector<double> scores(generated_phi.size());
-            project_funcs::project_loss_no_omp(loss, generated_phi, scores.data());
+            project_funcs::project_loss_no_omp(loss_copy, generated_phi, scores.data());
 
             std::vector<int> inds = util_funcs::argsort<double>(scores);
 
-- 
GitLab