From 5d0629c91a43cf1ff40bbb08faf93e8c8ef0c78d Mon Sep 17 00:00:00 2001 From: Richard Roberts Date: Fri, 26 Jul 2013 18:00:38 +0000 Subject: [PATCH] More detailed timing in UnorderedLinear script --- examples/UnorderedLinear.cpp | 49 ++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/examples/UnorderedLinear.cpp b/examples/UnorderedLinear.cpp index 153c735ff..5ee8fb971 100644 --- a/examples/UnorderedLinear.cpp +++ b/examples/UnorderedLinear.cpp @@ -218,28 +218,35 @@ int main(int argc, char *argv[]) // Get linear graph cout << "Converting to unordered linear graph" << endl; Ordering ordering = *isamsoln.orderingArbitrary(); + Ordering orderingCOLAMD = *nlfg.orderingCOLAMD(isamsoln); GaussianFactorGraph gfg = *nlfg.linearize(isamsoln, ordering); GaussianFactorGraphUnordered gfgu = convertToUnordered(gfg, ordering); - OrderingUnordered orderingUnordered; - for(Index j = 0; j < ordering.size(); ++j) - orderingUnordered.push_back(ordering.key(j)); + //OrderingUnordered orderingUnordered; + //for(Index j = 0; j < ordering.size(); ++j) + // orderingUnordered.push_back(ordering.key(j)); // Solve linear graph cout << "Optimizing unordered graph" << endl; VectorValuesUnordered unorderedSolnFinal; { - boost::timer::cpu_timer timer; gttic_(Solve_unordered); VectorValuesUnordered unorderedSoln; for(size_t i = 0; i < 1; ++i) { - unorderedSoln = gfgu.optimize(); + gttic_(VariableIndex); + VariableIndexUnordered vi(gfgu); + gttoc_(VariableIndex); + gttic_(COLAMD); + OrderingUnordered orderingUnordered = OrderingUnordered::COLAMD(vi); + gttoc_(COLAMD); + gttic_(eliminate); + GaussianBayesTreeUnordered::shared_ptr bt = gfgu.eliminateMultifrontal(orderingUnordered); + gttoc_(eliminate); + gttic_(optimize); + unorderedSoln = bt->optimize(); + gttoc_(optimize); } gttoc_(Solve_unordered); - timer.stop(); - boost::timer::cpu_times times = timer.elapsed(); - std::cout << "Total CPU time: " << double(times.system + times.user) / 1e9 - << ", wall time: " << double(times.wall) / 1e9 << std::endl; unorderedSolnFinal = unorderedSoln; } @@ -248,26 +255,30 @@ int main(int argc, char *argv[]) VectorValues orderedSolnFinal; { Ordering orderingToUse = ordering; - GaussianFactorGraph orderedGraph = *nlfg.linearize(isamsoln, *nlfg.orderingCOLAMD(isamsoln)); - boost::timer::cpu_timer timer; + GaussianFactorGraph::shared_ptr orderedGraph = nlfg.linearize(isamsoln, *nlfg.orderingCOLAMD(isamsoln)); gttic_(Solve_ordered); VectorValues orderedSoln; for(size_t i = 0; i < 1; ++i) { - VariableIndex vi(nlfg); - boost::shared_ptr permutation = inference::PermutationCOLAMD(vi); + gttic_(VariableIndex); + boost::shared_ptr vi = boost::make_shared(gfg); + gttoc_(VariableIndex); + gttic_(COLAMD); + boost::shared_ptr permutation = inference::PermutationCOLAMD(*vi); orderingToUse.permuteInPlace(*permutation); - orderedSoln = *GaussianMultifrontalSolver(orderedGraph, true).optimize(); + gttoc_(COLAMD); + gttic_(eliminate); + boost::shared_ptr bt = GaussianMultifrontalSolver(*orderedGraph, true).eliminate(); + gttoc_(eliminate); + gttic_(optimize); + orderedSoln = optimize(*bt); + gttoc_(optimize); } gttoc_(Solve_ordered); - timer.stop(); - boost::timer::cpu_times times = timer.elapsed(); - std::cout << "Total CPU time: " << double(times.system + times.user) / 1e9 - << ", wall time: " << double(times.wall) / 1e9 << std::endl; orderedSolnFinal = orderedSoln; } // Compare results - compareSolutions(orderedSolnFinal, ordering, unorderedSolnFinal); + compareSolutions(orderedSolnFinal, orderingCOLAMD, unorderedSolnFinal); //GaussianEliminationTreeUnordered(gfgu, orderingUnordered).print("ETree: "); //GaussianJunctionTreeUnordered(GaussianEliminationTreeUnordered(gfgu, orderingUnordered)).print("JTree: ");