diff --git a/internal/ceres/suitesparse.cc b/internal/ceres/suitesparse.cc index e108ec694..189a24f02 100644 --- a/internal/ceres/suitesparse.cc +++ b/internal/ceres/suitesparse.cc @@ -165,6 +165,13 @@ cholmod_factor* SuiteSparse::AnalyzeCholesky(cholmod_sparse* A, std::string* message) { cc_.nmethods = 1; cc_.method[0].ordering = OrderingTypeToCHOLMODEnum(ordering_type); + + // postordering with a NATURAL ordering leads to a significant regression in + // performance. See https://github.com/ceres-solver/ceres-solver/issues/905 + if (ordering_type == OrderingType::NATURAL) { + cc_.postorder = 0; + } + cholmod_factor* factor = cholmod_analyze(A, &cc_); if (cc_.status != CHOLMOD_OK) {