Skip to content

Instantly share code, notes, and snippets.

@frapac
Created August 25, 2023 09:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save frapac/ef2c37e43eafb3aacec6898564508c3e to your computer and use it in GitHub Desktop.
Save frapac/ef2c37e43eafb3aacec6898564508c3e to your computer and use it in GitHub Desktop.
Benchmark MadNLP's kernels
using BenchmarkTools
using CUTEst
using MadNLP
name = "OPTMASS"
nlp = CUTEst.CUTEstModel(name)
solver = MadNLP.MadNLPSolver(nlp)
println("Initialization")
@info "set_initial_rhs!"
@btime MadNLP.set_initial_rhs!(solver, solver.kkt)
@info "initialize_variables!"
@btime MadNLP.initialize_variables!(
MadNLP.full(solver.x),
MadNLP.full(solver.xl),
MadNLP.full(solver.xu),
solver.opt.bound_push, solver.opt.bound_fac,
)
println()
println("KKT solver")
@info "jtprod!"
@btime MadNLP.jtprod!(solver.jacl, solver.kkt, solver.y)
@info "set_aug_diagonal!"
@btime MadNLP.set_aug_diagonal!(solver.kkt, solver)
@info "set_aug_rhs!"
@btime MadNLP.set_aug_rhs!(solver, solver.kkt, solver.c)
@info "finish_aug_solve!"
# @btime MadNLP.finish_aug_solve!(solver.kkt, solver.d)
@btime MadNLP.finish_aug_solve!(solver, solver.kkt, solver.mu)
println()
println("Linear solver")
@info "factorize_wrapper!"
@btime MadNLP.factorize_wrapper!(solver)
@info "solve_refine_wrapper!"
@btime MadNLP.solve_refine_wrapper!(solver, solver.d, solver.p)
println()
println("Termination criteria")
@info "get_inf_pr"
@btime MadNLP.get_inf_pr(solver.c)
@info "get_inf_du"
@btime MadNLP.get_inf_du(
MadNLP.full(solver.f),
MadNLP.full(solver.zl),
MadNLP.full(solver.zu),
solver.jacl,
1.0,
)
@info "get_inf_compl"
@btime MadNLP.get_inf_compl(
solver.x_lr,
solver.xl_r,
solver.zl_r,
solver.xu_r,
solver.x_ur,
solver.zu_r,
0.0,
1.0,
)
println()
println("Line-search")
@info "get_theta"
theta = @btime MadNLP.get_theta(solver.c)
@info "get_varphi"
@btime MadNLP.get_varphi(solver.obj_val, solver.x_lr, solver.xl_r, solver.xu_r, solver.x_ur, solver.mu)
@info "get_varphi_d"
varphi_d = @btime MadNLP.get_varphi_d(
MadNLP.primal(solver.f),
MadNLP.primal(solver.x),
MadNLP.primal(solver.xl),
MadNLP.primal(solver.xu),
MadNLP.primal(solver.d),
solver.mu,
)
@info "get_alpha_max"
@btime MadNLP.get_alpha_max(
MadNLP.primal(solver.x),
MadNLP.primal(solver.xl),
MadNLP.primal(solver.xu),
MadNLP.primal(solver.d),
solver.tau,
)
@info "get_alpha_z"
@btime MadNLP.get_alpha_z(
solver.zl_r,
solver.zu_r,
MadNLP.dual_lb(solver.d),
MadNLP.dual_ub(solver.d),
solver.tau,
)
@info "get_alpha_min"
@btime MadNLP.get_alpha_min(
theta,
varphi_d,
solver.theta_min,
solver.opt.gamma_theta,
solver.opt.gamma_phi,
solver.opt.alpha_min_frac,
solver.opt.delta,
solver.opt.s_theta,
solver.opt.s_phi,
)
println()
println("Misc.")
@info "adjust_boundary!"
@btime MadNLP.adjust_boundary!(solver.x_lr,solver.xl_r,solver.x_ur,solver.xu_r,solver.mu)
@info "reset_bound_dual! #1"
@btime MadNLP.reset_bound_dual!(
MadNLP.primal(solver.zl),
MadNLP.primal(solver.x),
MadNLP.primal(solver.xl),
solver.mu,solver.opt.kappa_sigma,
)
@info "reset_bound_dual! #2"
@btime MadNLP.reset_bound_dual!(
MadNLP.primal(solver.zu),
MadNLP.primal(solver.xu),
MadNLP.primal(solver.x),
solver.mu,solver.opt.kappa_sigma,
)
finalize(nlp)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment