- potentially increased speed of parallel fitting
authorAnatoly <Titov_AI@pnpi.nrcki.ru>
Tue, 26 Jan 2021 09:39:20 +0000 (12:39 +0300)
committerAnatoly <Titov_AI@pnpi.nrcki.ru>
Tue, 26 Jan 2021 09:39:20 +0000 (12:39 +0300)
src/domains.cpp

index 6015e23b39bd61567d4acd14a98c467e9ddb892e..48f1e8a8b107d934d1b36cefeada02fe53a55408 100644 (file)
@@ -96,7 +96,7 @@ class Domains : public TrajectoryAnalysisModule
         domainType                                                  testSubject;
         std::vector< size_t >                                       index;
         std::vector< RVec >                                         trajectory;
-        std::vector< RVec >                                         reference;
+        std::vector< std::vector< RVec > >                          reference;
         std::vector< std::vector< RVec > >                          tsTemp;
         Selection                                                   selec;
         std::vector< std::vector< std::pair< size_t, size_t > > >   fitPairs;
@@ -181,10 +181,11 @@ Domains::initAnalysis(const TrajectoryAnalysisSettings &settings,
 
     // считывание референсной структуры
     reference.resize(0);
-
+    reference.resize(1);
+    reference.front().resize(0);
     if (top.hasFullTopology()) {
         for (const auto &i : index) {
-            reference.push_back(top.x().at(i));
+            reference.front().push_back(top.x().at(i));
         }
     }
 
@@ -206,12 +207,14 @@ Domains::initAnalysis(const TrajectoryAnalysisSettings &settings,
     trajectory.resize(index.size());
 
     // задание необходимых параметров для вычисления доменов
-    testSubject.setDefaults(index, reference, window, domain_min_size, DomainSearchingAlgorythm, twStep, bone, epsi, delta, fnNdx_);
+    testSubject.setDefaults(index, reference.front(), window, domain_min_size, DomainSearchingAlgorythm, twStep, bone, epsi, delta, fnNdx_);
     tsTemp.resize(0);
     tsTemp.resize(bone);
     for (auto &i : tsTemp) {
         i.resize(index.size());
     }
+    reference.resize(bone);
+    std::fill(reference.begin() + 1, reference.end(), reference.front());
 }
 
 void
@@ -227,9 +230,9 @@ Domains::analyzeFrame(int frnr, const t_trxframe &fr, t_pbc *pbc, TrajectoryAnal
     std::fill(std::execution::seq, tsTemp.begin(), tsTemp.end(), trajectory);
 
     // фитирование каждой копии
-    #pragma omp parallel for ordered schedule(dynamic) firstprivate(reference)
+    #pragma omp parallel for ordered schedule(dynamic)
     for (size_t i = 0; i < bone; ++i) {
-        MyFitNew(reference, tsTemp[i], fitPairs[i], 0.000'001);
+        MyFitNew(reference[i], tsTemp[i], fitPairs[i], 0.000'001);
     }
     #pragma omp barrier