Created
August 25, 2023 09:00
-
-
Save frapac/ef2c37e43eafb3aacec6898564508c3e to your computer and use it in GitHub Desktop.
Benchmark MadNLP's kernels
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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