From 2b72f75a0775a9b2a972c8ac0d317567c83e58d3 Mon Sep 17 00:00:00 2001 From: Varun Agrawal Date: Thu, 13 Jul 2023 23:47:56 -0400 Subject: [PATCH] add timing checkpoints --- gtsam/hybrid/HybridBayesNet.cpp | 8 ++++++++ gtsam/hybrid/HybridGaussianFactorGraph.cpp | 6 ++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/gtsam/hybrid/HybridBayesNet.cpp b/gtsam/hybrid/HybridBayesNet.cpp index 13280f1c2..266e02b0d 100644 --- a/gtsam/hybrid/HybridBayesNet.cpp +++ b/gtsam/hybrid/HybridBayesNet.cpp @@ -161,12 +161,14 @@ void HybridBayesNet::updateDiscreteConditionals( DecisionTreeFactor::ADT prunedDiscreteTree = discreteTree->apply(prunerFunc(prunedDiscreteProbs, *conditional)); + gttic_(HybridBayesNet_MakeConditional); // Create the new (hybrid) conditional KeyVector frontals(discrete->frontals().begin(), discrete->frontals().end()); auto prunedDiscrete = std::make_shared( frontals.size(), conditional->discreteKeys(), prunedDiscreteTree); conditional = std::make_shared(prunedDiscrete); + gttoc_(HybridBayesNet_MakeConditional); // Add it back to the BayesNet this->at(i) = conditional; @@ -177,12 +179,16 @@ void HybridBayesNet::updateDiscreteConditionals( /* ************************************************************************* */ HybridBayesNet HybridBayesNet::prune(size_t maxNrLeaves) { // Get the decision tree of only the discrete keys + gttic_(HybridBayesNet_PruneDiscreteConditionals); DecisionTreeFactor::shared_ptr discreteConditionals = this->discreteConditionals(); const DecisionTreeFactor prunedDiscreteProbs = discreteConditionals->prune(maxNrLeaves); + gttoc_(HybridBayesNet_PruneDiscreteConditionals); + gttic_(HybridBayesNet_UpdateDiscreteConditionals); this->updateDiscreteConditionals(prunedDiscreteProbs); + gttoc_(HybridBayesNet_UpdateDiscreteConditionals); /* To Prune, we visitWith every leaf in the GaussianMixture. * For each leaf, using the assignment we can check the discrete decision tree @@ -193,6 +199,7 @@ HybridBayesNet HybridBayesNet::prune(size_t maxNrLeaves) { HybridBayesNet prunedBayesNetFragment; + gttic_(HybridBayesNet_PruneMixtures); // Go through all the conditionals in the // Bayes Net and prune them as per prunedDiscreteProbs. for (auto &&conditional : *this) { @@ -209,6 +216,7 @@ HybridBayesNet HybridBayesNet::prune(size_t maxNrLeaves) { prunedBayesNetFragment.push_back(conditional); } } + gttoc_(HybridBayesNet_PruneMixtures); return prunedBayesNetFragment; } diff --git a/gtsam/hybrid/HybridGaussianFactorGraph.cpp b/gtsam/hybrid/HybridGaussianFactorGraph.cpp index 8b9d62822..e14023edd 100644 --- a/gtsam/hybrid/HybridGaussianFactorGraph.cpp +++ b/gtsam/hybrid/HybridGaussianFactorGraph.cpp @@ -98,7 +98,7 @@ static GaussianFactorGraphTree addGaussian( // TODO(dellaert): it's probably more efficient to first collect the discrete // keys, and then loop over all assignments to populate a vector. GaussianFactorGraphTree HybridGaussianFactorGraph::assembleGraphTree() const { - gttic(assembleGraphTree); + gttic_(assembleGraphTree); GaussianFactorGraphTree result; @@ -131,7 +131,7 @@ GaussianFactorGraphTree HybridGaussianFactorGraph::assembleGraphTree() const { } } - gttoc(assembleGraphTree); + gttoc_(assembleGraphTree); return result; } @@ -235,7 +235,9 @@ hybridElimination(const HybridGaussianFactorGraph &factors, gttic_(hybrid_eliminate); #endif + gttic_(hybrid_continuous_eliminate); auto result = EliminatePreferCholesky(graph, frontalKeys); + gttoc_(hybrid_continuous_eliminate); #ifdef HYBRID_TIMING gttoc_(hybrid_eliminate);