From b80859211c61d87a4c9bd2d37655ffd33f7b13ab Mon Sep 17 00:00:00 2001 From: Frank Dellaert Date: Sat, 26 Oct 2013 20:14:01 +0000 Subject: [PATCH] Timing DSF variants: functional DSF is faster than in-place, but both way slower than DSFMap, which in turn is slower than DSFBase --- .cproject | 581 ++++++++++++------ gtsam_unstable/base/CMakeLists.txt | 5 + gtsam_unstable/base/tests/timeDSFvariants.cpp | 120 ++++ .../base/tests/timeDSFvariants.xlsx | Bin 0 -> 49459 bytes 4 files changed, 525 insertions(+), 181 deletions(-) create mode 100644 gtsam_unstable/base/tests/timeDSFvariants.cpp create mode 100644 gtsam_unstable/base/tests/timeDSFvariants.xlsx diff --git a/.cproject b/.cproject index 8d2bd0378..36f003997 100644 --- a/.cproject +++ b/.cproject @@ -24,22 +24,30 @@ + + + @@ -71,20 +79,31 @@ + + - + @@ -116,12 +135,18 @@ + + @@ -131,10 +156,14 @@ + + @@ -160,6 +189,8 @@ + + @@ -245,6 +276,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -288,9 +448,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - @@ -317,14 +518,6 @@ true true - - make - -j2 - testGaussianFactor.run - true - true - true - make -j2 @@ -351,6 +544,7 @@ make + tests/testBayesTree.run true false @@ -358,6 +552,7 @@ make + testBinaryBayesNet.run true false @@ -405,6 +600,7 @@ make + testSymbolicBayesNet.run true false @@ -412,6 +608,7 @@ make + tests/testSymbolicFactor.run true false @@ -419,6 +616,7 @@ make + testSymbolicFactorGraph.run true false @@ -434,11 +632,20 @@ make + tests/testBayesTree true false true + + make + -j2 + testGaussianFactor.run + true + true + true + make -j5 @@ -495,6 +702,14 @@ true true + + make + -j5 + timeDSFvariants.run + true + true + true + make -j2 @@ -535,22 +750,6 @@ false true - - make - -j2 - all - true - true - true - - - make - -j2 - clean - true - true - true - make -j2 @@ -567,6 +766,22 @@ true true + + make + -j2 + all + true + true + true + + + make + -j2 + clean + true + true + true + make -j2 @@ -591,42 +806,26 @@ true true - + make - -j5 - testValues.run + -j2 + all true true true - + make - -j5 - testOrdering.run + -j2 + check true true true - + make - -j5 - testKey.run - true - true - true - - - make - -j5 - testLinearContainerFactor.run - true - true - true - - - make - -j6 -j8 - testWhiteNoiseFactor.run + -j2 + clean true true true @@ -679,26 +878,42 @@ true true - + make - -j2 - all + -j5 + testValues.run true true true - + make - -j2 - check + -j5 + testOrdering.run true true true - + make - -j2 - clean + -j5 + testKey.run + true + true + true + + + make + -j5 + testLinearContainerFactor.run + true + true + true + + + make + -j6 -j8 + testWhiteNoiseFactor.run true true true @@ -1097,6 +1312,7 @@ make + testGraph.run true false @@ -1104,6 +1320,7 @@ make + testJunctionTree.run true false @@ -1111,6 +1328,7 @@ make + testSymbolicBayesNetB.run true false @@ -1278,6 +1496,7 @@ make + testErrors.run true false @@ -1323,14 +1542,6 @@ true true - - make - -j2 - testGaussianFactor.run - true - true - true - make -j2 @@ -1411,6 +1622,14 @@ true true + + make + -j2 + testGaussianFactor.run + true + true + true + make -j2 @@ -1717,7 +1936,6 @@ make - testSimulated2DOriented.run true false @@ -1757,7 +1975,6 @@ make - testSimulated2D.run true false @@ -1765,7 +1982,6 @@ make - testSimulated3D.run true false @@ -2053,7 +2269,6 @@ make - tests/testGaussianISAM2 true false @@ -2075,102 +2290,6 @@ true true - - make - -j2 - testRot3.run - true - true - true - - - make - -j2 - testRot2.run - true - true - true - - - make - -j2 - testPose3.run - true - true - true - - - make - -j2 - timeRot3.run - true - true - true - - - make - -j2 - testPose2.run - true - true - true - - - make - -j2 - testCal3_S2.run - true - true - true - - - make - -j2 - testSimpleCamera.run - true - true - true - - - make - -j2 - testHomography2.run - true - true - true - - - make - -j2 - testCalibratedCamera.run - true - true - true - - - make - -j2 - check - true - true - true - - - make - -j2 - clean - true - true - true - - - make - -j2 - testPoint2.run - true - true - true - make -j3 @@ -2372,6 +2491,7 @@ cpack + -G DEB true false @@ -2379,6 +2499,7 @@ cpack + -G RPM true false @@ -2386,6 +2507,7 @@ cpack + -G TGZ true false @@ -2393,6 +2515,7 @@ cpack + --config CPackSourceConfig.cmake true false @@ -2558,34 +2681,98 @@ true true - + make - -j5 - testSpirit.run + -j2 + testRot3.run true true true - + make - -j5 - testWrap.run + -j2 + testRot2.run true true true - + make - -j5 - check.wrap + -j2 + testPose3.run true true true - + make - -j5 - wrap + -j2 + timeRot3.run + true + true + true + + + make + -j2 + testPose2.run + true + true + true + + + make + -j2 + testCal3_S2.run + true + true + true + + + make + -j2 + testSimpleCamera.run + true + true + true + + + make + -j2 + testHomography2.run + true + true + true + + + make + -j2 + testCalibratedCamera.run + true + true + true + + + make + -j2 + check + true + true + true + + + make + -j2 + clean + true + true + true + + + make + -j2 + testPoint2.run true true true @@ -2629,6 +2816,38 @@ false true + + make + -j5 + testSpirit.run + true + true + true + + + make + -j5 + testWrap.run + true + true + true + + + make + -j5 + check.wrap + true + true + true + + + make + -j5 + wrap + true + true + true + diff --git a/gtsam_unstable/base/CMakeLists.txt b/gtsam_unstable/base/CMakeLists.txt index 2436c7c00..40337f6a6 100644 --- a/gtsam_unstable/base/CMakeLists.txt +++ b/gtsam_unstable/base/CMakeLists.txt @@ -12,3 +12,8 @@ set (base_excluded_tests "") # Add all tests gtsam_add_subdir_tests(base_unstable "${base_full_libs}" "${base_full_libs}" "${base_excluded_tests}") add_dependencies(check.unstable check.base_unstable) + +# Build timing scripts +if (GTSAM_BUILD_TIMING) + gtsam_add_subdir_timing(base_unstable "${base_full_libs}" "${base_full_libs}" "${base_excluded_files}") +endif(GTSAM_BUILD_TIMING) diff --git a/gtsam_unstable/base/tests/timeDSFvariants.cpp b/gtsam_unstable/base/tests/timeDSFvariants.cpp new file mode 100644 index 000000000..c2b9ebe2e --- /dev/null +++ b/gtsam_unstable/base/tests/timeDSFvariants.cpp @@ -0,0 +1,120 @@ +/* ---------------------------------------------------------------------------- + + * GTSAM Copyright 2010, Georgia Tech Research Corporation, + * Atlanta, Georgia 30332-0415 + * All Rights Reserved + * Authors: Frank Dellaert, et al. (see THANKS for the full author list) + + * See LICENSE for the license information + + * -------------------------------------------------------------------------- */ + +/** + * @file timeDSFvariants.cpp + * @brief Time different implementations of DSF + * @author Frank Dellaert + * @date Oct 26, 2013 + */ + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +using namespace std; +using namespace gtsam; +using namespace boost::assign; +using boost::timer; +using boost::format; + +int main(int argc, char* argv[]) { + + // Create CSV file for results + ofstream os("dsf-timing.csv"); + os << "images,points,matches,Base,Map,BTree" << endl; + + // loop over number of images + vector ms; + ms += 10, 20, 30, 40, 50, 100, 200, 300, 400, 500; + BOOST_FOREACH(size_t m,ms) { + // We use volatile here to make these appear to the optimizing compiler as + // if their values are only known at run-time. + volatile size_t n = 500; // number of points per image + volatile size_t N = m * n; // number of points per image + + volatile double fm = 0.1; // fraction of image pairs matched + volatile size_t np = fm * m * m / 2; // number of image pairs + volatile double fpm = 0.5; // fraction of points matched + volatile size_t nm = fpm * n * np; // number of matches + + cout << format("\nTesting with %1% images, %2% points, %3% matches\n") % m % N % nm; + cout << "Generating " << nm << " matches" << endl; + boost::variate_generator > rn( + boost::mt19937(), boost::uniform_int(0, N - 1)); + typedef pair Match; + vector matches; + matches.reserve(nm); + for (size_t k = 0; k < nm; k++) + matches.push_back(Match(rn(), rn())); + + os << format("%1%,%2%,%3%,") % m % N % nm; + + { + // DSFBase version + timer tim; + DSFBase dsf(N); // Allow for N keys + BOOST_FOREACH(const Match& m, matches) + dsf.merge(m.first, m.second); + os << tim.elapsed() << ","; + cout << format("DSFBase: %1% s") % tim.elapsed() << endl; + } + + { + // DSFMap version + timer tim; + DSFMap dsf; + BOOST_FOREACH(const Match& m, matches) + dsf.merge(m.first, m.second); + os << tim.elapsed() << ","; + cout << format("DSFMap: %1% s") % tim.elapsed() << endl; + } + + { + // DSF version, functional + timer tim; + DSF dsf; + for (size_t j = 0; j < N; j++) + dsf = dsf.makeSet(j); + BOOST_FOREACH(const Match& m, matches) + dsf = dsf.makeUnion(m.first, m.second); + os << tim.elapsed() << endl; + cout << format("DSF functional: %1% s") % tim.elapsed() << endl; + } + + if (false) { + // DSF version, in place - always slower - use functional ! + timer tim; + DSF dsf; + for (size_t j = 0; j < N; j++) + dsf.makeSetInPlace(j); + BOOST_FOREACH(const Match& m, matches) + dsf.makeUnionInPlace(m.first, m.second); + os << tim.elapsed() << ","; + cout << format("DSF in-place: %1% s") % tim.elapsed() << endl; + } + + } + + return 0; + +} diff --git a/gtsam_unstable/base/tests/timeDSFvariants.xlsx b/gtsam_unstable/base/tests/timeDSFvariants.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b9912247f4edbbddfc18c30dc5c9c5ed1f27fb8d GIT binary patch literal 49459 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 h{@na*-JhEO