- added some performance tests
authorAnatoly <Titov_AI@pnpi.nrcki.ru>
Fri, 22 Jan 2021 11:52:51 +0000 (14:52 +0300)
committerAnatoly <Titov_AI@pnpi.nrcki.ru>
Fri, 22 Jan 2021 11:52:51 +0000 (14:52 +0300)
- a potential change is needed for ::par instead of ::seq

src/domains.cpp
src/domaintests.cpp

index 4a7dbd1e0e2a66c947951fc81210302d87a86087..6015e23b39bd61567d4acd14a98c467e9ddb892e 100644 (file)
@@ -223,6 +223,7 @@ Domains::analyzeFrame(int frnr, const t_trxframe &fr, t_pbc *pbc, TrajectoryAnal
     }
 
     // создание копий фрейма для каждой основной последовательности
+    // формально нужно ::par
     std::fill(std::execution::seq, tsTemp.begin(), tsTemp.end(), trajectory);
 
     // фитирование каждой копии
index ce634c28133b3adf47fa45dbb11a49c4cce17dfb..e06b5b2a9617a4ab6b5a885a1e95a3d86243a7c3 100644 (file)
@@ -4,6 +4,7 @@
 #include "gtest/gtest.h"
 
 #include <iostream>
+#include <execution>
 
 // https://habr.com/ru/post/119090/
 
@@ -447,6 +448,48 @@ TEST( domainTests, domainTest_getDomains)
     // ещё подумать что это такое и как это выделяется
 }
 
+void preLoad(std::vector< gmx::RVec > &trj)
+{
+    size_t lmt = 1'000'000;
+    trj.resize(0);
+    trj.resize(lmt);
+    for (size_t i {0}; i < lmt; ++i) {
+        trj[i] = gmx::RVec(1.1 * i, 2.2 * i, 3.3 * i);
+    }
+}
+
+TEST( domainTests, old_way)
+{
+    std::vector< gmx::RVec > trajectory;
+    preLoad(trajectory);
+    size_t bn = 1'000;
+    std::vector< std::vector< gmx::RVec > > trjTemp;
+    trjTemp.resize(0);
+    trjTemp.resize(bn, trajectory);
+}
+
+TEST( domainTests, fill)
+{
+    std::vector< gmx::RVec > trajectory;
+    preLoad(trajectory);
+    size_t bn = 1'000;
+    std::vector< std::vector< gmx::RVec > > trjTemp;
+    trjTemp.resize(0);
+    trjTemp.resize(bn);
+    std::fill(trjTemp.begin(), trjTemp.end(), trajectory);
+}
+
+TEST( domainTests, parallel_fill)
+{
+    std::vector< gmx::RVec > trajectory;
+    preLoad(trajectory);
+    size_t bn = 1'000;
+    std::vector< std::vector< gmx::RVec > > trjTemp;
+    trjTemp.resize(0);
+    trjTemp.resize(bn);
+    std::fill(std::execution::seq, trjTemp.begin(), trjTemp.end(), trajectory);
+}
+
 TEST( domainTests, domainTest_print)
 {
     // данную функцию тестировать смысла нет, слишком простой функционал