Repository navigation
Commit 7394a86
Speed up
`mju_boxQPoption` previously refactored the free-subspace Hessian from scratch whenever the active set changed and performed multiple $O(n^2)$ matrix-vector products per iteration and per line-search step. Updating the Cholesky factor incrementally for small active-set changes and evaluating the search direction and Armijo line search in the `nfree` subspace speeds up `mju_boxQP` by 1.4–1.6x on cold starts and 1.9–2.9x on warm starts, while improving single-precision accuracy.
- Add `cholDelete` and `cholInsert` in `engine_util_solve.c` to update `R` via `mju_cholUpdate` when the active-set change is small relative to `nfree`, and fuse the inner column loops in `mju_cholUpdate`.
- Solve `H_free,free * temp = grad_free` directly after checking `norm2 < mingrad` and evaluate the projected Armijo line search in the `nfree` subspace using `R`, removing `mulVecMatVecSym`.
- Enable `BoxQPTest.BoundedQPvariations` under single precision in `engine_util_solve_test.cc` and evaluate coordinate nudges in `isQPminimum` directly from the gradient and diagonal curvature.
- Rename `lu_benchmark_test` to `engine_util_solve_benchmark_test` and add `BM_BoxQP` benchmarks for $n \in \{10, 30, 100, 300\}$.
PiperOrigin-RevId: 1004087455
Change-Id: Ib416aa55945f543652e2a73f1d217e6761036613mju_boxQP ~2x and improve single-precision accuracy.1 parent 550a454 commit 7394a86
6 files changed
Lines changed: 797 additions & 328 deletions
File tree
- doc
- src/engine
- test
- benchmark
- engine
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
63 | 63 | | |
64 | 64 | | |
65 | 65 | | |
| 66 | + | |
| 67 | + | |
66 | 68 | | |
67 | 69 | | |
68 | 70 | | |
| |||
0 commit comments