aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nlsolve.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/nlsolve.c b/nlsolve.c
index 5d691e0..cdc403e 100644
--- a/nlsolve.c
+++ b/nlsolve.c
@@ -94,6 +94,9 @@ struct NLSolvePriv {
uint64_t calc_eq_coeffs_count;
uint64_t calc_eq_coeffs_time;
+
+ uint64_t var_eval_count;
+ uint64_t var_eval_time;
};
int tdi_nlsolve_solve(NLSolveContext *ctx, NLEqCallback eq_eval,
@@ -129,6 +132,10 @@ int tdi_nlsolve_solve(NLSolveContext *ctx, NLEqCallback eq_eval,
var_ctx->transform_tmp, ctx->solve_order[i][0], 0.0, var_ctx->vars[j], ctx->solve_order[i][0]);
}
}
+ s->var_eval_count++;
+ s->var_eval_time += gettime() - start;
+
+ start = gettime();
// build equation coeffs
for (int i = 0; i < s->nb_equations; i++) {
@@ -188,6 +195,9 @@ int tdi_nlsolve_solve(NLSolveContext *ctx, NLEqCallback eq_eval,
}
}
+ s->calc_eq_coeffs_count++;
+ s->calc_eq_coeffs_time += gettime() - start;
+
// solve for delta
ret = tdi_pssolve_solve(s->ps_ctx, s->eq_coeffs, s->rhs, s->delta);
if (ret < 0)
@@ -221,6 +231,12 @@ void tdi_solver_print_stats(NLSolveContext *ctx)
NLSolvePriv *s = ctx->priv;
tdi_log(&ctx->logger, 2,
+ "%g%% variables evaluation: %lu, "
+ "total time %g s, avg time per call %g ms\n",
+ (double)s->var_eval_time * 100 / s->solve_time,
+ s->var_eval_count, (double)s->var_eval_time / 1e6,
+ (double)s->var_eval_time / s->var_eval_count / 1e3);
+ tdi_log(&ctx->logger, 2,
"%g%% calc equation coefficients: %lu, "
"total time %g s, avg time per call %g ms\n",
(double)s->calc_eq_coeffs_time * 100 / s->solve_time,