Skip to content

[Task]: Minor make test speedups #533

@abpolym

Description

@abpolym

Running make test on my machine utilizing all cores and threads takes 4m09.3s.
Although this is already really fast, I think it can be improved a little bit by optimizing the bottleneck tests (e.g. split multiple @testset in a @testitem into multiple @testitem with single @testset).

Running my bottleneck test script on the output of make test reveals the bottlenecks:

$  grep 'DONE' /tmp/out.txt | perl -nle 'if(/"(.*?)" ([0-9]+(?:\.[0-9]+)?)\s*secs/){print "$2 \"$1\""}' | sort -nr
237.1 "cvi:prod"
91.6 "Basic out rule tests #2"
82.3 "rules:DiscreteTransition:out:Belief propagation: higher orders"
81.2 "rules:DiscreteTransition:T:Additional T-interface tests for Belief Propagation"
74.8 "rules:DiscreteTransition:in:Structured VMP: Higher orders (q_out::Pointmass, q_a::DirichletCollection, m_T*::Categorical)"
64.1 "rules:DiscreteTransition:T:Additional T-interface tests for structured VMP"
50.6 "CVIProjection proposal distribution convergence tests"
48.1 "rules:ContinuousTransition:x"
44.6 "Basic checks for marginal rule"
43.6 "rules:NormalMixture:out"
38.7 "rules:ContinuousTransition:a"
38.1 "Marginal"
36.3 "Message"
36.1 "DeltaNode - CVI sampling strategy performance comparison"
34.6 "rules:Delta:linearization:in"
33.6 "marginalrules:typeof(+)"
33.0 "marginalrules:ContinuousTransition"
32.5 "rules:ContinuousTransition:W"
30.3 "Basic out rule tests #4"
24.0 "rules:typeof(+):in1"
23.9 "rules:Flow:in"
23.8 "Basic out rule tests #1"
23.6 "rules:ContinuousTransition:y"
22.7 "marginalrules:typeof(-)"
22.6 "marginalrules:CVI"
18.9 "rule"
18.8 "rules:MvNormalMeanScaleMatrixPrecision:matrix"
17.8 "rules:DiscreteTransition:T:Belief Propagation: (m_out::Categorical, m_in::Categorical, q_a::DirichletCollection, m_t2::Categorical)"
16.0 "rules:DiscreteTransition:T:Belief Propagation: (m_out::Categorical, m_in::Categorical, q_a::DirichletCollection, m_T1::Categorical)"
14.9 "optimize_parameters: with specified form"
14.7 "rules:MvNormalMeanCovariance:covariance"
14.5 "rules:Delta:linearization:marginals"
14.5 "CVIProjection form access tests"
13.9 "StandardBasisVector"
12.7 "DirichletCollectionNode"
10.8 "rules:Delta:linearization:out"
10.6 "rules:SoftDot:γ"
10.2 "rules:Autoregressive:γ"
9.8 "rules:Probit:in"
9.6 "Variable"
9.2 "rules:SoftDot:θ"
8.9 "Basic out rule tests #3"
8.8 "rules:SoftDot:y"
8.7 "rules:typeof(-):in2"
8.4 "ContinuousTransitionNode"
8.4 "CVI Projection Extension Tests"
8.2 "rules:Autoregressive:θ"
8.2 "Flow Model"
7.7 "rules:typeof(+):out"
7.5 "marginalrules:DotProduct"
7.1 "rules:NormalMixture:m"
6.8 "rules:MvNormalMeanScaleMatrixPrecision:mean"
6.4 "rules:Autoregressive:x"
6.1 "rules:typeof(dot):out"
6.1 "rules:MvNormalMeanPrecision:mean"
5.9 "rules:DiscreteTransition:marginals:out_in_T1: (m_out::Categorical, m_in::Categorical, m_T1::Categorical, q_a::DirichletCollection)"
5.7 "rules:NormalMeanVariance:var"
5.6 "rules:NormalMixture:switch"
5.6 "rules:DiscreteTransition:T:Belief Propagation (m_out::Categorical, m_in::Categorical, q_a::PointMass)"
5.4 "rules:MvNormalMeanCovariance:mean"
5.3 "Linearization approximation method"
5.1 "rules:typeof(-):in1"
5.1 "DeltaNode - Creation with static inputs (all permutations) #2"
5.0 "rules:MvNormalMeanPrecision:out"
5.0 "rules:DiscreteTransition:a:Variational Bayes: (q_out_in_T1_t2::Contingency)"
4.7 "marginalrules:Autoregressive"
4.4 "rules:DiscreteTransition:marginals:out_in_T1_T2: (m_out::Categorical, m_in::Categorical, m_T1::Categorical, m_T2::Categorical, q_a::DirichletCollection)"
4.4 "rules:Autoregressive:y"
4.4 "marginalrules:Wishart"
4.2 "rules:BinomialPolya:beta"
4.1 "rules:typeof(-):out"
4.1 "rules:typeof(+):in2"
3.9 "rules:DiscreteTransition:T:Belief Propagation: (m_out::Categorical, m_in::Categorical, q_a::DirichletCollection)"
3.9 "rules:BIFM:in"
3.8 "rules:SoftDot:x"
3.8 "marginalrules:BIFM"
3.8 "ProjectionForm target tests"
3.7 "rules:typeof(dot):in1"
3.7 "marginalrules:Flow"
3.7 "DiscreteTransitionNode"
3.5 "Permutation Matrix"
3.5 "Additive Coupling Layer"
3.4 "rules:Delta:unscented:in"
3.4 "Unscented approximation method"
3.4 "Planar Flow"
3.2 "rules:HalfNormal:out"
3.2 "rules:DiscreteTransition:T:Belief Propagation (q_out::PointMass, m_in::Categorical, q_a::PointMass)"
3.1 "rules:MvNormalMeanPrecision:precision"
3.0 "rules:AND:out"
3.0 "rule:typeof(*):in"
3.0 "create_project_to_ins type stability"
2.8 "rules:MvNormalMeanCovariance:out"
2.8 "rules:DiscreteTransition:a:Variational Bayes: (q_out_in_T1::Contingency)"
2.6 "rules:Delta:cvi:out"
2.5 "rules:NormalMeanPrecision:mean"
2.4 "rules:NormalMeanPrecision:out"
2.4 "Various functional dependencies"
2.4 "Correct initialization of clusters"
2.4 "Basic checks for marginal rule with mean based approximation"
2.3 "rules:MvNormalMeanScaleMatrixPrecision:precision"
2.3 "rules:DiscreteTransition:a:Variational Bayes: (q_out::Any, q_in::Categorical)"
2.3 "Radial Flow"
2.3 "MvNormalWeightedMeanPrecisionNodeTest"
2.2 "rules:NormalMixture:p"
2.2 "rules:NormalMeanVariance:mean"
2.2 "Basic out rule tests #5"
2.1 "sdtype"
2.1 "rules:NormalMeanPrecision:precision"
2.1 "MvNormalMeanPrecisionNode"
2.1 "MultinomialPolya average energy"
2.1 "InverseGammaNode"
2.0 "rules:DiscreteTransition:marginals:out_in_T1: (m_out::PointMass, m_in::Categorical, m_T1::Categorical, q_a::DirichletCollection)"
2.0 "rules:DiscreteTransition:in:Belief Propagation: (m_out::Categorical, q_a::DirichletCollection, m_t1::Categorical, m_t2::Categorical)"
2.0 "RandomVariable: messageout"
2.0 "Debug addon"
1.9 "create_project_to type stability"
1.8 "rules:NormalMeanVariance:out"
1.8 "rules:IMPLY:marginals"
1.7 "rules:DiscreteTransition:in:Structured Variational Message Passing: (m_out::Categorical, q_a::DirichletCollection, q_t1_t2::Contingency)"
1.7 "rules:BIFM:out"
1.7 "BIFMHelperNode"
1.7 "AlgebraCommonTest"
1.6 "rules:DiscreteTransition:marginals:out_in: (m_out::PointMass, m_in::Categorical, q_a::DirichletCollection)"
1.6 "rules:Delta:unscented:out"
1.6 "marginalrules:Dirichlet"
1.5 "rules:typeof(dot):in2"
1.5 "rules:Delta:cvi:in"
1.4 "rules:MultinomialPolya:psi"
1.4 "rules:DiscreteTransition:marginals:out_in: (m_out::Categorical, m_in::Categorical, q_a::DirichletCollection)"
1.3 "rule:typeof(*):out"
1.3 "DivisionOf"
1.3 "DeltaNode - CVI layout functionality"
1.3 "BinomialPolya average energy"
1.2 "rules:Flow:out"
1.2 "rules:DiscreteTransition:marginals:out_in: (m_out::Categorical, m_in::Categorical,  q_a::DirichletCollection, q_T1::PointMass)"
1.2 "rules:DiscreteTransition:a:Variational Bayes: (q_out_in::Contingency, q_T1::Categorical)"
1.2 "rules:AND:marginals"
1.2 "Permutation Layer"
1.2 "Extension availability with `ExponentialFamilyProjection`"
1.1 "marginalrules:Categorical"
1.0 "rules:Wishart:out"
1.0 "rules:MvNormalMeanScalePrecision:precision"
1.0 "rules:Delta:unscented:marginals"
1.0 "MvNormalMeanScaleMatrixPrecision"
1.0 "MvNormalMeanCovarianceNode"
1.0 "Generic nodefunction fallback rule"
1.0 "AutoregressiveNode"
0.9 "rules:DiscreteTransition:out:Belief Propagation: (m_in::Categorical, q_a::DirichletCollection, m_t1::Categorical, m_t2::Categorical)"
0.9 "rules:DiscreteTransition:in:Belief Propagation: (m_out::Categorical, q_a::DirichletCollection, m_t1::Categorical)"
0.9 "rules:DiscreteTransition:a:Variational Bayes: (q_out_in::Contingency, q_T1::PointMass)"
0.9 "marginalrules:InverseWishart"
0.9 "Shared approximation methods"
0.9 "RandomVariable: getmarginal"
0.9 "DataVariable: linked variable"
0.8 "rules:MvNormalMeanScaleMatrixPrecision:out"
0.8 "rules:DiscreteTransition:marginals:out_in_T1_T2: (m_out::PointMass, m_in::Categorical, m_T1::PointMass, m_T2::Categorical, q_a::DirichletCollection)"
0.8 "rules:DiscreteTransition:in:Belief Propagation: (m_out::Categorical, q_a::DirichletCollection, q_T1::PointMass)"
0.8 "rules:Categorical:p"
0.8 "GenericFactorNode constructor"
0.7 "rules:Uniform:out"
0.7 "rules:OR:marginals"
0.7 "rules:InverseWishart:out"
0.7 "rules:BIFM:zprev"
0.7 "collect_latest_messages"
0.7 "NormalMeanPrecisionNode"
0.6 "rules:MvNormalWeightedMeanPrecision:out"
0.6 "rules:DiscreteTransition:out:Belief Propagation: (q_in::PointMass, q_a::PointMass)"
0.6 "rules:DiscreteTransition:out:Belief Propagation: (m_in::Categorical, q_a::DirichletCollection, q_T1::PointMass)"
0.6 "rules:DiscreteTransition:out:Belief Propagation: (m_in::Categorical, q_a::DirichletCollection, m_t1::Categorical)"
0.6 "rules:BIFM:znext"
0.6 "marginalrules:Bernoulli"
0.6 "SoftDotNode"
0.6 "Predefined nodes should check the arguments supplied"
0.6 "MvNormalMeanScalePrecision"
0.6 "Functional dependencies may change depending on the metadata from options"
0.6 "ExponentialLinearQuadratic"
0.6 "@node macro (in the current implementation) should not support interface names with underscores"
0.5 "rules:GammaInverse:out"
0.5 "rules:DiscreteTransition:marginals:T1_T2: (q_out_in::Contingency, m_T1::PointMass, m_T2::Categorical, q_a::DirichletCollection)"
0.5 "`factornode` should throw an error if the functional form is not defined with the `@node` macro"
0.5 "DeltaNode - creation with static inputs (simple case) #1"
0.4 "rules:MvNormalMeanScalePrecision:mean"
0.4 "rules:MvNormalMeanPrecision:out"
0.4 "rules:DiscreteTransition:out:Variational Bayes: (q_in::Categorical, q_a::DirichletCollection)"
0.4 "rules:DiscreteTransition:marginals:out_in_T1: (m_out::Categorical, m_in::PointMass, m_T1::Categorical, q_a::DirichletCollection)"
0.4 "rules:DiscreteTransition:marginals:out_T1_T2: (m_out::Categorical,  m_T1::Categorical, m_T2::Categorical, q_in::Categorical, q_a::DirichletCollection)"
0.4 "rules:DiscreteTransition:marginals:T1_T2: (q_out_in::Contingency, m_T1::Categorical, m_T2::Categorical, q_a::DirichletCollection)"
0.4 "rules:DiscreteTransition:in:Variational Bayes: (q_out::Any, q_a::DirichletCollection)"
0.4 "rules:DiscreteTransition:a:Variational Bayes: (q_out_in::Contingency)"
0.4 "rule:typeof(*):A"
0.4 "isonehot"
0.4 "collect_latest_marginals"
0.4 "ProbitNode"
0.4 "Memory addon"
0.4 "LoggerPipelineStage"
0.4 "FactorNodeLocalClusters constructor"
0.4 "DataVariable: getmarginal"
0.3 "rules:Probit:out"
0.3 "rules:MultinomialPolya:x"
0.3 "rules:GammaShapeRate:β"
0.3 "rules:GammaShapeRate:α"
0.3 "rules:BIFMHelper:in"
0.3 "rules:AND:in1"
0.3 "marginalrules:Beta"
0.3 "RandomVariable: activate! - zero or less than one inbound messages should throw"
0.3 "NormalMixtureNode"
0.3 "Input Layer"
0.3 "FlowNode"
0.3 "Deferred message"
0.3 "ConstVariable: uninitialized"
0.3 "ConstVariable: getmarginal"
0.2 "rules:Poisson:out"
0.2 "rules:IMPLY:in1"
0.2 "rules:GammaShapeRate:out"
0.2 "rules:DiscreteTransition:out:Belief Propagation: (m_in::DiscreteNonParametric, q_a::PointMass)"
0.2 "rules:DiscreteTransition:in:Variational Bayes: (q_out::Any, q_a::PointMass)"
0.2 "rules:DiscreteTransition:in:Belief Propagation: (m_out::Categorical, q_a::PointMass)"
0.2 "rules:Dirichlet:out"
0.2 "rules:Categorical:out"
0.2 "rules:BinomialPolya:beta"
0.2 "rules:Beta:out"
0.2 "rules:Bernoulli:p"
0.2 "rules:Bernoulli:out"
0.2 "rules:BIFMHelper:out"
0.2 "marginalrules:Poisson"
0.2 "marginalrules:GammaInverse"
0.2 "is_predefined_node"
0.2 "clusterindex"
0.2 "`@node` macro should generate the node function in all directions for `Stochastic` nodes"
0.2 "PoissonNode"
0.2 "NormalMeanVarianceNode"
0.2 "NodeInterface"
0.2 "MessageMapping should call `rulefallback` is no rule is available"
0.2 "InverseWishartNode"
0.2 "ConstVariable: getmessagein!"
0.2 "Basic check for in rule"
0.2 "@node macro"
0.2 "@node macro should generate a documentation entry for a newly specified node"
0.1 "rules:Poisson:l"
0.1 "rules:OR:out"
0.1 "rules:NOT:in"
0.1 "rules:IMPLY:in2"
0.1 "rules:DiscreteTransition:out:Variational Bayes: (m_in::PointMass, q_a::PointMass)"
0.1 "marginalrules:GammaShapeRate"
0.1 "clustername"
0.1 "`UnspecifiedFormConstraint` should not error on `Distribution` objects"
0.1 "RandomVariable: getmessagein!"
0.1 "NodeInterface israndom/isdata/isconst"
0.1 "FactorNodeLocalMarginal"
0.1 "DataVariable: getmessagein!"
0.1 "Addons"

Metadata

Metadata

Assignees

Labels

Type

Projects

Status

Backlog

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions