From 7b3c851f78e16a28be3b26aab5db1ca347c604e8 Mon Sep 17 00:00:00 2001 From: Michel Schanen Date: Fri, 2 Oct 2026 20:43:48 -0500 Subject: [PATCH 1/2] perf: split regime-A subtrees by flops; experiment 0 phase profile Experiment 0 of performance.md. bench/profile_phases.jl traces one warm refactorization and solve per harness matrix on CUDA. On every pglib KKT dump the whole factorization and the forward solve ran in one 128-thread workgroup: regime A took any subtree whose stack fit the local-memory budget, with no parallelism criterion. New analysis tuning knob `subtree_parallelism` (default 4096): a regime-A subtree may do at most 1/subtree_parallelism of the factorization flops (`front_flops`). case1354 K2 LDLT refactorization 146 -> 7.2 ms, solve 78.7 -> 2.6 ms; SuiteSparse and Laplacian matrices unchanged. Geometric mean SDS/cuDSS refactorization: Cholesky 9.06x -> 3.89x, LDLT 29.8x -> 9.90x, K2 + IR 36.0x -> 5.45x (bench/comparison regenerated). Tests: regime-A kernel tests pin subtree_parallelism = 0 (unsplit, as before); new testset for the flop limit. test_api compares layouts bitwise, which needs deterministic_mode = 1 now that the small test matrices reach the atomic regime-B forward sweep on CUDA. performance.md: experiment 0 results and the revised order. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01TJrmq7e9jiW4VxBMEVup2E --- bench/README.md | 1 + bench/comparison/comparison.md | 130 ++++++------- bench/comparison/comparison.png | Bin 223259 -> 216924 bytes bench/comparison/sds.csv | 120 ++++++------ bench/profile/phase_split.csv | 36 ++++ bench/profile/phase_split.md | 123 ++++++++++++ bench/profile/phase_split_main_9d280d0.csv | 36 ++++ bench/profile/phase_split_main_9d280d0.md | 123 ++++++++++++ bench/profile_phases.jl | 212 +++++++++++++++++++++ performance.md | 36 ++++ src/options.jl | 22 ++- src/symbolic/schedule.jl | 29 ++- test/test_api.jl | 8 + test/test_numeric_cholesky_a.jl | 28 +-- test/test_symbolic_schedule.jl | 47 ++++- 15 files changed, 809 insertions(+), 142 deletions(-) create mode 100644 bench/profile/phase_split.csv create mode 100644 bench/profile/phase_split.md create mode 100644 bench/profile/phase_split_main_9d280d0.csv create mode 100644 bench/profile/phase_split_main_9d280d0.md create mode 100644 bench/profile_phases.jl diff --git a/bench/README.md b/bench/README.md index 0b4a47d..46c9c33 100644 --- a/bench/README.md +++ b/bench/README.md @@ -15,6 +15,7 @@ Baselines every later milestone is measured against (PLAN.md §5 M0, §7). The | `dump_madnlp_kkt.jl` | dumps MadNLP K2 and condensed KKT matrices of pglib-opf cases | | `features.jl` | module `BenchFeatures`: the comparison features, one per planned capability in TASKS.md order (`cholesky_f64` … `mixed_precision`), with structure, element type, matrix selector and parameters; `task_status` reads the task's marker in TASKS.md | | `compare.jl` | cuDSS vs SparseDirectSolver.jl per feature × matrix with BenchmarkTools; one solver per run (`--solver=cudss` or `--solver=sds`), results merged into `bench/comparison/.csv` | +| `profile_phases.jl` | where SDS spends refactorization and solve time on CUDA (performance.md, experiment 0): schedule per matrix (regime-A subtrees, B/C fronts, launch groups) and a CUPTI trace of one warm refactorization and solve (kernels, copies, busy time, longest kernel and its grid); writes `bench/profile/phase_split.{md,csv}`: `julia --project=bench bench/profile_phases.jl [--only=m1,m2] [--structures=SPD,S]` | | `compare_report.jl` | renders `bench/comparison/comparison.md` (overview + one table per feature) and `comparison.png` (SDS/cuDSS ratio per feature and phase); environment `bench/report/` (CairoMakie) | | `pivot_pairs.jl` | 2×2 pivot pairs of the `S` analysis (issue #66): `pivot_pairs` = `none`/`default`/`all` on the K2 dumps and the KKT generators, with nnz(L), zero/perturbed/2×2 pivots, max abs L and factor error of the CPU reference LDLᵀ; package environment: `julia --project=. bench/pivot_pairs.jl [--only=case118,...] [--generators=false]` | diff --git a/bench/comparison/comparison.md b/bench/comparison/comparison.md index d4f41e0..7b90e23 100644 --- a/bench/comparison/comparison.md +++ b/bench/comparison/comparison.md @@ -10,10 +10,10 @@ Geometric mean of the SDS/cuDSS ratio over the matrices both solvers ran. | feature | task | status | matrices | analysis | factorization | refactorization | solve | | --- | --- | --- | --- | --- | --- | --- | --- | -| Cholesky, Float64 | T13 | done | 14 | 0.60× | 5.64× | 9.06× | 8.93× | -| Cholesky, 16 right-hand sides | T12 | done | 14 | 0.60× | 6.06× | 9.52× | 7.28× | -| LDLᵀ, static pivoting | T15 | done | 23 | 1.12× | 20.44× | 29.78× | 13.42× | -| LDLᵀ + 2 refinement steps, K2 dumps | T16 | done | 9 | 2.67× | 23.40× | 35.99× | 33.25× | +| Cholesky, Float64 | T13 | done | 14 | 0.62× | 2.47× | 3.89× | 4.36× | +| Cholesky, 16 right-hand sides | T12 | done | 14 | 0.64× | 2.74× | 3.89× | 3.87× | +| LDLᵀ, static pivoting | T15 | done | 23 | 1.15× | 6.37× | 9.90× | 3.96× | +| LDLᵀ + 2 refinement steps, K2 dumps | T16 | done | 9 | 2.69× | 3.18× | 5.45× | 7.57× | | Uniform batch of 8, Cholesky | T17 | pending | | | | | | | LU, unsymmetric | T19 | pending | | | | | | | Schur complement, Cholesky | T20 | pending | | | | | | @@ -29,20 +29,20 @@ Geometric mean of the SDS/cuDSS ratio over the matrices both solvers ran. | matrix | n | analysis cuDSS ms | SDS ms | ratio | factorization cuDSS ms | SDS ms | ratio | refactorization cuDSS ms | SDS ms | ratio | solve cuDSS ms | SDS ms | ratio | nnz(L) cuDSS | SDS | relres cuDSS | SDS | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| Boeing/bcsstk38 | 8032 | 35.1 | 55 | 1.57× | 3.52 | 23.6 | 6.69× | 2.3 | 23.5 | 10.26× | 0.462 | 1.88 | 4.07× | 7.99e+05 | 8.05e+05 | 2.15e-10 | 1.05e-10 | -| GHS_psdef/apache2 | 715176 | 4.28e+03 | 6.08e+03 | 1.42× | 449 | 1.03e+03 | 2.30× | 421 | 1.02e+03 | 2.43× | 6.62 | 76.7 | 11.58× | 1.45e+08 | 1.29e+08 | 1.8e-10 | 1.58e-10 | -| HB/bcsstk17 | 10974 | 43.2 | 65.5 | 1.52× | 3.9 | 29.6 | 7.58× | 2.45 | 29.6 | 12.07× | 0.5 | 3.49 | 6.98× | 1.08e+06 | 1.04e+06 | 4.02e-11 | 5.05e-11 | -| kkt_pglib_opf_case118_ieee_condensed_1 | 1088 | 13 | 4.46 | 0.34× | 0.992 | 3.87 | 3.90× | 0.438 | 3.88 | 8.86× | 0.256 | 2.72 | 10.63× | 1.52e+04 | 1.16e+04 | 7.26e-05 | 0.00015 | -| kkt_pglib_opf_case118_ieee_condensed_10 | 1088 | 12.3 | 4.78 | 0.39× | 1.02 | 3.64 | 3.55× | 0.53 | 3.67 | 6.93× | 0.261 | 2.09 | 8.02× | 1.52e+04 | 1.16e+04 | 1.4e-05 | 1e-05 | -| kkt_pglib_opf_case118_ieee_condensed_20 | 1088 | 12.8 | 4.77 | 0.37× | 1.06 | 3.66 | 3.44× | 0.351 | 3.77 | 10.73× | 0.257 | 2.07 | 8.08× | 1.52e+04 | 1.16e+04 | 0.293 | 0.0977 | -| kkt_pglib_opf_case1354_pegase_condensed_1 | 11192 | 54.2 | 50 | 0.92× | 1.35 | 39.9 | 29.45× | 0.585 | 39.9 | 68.17× | 0.269 | 19.7 | 73.12× | 1.55e+05 | 1.21e+05 | 0.000316 | 0.000282 | -| kkt_pglib_opf_case1354_pegase_condensed_10 | 11192 | 55.4 | 48.7 | 0.88× | 1.4 | 38.4 | 27.50× | 0.584 | 38.3 | 65.66× | 0.375 | 19.7 | 52.44× | 1.55e+05 | 1.21e+05 | 0.000142 | 0.00014 | -| kkt_pglib_opf_case1354_pegase_condensed_20 | 11192 | 55.4 | 49 | 0.88× | 1.39 | 38.3 | 27.48× | 0.685 | 38.4 | 56.03× | 0.387 | 19.7 | 50.79× | 1.55e+05 | 1.21e+05 | 7.94e-05 | 7.41e-05 | -| kkt_pglib_opf_case14_ieee_condensed_1 | 118 | 6.82 | 0.965 | 0.14× | 0.216 | 0.526 | 2.44× | 0.225 | 0.555 | 2.47× | 0.187 | 0.402 | 2.16× | 1.27e+03 | 1.03e+03 | 4.09e-07 | 1.65e-06 | -| kkt_pglib_opf_case14_ieee_condensed_10 | 118 | 6.77 | 1.55 | 0.23× | 0.221 | 0.565 | 2.56× | 0.212 | 0.54 | 2.55× | 0.195 | 0.392 | 2.01× | 1.27e+03 | 1.03e+03 | 0.000109 | 0.000157 | -| kkt_pglib_opf_case14_ieee_condensed_11 | 118 | 6.89 | 0.937 | 0.14× | 0.242 | 0.49 | 2.03× | 0.28 | 0.539 | 1.93× | 0.214 | 0.379 | 1.78× | 1.27e+03 | 1.03e+03 | 1.2e-05 | 1.67e-05 | -| lap2d_300 | 90000 | 281 | 371 | 1.32× | 6.84 | 36.4 | 5.32× | 3.84 | 36.3 | 9.45× | 0.852 | 4.1 | 4.82× | 2.43e+06 | 2.47e+06 | 1.84e-12 | 1.78e-12 | -| lap3d_40 | 64000 | 340 | 398 | 1.17× | 55.8 | 223 | 4.00× | 50.6 | 223 | 4.42× | 1.35 | 17 | 12.59× | 1.75e+07 | 1.44e+07 | 8.29e-14 | 7.48e-14 | +| Boeing/bcsstk38 | 8032 | 35.1 | 52.9 | 1.51× | 3.52 | 22.7 | 6.44× | 2.3 | 22.6 | 9.85× | 0.462 | 1.93 | 4.18× | 7.99e+05 | 8.05e+05 | 2.15e-10 | 9.23e-11 | +| GHS_psdef/apache2 | 715176 | 4.28e+03 | 6.17e+03 | 1.44× | 449 | 1.04e+03 | 2.30× | 421 | 1.02e+03 | 2.43× | 6.62 | 74 | 11.19× | 1.45e+08 | 1.29e+08 | 1.8e-10 | 1.58e-10 | +| HB/bcsstk17 | 10974 | 43.2 | 66.5 | 1.54× | 3.9 | 27.8 | 7.12× | 2.45 | 27.8 | 11.34× | 0.5 | 4.19 | 8.38× | 1.08e+06 | 1.04e+06 | 4.02e-11 | 5.33e-11 | +| kkt_pglib_opf_case118_ieee_condensed_1 | 1088 | 13 | 5 | 0.38× | 0.992 | 1.12 | 1.13× | 0.438 | 1.18 | 2.69× | 0.256 | 0.795 | 3.11× | 1.52e+04 | 1.16e+04 | 7.26e-05 | 0.000117 | +| kkt_pglib_opf_case118_ieee_condensed_10 | 1088 | 12.3 | 4.96 | 0.40× | 1.02 | 1.01 | 0.98× | 0.53 | 0.928 | 1.75× | 0.261 | 0.894 | 3.43× | 1.52e+04 | 1.16e+04 | 1.4e-05 | 8.28e-06 | +| kkt_pglib_opf_case118_ieee_condensed_20 | 1088 | 12.8 | 4.94 | 0.39× | 1.06 | 1.25 | 1.17× | 0.351 | 1.07 | 3.05× | 0.257 | 1.02 | 3.99× | 1.52e+04 | 1.16e+04 | 0.293 | 0.0747 | +| kkt_pglib_opf_case1354_pegase_condensed_1 | 11192 | 54.2 | 51.7 | 0.95× | 1.35 | 4.57 | 3.37× | 0.585 | 2.99 | 5.12× | 0.269 | 1.56 | 5.78× | 1.55e+05 | 1.21e+05 | 0.000316 | 0.00024 | +| kkt_pglib_opf_case1354_pegase_condensed_10 | 11192 | 55.4 | 52.8 | 0.95× | 1.4 | 4.72 | 3.38× | 0.584 | 4.2 | 7.19× | 0.375 | 1.16 | 3.08× | 1.55e+05 | 1.21e+05 | 0.000142 | 0.000107 | +| kkt_pglib_opf_case1354_pegase_condensed_20 | 11192 | 55.4 | 51.4 | 0.93× | 1.39 | 2.93 | 2.10× | 0.685 | 3.95 | 5.76× | 0.387 | 1.48 | 3.81× | 1.55e+05 | 1.21e+05 | 7.94e-05 | 4.97e-05 | +| kkt_pglib_opf_case14_ieee_condensed_1 | 118 | 6.82 | 0.938 | 0.14× | 0.216 | 0.483 | 2.24× | 0.225 | 0.393 | 1.75× | 0.187 | 0.569 | 3.05× | 1.27e+03 | 1.03e+03 | 4.09e-07 | 1.3e-06 | +| kkt_pglib_opf_case14_ieee_condensed_10 | 118 | 6.77 | 0.985 | 0.15× | 0.221 | 0.351 | 1.59× | 0.212 | 0.425 | 2.00× | 0.195 | 0.474 | 2.43× | 1.27e+03 | 1.03e+03 | 0.000109 | 0.000172 | +| kkt_pglib_opf_case14_ieee_condensed_11 | 118 | 6.89 | 1.6 | 0.23× | 0.242 | 0.351 | 1.45× | 0.28 | 0.49 | 1.75× | 0.214 | 0.443 | 2.07× | 1.27e+03 | 1.03e+03 | 1.2e-05 | 1.56e-05 | +| lap2d_300 | 90000 | 281 | 364 | 1.29× | 6.84 | 31.5 | 4.61× | 3.84 | 31.4 | 8.19× | 0.852 | 3.31 | 3.89× | 2.43e+06 | 2.47e+06 | 1.84e-12 | 1.78e-12 | +| lap3d_40 | 64000 | 340 | 382 | 1.12× | 55.8 | 223 | 4.00× | 50.6 | 223 | 4.42× | 1.35 | 18.1 | 13.34× | 1.75e+07 | 1.44e+07 | 8.29e-14 | 7.48e-14 | ## Cholesky, 16 right-hand sides @@ -50,20 +50,20 @@ Geometric mean of the SDS/cuDSS ratio over the matrices both solvers ran. | matrix | n | analysis cuDSS ms | SDS ms | ratio | factorization cuDSS ms | SDS ms | ratio | refactorization cuDSS ms | SDS ms | ratio | solve cuDSS ms | SDS ms | ratio | nnz(L) cuDSS | SDS | relres cuDSS | SDS | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| Boeing/bcsstk38 | 8032 | 35.3 | 54 | 1.53× | 3.55 | 23.6 | 6.64× | 2.29 | 23.6 | 10.29× | 0.706 | 3.1 | 4.39× | 7.99e+05 | 8.05e+05 | 6.7e-10 | 1.66e-10 | -| GHS_psdef/apache2 | 715176 | 4.3e+03 | 6.23e+03 | 1.45× | 447 | 1.03e+03 | 2.30× | 417 | 1.02e+03 | 2.45× | 27.6 | 256 | 9.27× | 1.45e+08 | 1.29e+08 | 1.83e-10 | 1.6e-10 | -| HB/bcsstk17 | 10974 | 40.8 | 66.2 | 1.62× | 3.8 | 29.5 | 7.76× | 2.42 | 29.6 | 12.23× | 0.758 | 6.56 | 8.66× | 1.08e+06 | 1.04e+06 | 5.13e-11 | 5.92e-11 | -| kkt_pglib_opf_case118_ieee_condensed_1 | 1088 | 11.8 | 4.7 | 0.40× | 0.911 | 3.87 | 4.25× | 0.341 | 3.88 | 11.36× | 0.375 | 2.18 | 5.82× | 1.52e+04 | 1.16e+04 | 6.7e-05 | 0.00015 | -| kkt_pglib_opf_case118_ieee_condensed_10 | 1088 | 11.9 | 4.56 | 0.38× | 0.882 | 4.45 | 5.04× | 0.406 | 3.64 | 8.96× | 0.346 | 2.13 | 6.17× | 1.52e+04 | 1.16e+04 | 1.52e-05 | 1.1e-05 | -| kkt_pglib_opf_case118_ieee_condensed_20 | 1088 | 12.2 | 4.74 | 0.39× | 0.889 | 3.7 | 4.16× | 0.359 | 4.01 | 11.17× | 0.26 | 2.05 | 7.87× | 1.52e+04 | 1.16e+04 | 0.492 | 0.318 | -| kkt_pglib_opf_case1354_pegase_condensed_1 | 11192 | 51.9 | 49.6 | 0.96× | 1.37 | 39.6 | 28.85× | 0.581 | 39.6 | 68.22× | 0.487 | 19.4 | 39.75× | 1.55e+05 | 1.21e+05 | 0.000394 | 0.000393 | -| kkt_pglib_opf_case1354_pegase_condensed_10 | 11192 | 52.9 | 49.7 | 0.94× | 1.5 | 38.4 | 25.64× | 0.614 | 38.2 | 62.24× | 0.457 | 19.3 | 42.25× | 1.55e+05 | 1.21e+05 | 0.000137 | 0.000144 | -| kkt_pglib_opf_case1354_pegase_condensed_20 | 11192 | 53.3 | 49.6 | 0.93× | 1.34 | 38.2 | 28.61× | 0.701 | 38.1 | 54.36× | 0.461 | 19.4 | 42.03× | 1.55e+05 | 1.21e+05 | 9.79e-05 | 9.67e-05 | -| kkt_pglib_opf_case14_ieee_condensed_1 | 118 | 7.25 | 0.974 | 0.13× | 0.199 | 0.555 | 2.79× | 0.24 | 0.543 | 2.26× | 0.221 | 0.449 | 2.03× | 1.27e+03 | 1.03e+03 | 6.35e-07 | 2.71e-06 | -| kkt_pglib_opf_case14_ieee_condensed_10 | 118 | 6.76 | 1.06 | 0.16× | 0.218 | 0.511 | 2.35× | 0.212 | 0.504 | 2.38× | 0.365 | 0.486 | 1.33× | 1.27e+03 | 1.03e+03 | 0.000179 | 0.000454 | -| kkt_pglib_opf_case14_ieee_condensed_11 | 118 | 6.84 | 0.941 | 0.14× | 0.24 | 0.521 | 2.17× | 0.222 | 0.543 | 2.45× | 0.261 | 0.446 | 1.71× | 1.27e+03 | 1.03e+03 | 3.34e-05 | 3.71e-05 | -| lap2d_300 | 90000 | 271 | 334 | 1.23× | 5.71 | 36.4 | 6.37× | 3.8 | 36.4 | 9.57× | 2.3 | 9.14 | 3.97× | 2.43e+06 | 2.47e+06 | 1.85e-12 | 1.8e-12 | -| lap3d_40 | 64000 | 329 | 409 | 1.24× | 50.5 | 223 | 4.41× | 45.7 | 223 | 4.88× | 5.58 | 50.5 | 9.05× | 1.75e+07 | 1.44e+07 | 8.99e-14 | 8.45e-14 | +| Boeing/bcsstk38 | 8032 | 35.3 | 53.4 | 1.51× | 3.55 | 24.4 | 6.88× | 2.29 | 22.5 | 9.84× | 0.706 | 3.09 | 4.38× | 7.99e+05 | 8.05e+05 | 6.7e-10 | 1.84e-10 | +| GHS_psdef/apache2 | 715176 | 4.3e+03 | 6.14e+03 | 1.43× | 447 | 1.03e+03 | 2.31× | 417 | 1.02e+03 | 2.45× | 27.6 | 256 | 9.28× | 1.45e+08 | 1.29e+08 | 1.83e-10 | 1.6e-10 | +| HB/bcsstk17 | 10974 | 40.8 | 66.4 | 1.63× | 3.8 | 27.8 | 7.31× | 2.42 | 27.8 | 11.51× | 0.758 | 5.85 | 7.72× | 1.08e+06 | 1.04e+06 | 5.13e-11 | 5.37e-11 | +| kkt_pglib_opf_case118_ieee_condensed_1 | 1088 | 11.8 | 4.81 | 0.41× | 0.911 | 1.43 | 1.57× | 0.341 | 1.03 | 3.02× | 0.375 | 1.03 | 2.74× | 1.52e+04 | 1.16e+04 | 6.7e-05 | 0.000104 | +| kkt_pglib_opf_case118_ieee_condensed_10 | 1088 | 11.9 | 4.73 | 0.40× | 0.882 | 1.42 | 1.61× | 0.406 | 1.06 | 2.61× | 0.346 | 0.868 | 2.51× | 1.52e+04 | 1.16e+04 | 1.52e-05 | 8.77e-06 | +| kkt_pglib_opf_case118_ieee_condensed_20 | 1088 | 12.2 | 4.89 | 0.40× | 0.889 | 1.12 | 1.26× | 0.359 | 0.949 | 2.64× | 0.26 | 0.907 | 3.48× | 1.52e+04 | 1.16e+04 | 0.492 | 0.303 | +| kkt_pglib_opf_case1354_pegase_condensed_1 | 11192 | 51.9 | 51.8 | 1.00× | 1.37 | 4.41 | 3.22× | 0.581 | 3.63 | 6.24× | 0.487 | 1.91 | 3.92× | 1.55e+05 | 1.21e+05 | 0.000394 | 0.000321 | +| kkt_pglib_opf_case1354_pegase_condensed_10 | 11192 | 52.9 | 51.4 | 0.97× | 1.5 | 2.94 | 1.96× | 0.614 | 2.95 | 4.81× | 0.457 | 1.69 | 3.69× | 1.55e+05 | 1.21e+05 | 0.000137 | 0.000106 | +| kkt_pglib_opf_case1354_pegase_condensed_20 | 11192 | 53.3 | 51.5 | 0.97× | 1.34 | 3.01 | 2.25× | 0.701 | 2.93 | 4.18× | 0.461 | 1.9 | 4.13× | 1.55e+05 | 1.21e+05 | 9.79e-05 | 6.7e-05 | +| kkt_pglib_opf_case14_ieee_condensed_1 | 118 | 7.25 | 1.06 | 0.15× | 0.199 | 0.479 | 2.41× | 0.24 | 0.394 | 1.64× | 0.221 | 1.06 | 4.80× | 1.27e+03 | 1.03e+03 | 6.35e-07 | 1.29e-06 | +| kkt_pglib_opf_case14_ieee_condensed_10 | 118 | 6.76 | 2.16 | 0.32× | 0.218 | 0.533 | 2.45× | 0.212 | 0.486 | 2.29× | 0.365 | 0.51 | 1.40× | 1.27e+03 | 1.03e+03 | 0.000179 | 0.000268 | +| kkt_pglib_opf_case14_ieee_condensed_11 | 118 | 6.84 | 1.02 | 0.15× | 0.24 | 0.426 | 1.77× | 0.222 | 0.358 | 1.61× | 0.261 | 0.45 | 1.72× | 1.27e+03 | 1.03e+03 | 3.34e-05 | 1.47e-05 | +| lap2d_300 | 90000 | 271 | 325 | 1.20× | 5.71 | 31.5 | 5.52× | 3.8 | 31.4 | 8.26× | 2.3 | 8.51 | 3.70× | 2.43e+06 | 2.47e+06 | 1.85e-12 | 1.79e-12 | +| lap3d_40 | 64000 | 329 | 387 | 1.18× | 50.5 | 223 | 4.41× | 45.7 | 223 | 4.89× | 5.58 | 49.1 | 8.79× | 1.75e+07 | 1.44e+07 | 8.99e-14 | 8.45e-14 | ## LDLᵀ, static pivoting @@ -71,29 +71,29 @@ Geometric mean of the SDS/cuDSS ratio over the matrices both solvers ran. | matrix | n | analysis cuDSS ms | SDS ms | ratio | factorization cuDSS ms | SDS ms | ratio | refactorization cuDSS ms | SDS ms | ratio | solve cuDSS ms | SDS ms | ratio | nnz(L) cuDSS | SDS | relres cuDSS | SDS | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| Boeing/bcsstk38 | 8032 | 35.5 | 61.1 | 1.72× | 4.55 | 129 | 28.37× | 3.31 | 129 | 38.95× | 0.476 | 2.82 | 5.92× | 7.99e+05 | 8.05e+05 | 6.5e-11 | 1.25e-10 | -| GHS_psdef/apache2 | 715176 | 4.45e+03 | 6.97e+03 | 1.57× | 518 | 9.07e+04 | 175.14× | 489 | 9.12e+04 | 186.36× | 6.8 | 89.1 | 13.10× | 1.45e+08 | 1.29e+08 | 1.58e-10 | 1.63e-10 | -| HB/bcsstk17 | 10974 | 42.2 | 72.7 | 1.72× | 5.45 | 198 | 36.39× | 3.37 | 198 | 58.76× | 0.5 | 3.8 | 7.59× | 1.08e+06 | 1.04e+06 | 3.87e-11 | 3.71e-11 | -| kkt_pglib_opf_case118_ieee_condensed_1 | 1088 | 12.9 | 5.04 | 0.39× | 0.905 | 5.03 | 5.56× | 0.39 | 5.03 | 12.89× | 0.383 | 2.61 | 6.82× | 1.52e+04 | 1.16e+04 | 2.99e-05 | 6.97e-05 | -| kkt_pglib_opf_case118_ieee_condensed_10 | 1088 | 12 | 5.12 | 0.43× | 0.921 | 4.99 | 5.41× | 0.349 | 4.89 | 14.01× | 0.249 | 2.38 | 9.54× | 1.52e+04 | 1.16e+04 | 9.52e-06 | 9.74e-06 | -| kkt_pglib_opf_case118_ieee_condensed_20 | 1088 | 12.9 | 5.04 | 0.39× | 0.899 | 5.04 | 5.61× | 0.351 | 5.03 | 14.31× | 0.282 | 2.38 | 8.44× | 1.52e+04 | 1.16e+04 | 0.108 | 0.0779 | -| kkt_pglib_opf_case118_ieee_k2_1 | 3150 | 16.2 | 54.2 | 3.34× | 0.845 | 13.8 | 16.31× | 0.363 | 13.8 | 38.08× | 0.229 | 7.73 | 33.81× | 2.02e+04 | 2.1e+04 | 2.4 | 0.237 | -| kkt_pglib_opf_case118_ieee_k2_10 | 3150 | 16.2 | 54.1 | 3.34× | 0.868 | 15 | 17.26× | 0.354 | 13.3 | 37.67× | 0.284 | 7.69 | 27.05× | 2.02e+04 | 2.05e+04 | 10.1 | 0.0106 | -| kkt_pglib_opf_case118_ieee_k2_20 | 3150 | 16.2 | 53.1 | 3.28× | 0.83 | 13.6 | 16.32× | 0.4 | 13.6 | 34.02× | 0.272 | 7.68 | 28.25× | 2.02e+04 | 2.05e+04 | 6.03 | 0.027 | -| kkt_pglib_opf_case1354_pegase_condensed_1 | 11192 | 53.3 | 52.1 | 0.98× | 1.39 | 56.3 | 40.63× | 0.684 | 56.3 | 82.22× | 0.355 | 22.6 | 63.57× | 1.55e+05 | 1.21e+05 | 0.000296 | 0.000322 | -| kkt_pglib_opf_case1354_pegase_condensed_10 | 11192 | 52.4 | 52 | 0.99× | 1.39 | 55.7 | 40.01× | 0.643 | 55.7 | 86.68× | 0.279 | 22.6 | 80.94× | 1.55e+05 | 1.21e+05 | 0.000122 | 9.53e-05 | -| kkt_pglib_opf_case1354_pegase_condensed_20 | 11192 | 53.1 | 52.2 | 0.98× | 1.65 | 56.1 | 34.07× | 0.706 | 56.1 | 79.48× | 0.611 | 22.6 | 37.00× | 1.55e+05 | 1.21e+05 | 7.55e-05 | 4.91e-05 | -| kkt_pglib_opf_case1354_pegase_k2_1 | 33811 | 97.4 | 1.03e+03 | 10.62× | 1.53 | 146 | 95.37× | 0.816 | 146 | 178.88× | 0.421 | 78.7 | 186.80× | 2.02e+05 | 2.16e+05 | 108 | 14.2 | -| kkt_pglib_opf_case1354_pegase_k2_10 | 33811 | 96.4 | 1.09e+03 | 11.28× | 1.55 | 161 | 103.65× | 0.827 | 145 | 175.73× | 0.448 | 79 | 176.38× | 2.02e+05 | 2.2e+05 | 52.2 | 51.7 | -| kkt_pglib_opf_case1354_pegase_k2_20 | 33811 | 100 | 1.1e+03 | 11.01× | 1.6 | 168 | 105.48× | 0.806 | 148 | 183.23× | 0.412 | 79.1 | 191.92× | 2.02e+05 | 2.21e+05 | 140 | 15.3 | -| kkt_pglib_opf_case14_ieee_condensed_1 | 118 | 6.65 | 1.17 | 0.18× | 0.226 | 0.615 | 2.73× | 0.192 | 0.629 | 3.27× | 0.321 | 0.418 | 1.30× | 1.27e+03 | 1.03e+03 | 9.81e-07 | 8.09e-07 | -| kkt_pglib_opf_case14_ieee_condensed_10 | 118 | 6.69 | 1.05 | 0.16× | 0.194 | 1.03 | 5.30× | 0.229 | 0.63 | 2.75× | 0.265 | 0.458 | 1.73× | 1.27e+03 | 1.03e+03 | 0.000129 | 0.000156 | -| kkt_pglib_opf_case14_ieee_condensed_11 | 118 | 6.74 | 1.06 | 0.16× | 0.212 | 0.681 | 3.21× | 0.291 | 0.605 | 2.08× | 0.299 | 0.504 | 1.69× | 1.27e+03 | 1.03e+03 | 1.44e-05 | 5.1e-06 | -| kkt_pglib_opf_case14_ieee_k2_1 | 344 | 9.21 | 4.08 | 0.44× | 0.216 | 2.02 | 9.32× | 0.28 | 1.59 | 5.66× | 0.265 | 0.96 | 3.62× | 2.02e+03 | 2.14e+03 | 0.182 | 1.07e-08 | -| kkt_pglib_opf_case14_ieee_k2_10 | 344 | 7.53 | 4.87 | 0.65× | 0.283 | 1.82 | 6.42× | 0.238 | 1.6 | 6.75× | 0.262 | 0.948 | 3.61× | 2.02e+03 | 2.15e+03 | 0.295 | 2.75e-05 | -| kkt_pglib_opf_case14_ieee_k2_15 | 344 | 7.63 | 3.56 | 0.47× | 0.217 | 1.71 | 7.87× | 0.322 | 1.75 | 5.44× | 0.435 | 0.842 | 1.93× | 2.02e+03 | 3.27e+03 | 0.221 | 0.324 | -| lap2d_300 | 90000 | 257 | 349 | 1.36× | 7.13 | 240 | 33.69× | 5.15 | 241 | 46.74× | 0.712 | 4.7 | 6.60× | 2.43e+06 | 2.47e+06 | 1.6e-12 | 1.68e-12 | -| lap3d_40 | 64000 | 332 | 416 | 1.25× | 62.9 | 1.46e+04 | 232.33× | 58.4 | 1.46e+04 | 250.37× | 1.41 | 19.4 | 13.68× | 1.75e+07 | 1.44e+07 | 7.68e-14 | 9.06e-14 | +| Boeing/bcsstk38 | 8032 | 35.5 | 60.6 | 1.71× | 4.55 | 131 | 28.90× | 3.31 | 131 | 39.63× | 0.476 | 2.03 | 4.26× | 7.99e+05 | 8.05e+05 | 6.5e-11 | 1.42e-10 | +| GHS_psdef/apache2 | 715176 | 4.45e+03 | 7.11e+03 | 1.60× | 518 | 9.08e+04 | 175.17× | 489 | 9.12e+04 | 186.38× | 6.8 | 89.2 | 13.11× | 1.45e+08 | 1.29e+08 | 1.58e-10 | 1.63e-10 | +| HB/bcsstk17 | 10974 | 42.2 | 72 | 1.70× | 5.45 | 198 | 36.32× | 3.37 | 198 | 58.64× | 0.5 | 3.69 | 7.37× | 1.08e+06 | 1.04e+06 | 3.87e-11 | 3.69e-11 | +| kkt_pglib_opf_case118_ieee_condensed_1 | 1088 | 12.9 | 5.75 | 0.45× | 0.905 | 1.93 | 2.13× | 0.39 | 1.7 | 4.36× | 0.383 | 0.741 | 1.93× | 1.52e+04 | 1.16e+04 | 2.99e-05 | 4.3e-05 | +| kkt_pglib_opf_case118_ieee_condensed_10 | 1088 | 12 | 5.19 | 0.43× | 0.921 | 2.21 | 2.40× | 0.349 | 2.79 | 7.98× | 0.249 | 1.75 | 7.02× | 1.52e+04 | 1.16e+04 | 9.52e-06 | 1.14e-05 | +| kkt_pglib_opf_case118_ieee_condensed_20 | 1088 | 12.9 | 5.26 | 0.41× | 0.899 | 1.66 | 1.85× | 0.351 | 2.5 | 7.12× | 0.282 | 0.871 | 3.09× | 1.52e+04 | 1.16e+04 | 0.108 | 0.0833 | +| kkt_pglib_opf_case118_ieee_k2_1 | 3150 | 16.2 | 55.3 | 3.41× | 0.845 | 1.5 | 1.78× | 0.363 | 1.98 | 5.45× | 0.229 | 0.897 | 3.92× | 2.02e+04 | 2.1e+04 | 2.4 | 0.0906 | +| kkt_pglib_opf_case118_ieee_k2_10 | 3150 | 16.2 | 55.6 | 3.44× | 0.868 | 1.4 | 1.61× | 0.354 | 1.35 | 3.83× | 0.284 | 1.49 | 5.26× | 2.02e+04 | 2.05e+04 | 10.1 | 0.0192 | +| kkt_pglib_opf_case118_ieee_k2_20 | 3150 | 16.2 | 54.2 | 3.35× | 0.83 | 1.33 | 1.60× | 0.4 | 1.5 | 3.76× | 0.272 | 1.59 | 5.84× | 2.02e+04 | 2.05e+04 | 6.03 | 0.0149 | +| kkt_pglib_opf_case1354_pegase_condensed_1 | 11192 | 53.3 | 54.8 | 1.03× | 1.39 | 9.82 | 7.09× | 0.684 | 9.6 | 14.03× | 0.355 | 1.22 | 3.45× | 1.55e+05 | 1.21e+05 | 0.000296 | 0.000275 | +| kkt_pglib_opf_case1354_pegase_condensed_10 | 11192 | 52.4 | 55.4 | 1.06× | 1.39 | 9.6 | 6.89× | 0.643 | 9.62 | 14.96× | 0.279 | 2.19 | 7.87× | 1.55e+05 | 1.21e+05 | 0.000122 | 9.49e-05 | +| kkt_pglib_opf_case1354_pegase_condensed_20 | 11192 | 53.1 | 54 | 1.02× | 1.65 | 11.1 | 6.72× | 0.706 | 9.73 | 13.79× | 0.611 | 1.46 | 2.38× | 1.55e+05 | 1.21e+05 | 7.55e-05 | 5.02e-05 | +| kkt_pglib_opf_case1354_pegase_k2_1 | 33811 | 97.4 | 1e+03 | 10.31× | 1.53 | 15.6 | 10.19× | 0.816 | 7.24 | 8.87× | 0.421 | 2.64 | 6.26× | 2.02e+05 | 2.16e+05 | 108 | 13 | +| kkt_pglib_opf_case1354_pegase_k2_10 | 33811 | 96.4 | 1.07e+03 | 11.06× | 1.55 | 7.88 | 5.09× | 0.827 | 7.24 | 8.75× | 0.448 | 2.6 | 5.81× | 2.02e+05 | 2.2e+05 | 52.2 | 52.8 | +| kkt_pglib_opf_case1354_pegase_k2_20 | 33811 | 100 | 1.08e+03 | 10.74× | 1.6 | 13 | 8.16× | 0.806 | 11 | 13.65× | 0.412 | 1.69 | 4.09× | 2.02e+05 | 2.21e+05 | 140 | 48 | +| kkt_pglib_opf_case14_ieee_condensed_1 | 118 | 6.65 | 1.13 | 0.17× | 0.226 | 0.386 | 1.71× | 0.192 | 0.437 | 2.27× | 0.321 | 0.539 | 1.68× | 1.27e+03 | 1.03e+03 | 9.81e-07 | 1.17e-06 | +| kkt_pglib_opf_case14_ieee_condensed_10 | 118 | 6.69 | 1.35 | 0.20× | 0.194 | 0.463 | 2.39× | 0.229 | 0.472 | 2.06× | 0.265 | 0.466 | 1.76× | 1.27e+03 | 1.03e+03 | 0.000129 | 0.000139 | +| kkt_pglib_opf_case14_ieee_condensed_11 | 118 | 6.74 | 1.28 | 0.19× | 0.212 | 0.509 | 2.40× | 0.291 | 0.71 | 2.44× | 0.299 | 0.488 | 1.63× | 1.27e+03 | 1.03e+03 | 1.44e-05 | 1.13e-05 | +| kkt_pglib_opf_case14_ieee_k2_1 | 344 | 9.21 | 4.26 | 0.46× | 0.216 | 0.839 | 3.88× | 0.28 | 0.669 | 2.39× | 0.265 | 0.576 | 2.17× | 2.02e+03 | 2.14e+03 | 0.182 | 7.68e-09 | +| kkt_pglib_opf_case14_ieee_k2_10 | 344 | 7.53 | 5.01 | 0.67× | 0.283 | 0.561 | 1.98× | 0.238 | 0.681 | 2.86× | 0.262 | 0.743 | 2.83× | 2.02e+03 | 2.15e+03 | 0.295 | 5.88e-06 | +| kkt_pglib_opf_case14_ieee_k2_15 | 344 | 7.63 | 3.01 | 0.39× | 0.217 | 1.15 | 5.28× | 0.322 | 1.17 | 3.63× | 0.435 | 0.565 | 1.30× | 2.02e+03 | 3.27e+03 | 0.221 | 0.48 | +| lap2d_300 | 90000 | 257 | 352 | 1.37× | 7.13 | 221 | 31.01× | 5.15 | 221 | 42.94× | 0.712 | 3.75 | 5.26× | 2.43e+06 | 2.47e+06 | 1.6e-12 | 1.68e-12 | +| lap3d_40 | 64000 | 332 | 428 | 1.29× | 62.9 | 1.46e+04 | 232.32× | 58.4 | 1.46e+04 | 250.39× | 1.41 | 19 | 13.42× | 1.75e+07 | 1.44e+07 | 7.68e-14 | 9.06e-14 | Single run instead of a BenchmarkTools trial (factorization above the `--single-run-above` limit): SDS on GHS_psdef/apache2, SDS on lap3d_40. @@ -103,15 +103,15 @@ Single run instead of a BenchmarkTools trial (factorization above the `--single- | matrix | n | analysis cuDSS ms | SDS ms | ratio | factorization cuDSS ms | SDS ms | ratio | refactorization cuDSS ms | SDS ms | ratio | solve cuDSS ms | SDS ms | ratio | nnz(L) cuDSS | SDS | relres cuDSS | SDS | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| kkt_pglib_opf_case118_ieee_k2_1 | 3150 | 15.8 | 54.3 | 3.43× | 0.827 | 13.8 | 16.68× | 0.371 | 13.8 | 37.20× | 0.6 | 23.4 | 39.01× | 2.02e+04 | 2.1e+04 | 0.00442 | 3.35e-09 | -| kkt_pglib_opf_case118_ieee_k2_10 | 3150 | 16 | 54.7 | 3.43× | 0.812 | 15.1 | 18.57× | 0.503 | 13.3 | 26.39× | 0.55 | 23 | 41.78× | 2.02e+04 | 2.05e+04 | 0.0164 | 5.78e-09 | -| kkt_pglib_opf_case118_ieee_k2_20 | 3150 | 15.5 | 53.1 | 3.42× | 0.828 | 13.6 | 16.47× | 0.339 | 13.6 | 40.15× | 0.596 | 22.9 | 38.43× | 2.02e+04 | 2.05e+04 | 0.189 | 7.51e-09 | -| kkt_pglib_opf_case1354_pegase_k2_1 | 33811 | 97.7 | 992 | 10.15× | 1.56 | 146 | 94.15× | 0.931 | 146 | 156.89× | 0.814 | 244 | 299.05× | 2.02e+05 | 2.16e+05 | 5.11 | 0.0159 | -| kkt_pglib_opf_case1354_pegase_k2_10 | 33811 | 97.4 | 1.09e+03 | 11.21× | 1.53 | 150 | 97.71× | 0.813 | 145 | 178.91× | 0.978 | 240 | 245.11× | 2.02e+05 | 2.2e+05 | 1.91 | 8.63 | -| kkt_pglib_opf_case1354_pegase_k2_20 | 33811 | 97.4 | 1.12e+03 | 11.53× | 1.55 | 151 | 96.87× | 0.825 | 148 | 178.98× | 0.958 | 241 | 251.59× | 2.02e+05 | 2.21e+05 | 13.9 | 0.148 | -| kkt_pglib_opf_case14_ieee_k2_1 | 344 | 7.76 | 4.38 | 0.56× | 0.222 | 1.59 | 7.17× | 0.215 | 1.58 | 7.36× | 0.719 | 2.76 | 3.84× | 2.02e+03 | 2.14e+03 | 3.23e-07 | 6.9e-13 | -| kkt_pglib_opf_case14_ieee_k2_10 | 344 | 7.47 | 5.09 | 0.68× | 0.295 | 1.63 | 5.52× | 0.233 | 2.09 | 8.98× | 1.26 | 3.89 | 3.09× | 2.02e+03 | 2.15e+03 | 9.14e-06 | 2.33e-14 | -| kkt_pglib_opf_case14_ieee_k2_15 | 344 | 7.46 | 2.54 | 0.34× | 0.206 | 2.41 | 11.71× | 0.235 | 1.82 | 7.74× | 0.65 | 2.36 | 3.63× | 2.02e+03 | 3.27e+03 | 2.4e-08 | 7.14e-09 | +| kkt_pglib_opf_case118_ieee_k2_1 | 3150 | 15.8 | 55.2 | 3.49× | 0.827 | 1.46 | 1.77× | 0.371 | 1.67 | 4.50× | 0.6 | 3.91 | 6.52× | 2.02e+04 | 2.1e+04 | 0.00442 | 3.23e-09 | +| kkt_pglib_opf_case118_ieee_k2_10 | 3150 | 16 | 55.4 | 3.47× | 0.812 | 1.37 | 1.69× | 0.503 | 1.36 | 2.71× | 0.55 | 4.29 | 7.80× | 2.02e+04 | 2.05e+04 | 0.0164 | 5.59e-09 | +| kkt_pglib_opf_case118_ieee_k2_20 | 3150 | 15.5 | 54.4 | 3.51× | 0.828 | 1.35 | 1.63× | 0.339 | 1.67 | 4.93× | 0.596 | 4.15 | 6.97× | 2.02e+04 | 2.05e+04 | 0.189 | 1.16e-08 | +| kkt_pglib_opf_case1354_pegase_k2_1 | 33811 | 97.7 | 1.01e+03 | 10.34× | 1.56 | 7.27 | 4.67× | 0.931 | 8.99 | 9.65× | 0.814 | 22.3 | 27.41× | 2.02e+05 | 2.16e+05 | 5.11 | 0.0348 | +| kkt_pglib_opf_case1354_pegase_k2_10 | 33811 | 97.4 | 1.07e+03 | 10.96× | 1.53 | 10.3 | 6.74× | 0.813 | 9.07 | 11.16× | 0.978 | 22.8 | 23.35× | 2.02e+05 | 2.2e+05 | 1.91 | 7.94 | +| kkt_pglib_opf_case1354_pegase_k2_20 | 33811 | 97.4 | 1.07e+03 | 11.03× | 1.55 | 11.2 | 7.18× | 0.825 | 11.2 | 13.63× | 0.958 | 22.8 | 23.82× | 2.02e+05 | 2.21e+05 | 13.9 | 0.216 | +| kkt_pglib_opf_case14_ieee_k2_1 | 344 | 7.76 | 4.49 | 0.58× | 0.222 | 0.713 | 3.21× | 0.215 | 0.882 | 4.10× | 0.719 | 2.16 | 3.01× | 2.02e+03 | 2.14e+03 | 3.23e-07 | 6.15e-13 | +| kkt_pglib_opf_case14_ieee_k2_10 | 344 | 7.47 | 5.04 | 0.68× | 0.295 | 0.594 | 2.01× | 0.233 | 0.755 | 3.24× | 1.26 | 1.79 | 1.42× | 2.02e+03 | 2.15e+03 | 9.14e-06 | 2.41e-14 | +| kkt_pglib_opf_case14_ieee_k2_15 | 344 | 7.46 | 2.68 | 0.36× | 0.206 | 0.966 | 4.70× | 0.235 | 0.858 | 3.65× | 0.65 | 2.31 | 3.55× | 2.02e+03 | 3.27e+03 | 2.4e-08 | 5.69e-09 | ## Uniform batch of 8, Cholesky @@ -219,4 +219,4 @@ Not run yet. ## Runs * cuDSS 0.8.0 on NVIDIA GeForce RTX 4080, repository 57e2ea9+dirty, 2026-10-02. -* SparseDirectSolver.jl 0.1.0 on NVIDIA GeForce RTX 4080, repository 73b93aa+dirty, 2026-10-02. +* SparseDirectSolver.jl 0.1.0 on NVIDIA GeForce RTX 4080, repository 9d280d0+dirty, 2026-10-02. diff --git a/bench/comparison/comparison.png b/bench/comparison/comparison.png index 4e15294ea02d252d5698096c33cafad3df0c36d0..5c35c731754e58ee080dcbf909d45aede5e4504a 100644 GIT binary patch literal 216924 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

g)tmMtsH#SiuY`y=Q4 z{+JC6(BDXvig$OBPl9V#)p-Bne(YwVFNrp!%=SXa1uy}%1SFwN>-XezY%-lycQ_kB z1wd%k{9{NSD~U70#4ItyW#-VOY)>i+DG_0IW};pgr(?Mt(3GG<@E&mII`!)>>uXDz zxHyUQj016QCzarWv%l2To_Mnb5t{ILz5zf<#B98QIt?3MC4Jx+^t!N<6=vYxvO&a; zWKU_gnDZzB5-BP}loYbqkmIB`0$t16SAo?zS$| zB#@x|1=hNTxnp%2G`JEV1zPCght!Pbb$x&D)SUH4j_Aml2>6>z7$k9R&f8{gg2ME9 z0GeLY7|He()Ka|$r<%tr9I}q9k0LL>*YcgXi zu436J9zB8;x|>+^UO3h6ePhn-B!9+$VW$XapFVkFGKFm0o{2_GdiwUVn7zDmHI87G zz*=jX8eb@78c7e$nC2)re0Dz=?%`-pgc!-fqMO#6bpz)MU! z4)#O661?Z)?c4Q1hU8n~?RT-E(*SIjaI#YvO%IxDO61d-RPt|@{J-^UNxf-gO4SxxfkQU5+?_d={(yrY(KEPoOEkzpLCZ!LL|$W@&3h#$xw7oZbwi<%0onQ z3c*kmVlIoJB&?-`SY}1K&3)glGdR_~B-pdvyh^$fpsn^O--}BjRie^!`!2raNj6e zMT71}zXU_x3;d3|8LQVIdR&i9g_B?ujW@b!tg_b0j1*`1th$HT+BdKR`O5BT=AyF){*MvS;jGYDyA4wfef z(5E~7O&R2oWXG3aExgR^#OyJ_3p!Is6G)O+E_z8PrM_HE;@*hx-i}aGpKS3@^=}iki6~1)|ve>>h?z*D2`5QuN2R29I!Qbm6e}=h2Gy0C#E(A z`YEevr`=-A2=NB2L4J997hbwhU-}k8OKAP4wczXu-kwC_?y1{wLI+2ZTgX5D6%Y|GWJCURpWTrck zH58hE*-j18wF^rjAUc*&N<;ZNj40-X{Wr=2Hr$cUZQ0T*&_5UzbT9e*ST*?8Q6 zJG$0tNXh-xUNX9S9&exY&ex$gUGlDp6Wc6YxX?F41`1)uq3nb5so-Gp@tAca^dvr+ zct55S9WjErP>y{3>eclCIzAG(^0(duW&ccGyBI8%M!?m9+w_*lzU9j~=g+{zLGy?r zUTcp%S6+xXQz+b)6-)sp7(;66@|^N9oC*0D@An;zSTni+>w@4EAOZA_-pE5VZn3sW zq{7jugw@A@R)nhx-3cGHhqhyYlSCq#&JPnFTqaZ ziT$F*+)Ahf$G)$-dnbu42odcu*lC@4)xtp{N|mS>+S4qdVuV52S%tTi>N1hOGw;|q zN)lNTrPQUdl7NzZCr-OGA#nahK(5(z3<4#})5Wm0EjF`~HHBpON{0Lp>#}#^e}(n~ z`{u=;zs)yq(Q&GR&2%D?Dcjw7cTaQxez-QI`3&pdxc~$htSq{ZSMRe6%G{YG`T6h} z90^MWHGFsXE$n9zNyEJPu3nuz6}IIZVtr!oixkI%+hPINSI}tIf9hNW`N9Vf_OZ?*_KsRKDY77Hb)^%kgVgU@t@LY{ zy;fJh`kE>Q?T=hYb9<{^=j!F@GtS$LXj;#D+r#3o9dlf}KQVGoHf&{d@b)S-Ir}J# zuO5Sl9qqray4+kJn=xa|iOeK}fajZ#H}j?l7xf{4;jj8Ad+H)e0=6OzSr1;sp8@${JPYM+C~xXiBcorB36xhfwUUoQqi1HXkjCeW%YnAV*eEQ)rrA2SNT__LgtmdZ*u($akLNjn~mr+BE=WojdnhaD+wvOR=+K?OfBd0C2c)|lyeH(QE@vc{LS z$ikkIWIS>0YQfmor*0=fk{_AyvJ3UJd;js}K23P?Otzi}5`<~&*>j@UCY-Az{x zz3|^dQY34cDkDooo}_240sNm4u^#QI^n^(zJgGa@jEd77A*?Ve z!zWR>${hq4EbIk5nbJ8@zdQIAGDnC^HCCG~mciIK!A3PI3EW3KBAmj)XQTjO6gigO zeJR=A=BrDtW}lnfxen3UMPwGu;HQ~9tXHjKF~xa-;)sV>zS=q<@Iq&O_*!1G6VUuU z1cUA+k|fKgfQwAmwctH(h3Cmx5tbZyMJ@4R+yHB5ntPXi$T>LVXgccfQBFW@J|#fE zPBbddoH?c6BQQsl*|$oydOMB9EgvwBMD8OeE2LidbN%Y<&h1l)WwY` zM6hzgS^pNx@!oJsE(1M59JB`$^jX!QQx$ID_w!a-cHa84wNY=BmKf@GOD~T*ms3Cj zQ9QvG+DMOPXQ!OFZ)Q#q_)OaSzy+!`*581Fkn~=rj93~Q<}dr-G$dV6)?Oi>E^DHhwOjqQUE@} z+ZL?Kvilnuv8ErPJ%&c?bb5QkU2EpLlQuoQ(AS z8IO}YQy=3ftwD=iHLD=mcmk&5uRgSg@_{Zu+a{c4;7qXR z$^nBf84LYUIPj|)8*BpH#+d@jJH;=mu)}cfrqU0kUz?KgD4i=Ju$7!oHnYu;A&Xr2 z#Jy|Nyg!fP)}=`Rm5OUSx~)gvb8%p4NemgGz@{;alw`Lt_+Gk$q9yE|q`$j|Mr>UHYW5obtN(2Y7Br!ZTr0PMqdCcsis z(V-|k`t-c5n2Yi~qu>JoZwYK}7zeI!EGkOEW6rP?*~0hl-^1oOgFG~Zj(3njBwP}u zi+4H3rD`KK2|qGIQhF{er3B)ap1J)tIZf`|(9o9epxH%Au%v|+XsxZq#=K)Iy+b^( zBQ8uDs+;?DKPNAXfK>`8@L+?zOTW_FwM)cZeOmNm3)cxuzC?On%SU;{ro(q87tSQN zm!1<`XzR9Zdqq*Xm5qw0xgwbc-f|0PO&Xl2&9tR2d@P}{)R>9utRP0^_c8udYh4SW zU1PerDKlkj(wwJ)@{(Z`W_|eF&)hup^y!_#5IOs(8jibz8KHakO=b8(R_BrBWD9PWF1QTemj| z(L#t(kKWE^FLTX`BQ{NRadBX;Qj&FJtQaGCS&AREb1-+2&a>K!KJ71<8-D!yQVg7#NP1m<=7$rZQHH@OG_lzA+E4? z1bFW z(;cxHrPD0{rEgLLzitplN#c=fWNa3s<#puJQXVRvr?jY<()`W!dMbZSMj_)yD#v$i zi^{z%wHvIycMX%q4xTw{mM#PO1gV$p$0J6NOcM+(XwgsU+-g)l6n?FwIo3#e`jK;c zgA&0Zx}+3bE+$eM*V`Ny7U zoHa7`+Od;(MXBOq{H&|4G~L605U>tS_Ez(VKjh!SafgQwr{cEgjbC@vOw0fL6FoeK z?o1|Hs7uIte=0A!S-;w42eb!K3>$&0QMe1JPEMRU^_eF&e;llFAIi5ODBK7aiq}a> z#nyMl+Xw;(DJ;b$inQh^M-m~9%U7y0C!c^G={r|O2YOBr8*D>!dWK)qc;Gr9JbMpaGvIfowBYonP z;(>f1PKl>sE0~$<2dtrJT!)6VKW{B-NqsvxZ4j!7H_idbT*Ye)r)EoQ09?+R%g*;C z*hi+cs!^by$j3+-X&%9j&;!}Tsi_2hvXj+`#Mvo=TQDGZk@7nxHr7%qPt(!a@kb@Z z!EAfP2J~pgMryqRLiEoBpQPKAo2~&CBmB1)bNhS{F%dQ7TD8gHB4T5=V>;E9)I~~w z{Du>SO(S_HWE*?pZsqbn_g&``+?vYY+6@~n;Aw!f#lk#$Hl8o+}96 zwkWZ_UaYCnQLN*Qa{f+BSv=EKXNaI{`N7*CrNU1J9&no3t9&B{ifU+A($sDb1FSNc?Ipyx}q zRzhk|&UXC>F!1u~7p9)5Q?26RyDuef@EPaiB$r6e34xhp1NSa6VQafO#koZm4AG~EO}526Q#@~`6hT+aTUeI5pv}@S zMVf3mh%P#^g0+Ex=FOCQtZVVj6>`XgP>&ZHK?KODTbr2JS3-5EtOHzBmLhEg0w0&K zn$7Y@rzFL@Rq@yOnp@4cO zFoUo$tJ;wI;`&S;?&+=UQ|jKhapUOGT3*=An`l6_f<&qf<5O6%;$Br$SbQfyaH24E z@gDGG^Q4?C{c;~M3R1Tx=8%>w_`e}3&dQ&TlaspP;+bz=2>jq zuz}p9CpSyVM_3?~TFQ7emi-bixX&~QInZ}@5grgl-30KE@Ib=sH(>Ryv@$>|%o7b+ zp+9lHp1O9GVqo*;ztB_p@HITCx;Fj#Rqn#0B+_e%)$jRn7KEL0=|Wv#r{rCp+*yz+ z;>+)Bt}?w6lnG~3Di%n=>r7Mn&Pg_4aurhGXhX5X$Av<%l8LZWZj|{@z9KjL$dTFv z`VjY-dBf=ghafR&0jBq@LiQ2fG$Cs>)CN#2QrkatfO!+YW$=X>vWmoK%06qcwAz41 zk_>vnLu4bY|NRK>u-EQ8XHK^Wf)ZIJ3cpw3RP|@+Fgt?r#fcP;0=htXT_7w7%S0%i%LPWZf z9Fbel#AcGva=>`lU7je~=YeD!((*xHkhju&5lprR>g z7e&XNe628nEXdGn_EeJeAOa{^z}3|CcP5XA+dxD@LR03a@Yc;}9b*Rd8|XL!u;B){ zij+{aRdXrSTD2Q_Oeq~O_1jz6mF^OL;DA|3$_*>tC&mWPp>Q~XExr}+1O|{JLP*?$ zHlLCEH|^}+q$b&UXZ|m*yBWc0q3y`>JwJ{~Pf6*CcOyfZhhPLpURiKQ!GyTlZwG2) zyQ^VzX7(R7sv%i@>ncD$53mu^l`j7hbVWsNq*O|I{whwV}V$R%kHm={nY=jkO`c4!!_0@ZC z3_^M@*)Thkj=EKEzSLJLf5TaidpK}AJ)KP{>7~84Z;JCc((ZeGX}XR0%X?f7$SEZT z6Ji7+_uiqYK@7cq1U#pqTI~pqlKI&+d|scy%bSIWd5aS`W%%&EWGV6XYlXkXD=dNq zMsOu(zMwdabqh%mO|!m`n~0fwX1cp`!wWT4s|m-P(IN({pzz3iSFJMr_*Lq;g8Yy@ z{BK+xQ4eCS9J5n)9V9C&%ghKDrjDaFz}{%lkK`Xs9`cuFG|o`fTdIvOH9@Wse7}b~ zeuvh%>*Qgwj>XjjK8mPPb`OSv*k}S~{k8ZA5HF=u@_Nu}ooPxHOJy zP*q>c$X#541z`^oL1Ig=R@HYd=hCQC*sZulcJQ&OlBMB(f z10Dn-zY5mT-`q2<37<`Hh<{!LwE2fWUDm8bmj7y>75c4v^Z5(Kf?%p9WYi-FA>v)4Zf0co-hGJUEu~v+gSw0_RaQ(B^4ik?x1jK>7kwbVJe6m zshr$#9YP@@Yupw80dyT(r6g$(%2tx>mTmb(PNBtEUTbFXHIY z^$&=wAN}=oMcZNAxKOqf2pK_OK$HSrTt+8x?J5lHk6y8uZ%!0>C2x%`gPjC_mc^t&oF(wejnMi-Iq?#&HHcn_tywuv%a;jLA41 zY&mEH=%^F}iaQKi_B$5<_lxqd$X)=C!2g@^4}ZDvS3|?bJ*63(hD=5_O5RQEPw&h# zPeBj61mj@!14uQo&XDQU36Aj6L8*DlKHH0*HZA?_wDKjX85w;6Wo|zwTIy1}X;Z)8 z)_?@xqFg`|0#;=o?~6dp$pitG*;!dqHUpYhqIyLqX|t<3qBq4bq6FBHxr5;O5M|Sm z_g#jx7T=}~t(e+H5AtDkA?FJtT0fx1nwx+J*_5^hb6Ws759 z#Z-O#Ir-_^Ljc0oKnN57SCE;TOpPlVicm4s6G45@ycLACP_z~P#=8Rhyrs5GMO+Pi zUU@f62oyB+&6k|Fvxif^iuiw+dlT>+?{)3FL)4?yN~oE5A~7se6;)%?Cqxo+RJDd0 zgHSUymQ;iwNW?-7RS~nAB8V!f7?L2B)Q*`XGN7i2mZ*^LcivADN!#_lyKC?L?e{y5 zb$st$E0X8A@BjZA&g(qSi?J`{C0DvX2T)|j`d&Syb#O@^cc22p$wM$xj--s~j~L+v zOk_Lm`mqvH3!?U6J%(c%`^cnkX}9UD!ps@=d$}jrRr8%ctWvD7oLlr!p`%j zumbhG3x`8fv}-WN*KYmpI{?FZuy6K_y4s#(>p=S}qNPSyGWw7xfKgVTGla(A!4*HIl~8Es-x;Wx|IwM~fox4d z$RF@sNVqj&v)o!?mrY@lNHZu!w2EsX6R-sA&5-+_9-8_dyg8S>V9`4^6$%_%C9dHY zzoe!)KQ>;t5Ch(;>7WBqn1Y-tsu?vGk+ddF8iakn!-Fuyf(ln6k-6f5zRcH+BttpC zk|e$cNYbx0Y4WL!2(#d%BSUUG;}ceSoEr^0jqf;s;}Yp;WMFfZl~HBJB*x*d3?zRg4=c|r>qo|Fx{QAz;Ff+k$Uoui7YXOPo8IRCUW!$yuwC;Yf= zNE|Mp=ks&lr4TG{6nD;k`M`k#5Vu;Jrn@1-muh<7zGa-VhJ#POy<_N}i(O;G7EmGt zW3m(kYp+PbBY6>=63T(@d_~ESL@yL|<>gmj>)N%eCjN8cCs9smRQ$oSUq9+QCA}-lMnUnu4%Q(B7vm&*N=k>$Rk0r3+)xGj_8yzW2k!o0XreQz%WS{ z&$m5;(4;M#0q{t!i6t~4lfT`N;oS2wpiz{oCbW}nl$P=%oPP#Uwmj2_CMA3ePa27`{?z#|96+S0q3wMGGRSw(T`BQLh!S+M$i*G0(AJWJPRG&XFe!v^q zB{X3d_CwG}UC^jHz({NMO=pR^KKqPKiQim3IB5w4`OyLiRH__fzWEbWw$5Gn{fzA$ zf2}|5(VYR%ht(o#|ExxwO#XPX64BC#Qtvn&GeYMI%2Bv1)I7o`l&3V1fZ1{a>>75< zul&Mj5|rKVi#VNlvz%s3+x0khaojoye*wfi*~TCVCd#$H{Y$wEQm(^UoH-o5gQmtH zeZW0@SyAHU24j1uZ{XQmcmyW@HdRn6A9(}mY?W{n?D_rco$7NRFf5J#v{er|s;#cs ziWk?6ik6VpIJ-ei*n;6!oEBq8S_uFR8w#Lmroro7aTwcO!ptdNH=H&CSMSYEWqNdr%AbMz@#PR(j{Yn zL5_thMpQnY`hfAYi9tFUdI+jCLUggfXh^SX-{KW0#cuX6646AtUdV#YT{rPGzg{sp{Q2kx7BEUe#?)nXsG&Qh61+Ll2=RgBD`u7n;}qah!#m z+`OFEZ9`mQ${GrfNj@{1sq}de6cDfj7!aGCz^jeGmjXk}%J-tRFbc?=TU~srH*H$Z zasg2-SA$dj5p$3_I5ANrg=S4X1T=>oC1*tSo9(K&IqjDX77zeSn4vc#u&FqJs)AE& zpWYi13Ipvlj7C~BO4@{Z#K#~AV0&N;caA`y@o@aC;stG6wblC->!8VlNr5fo+I zukXfP$o|CJ&L*WLVJigk=Qr13LRVsFK7KG`qZsVeQ6KCfsLtBzDP2fph(E-=RKUzurk;q{GC6Re4fn89x`K#ew@Td-C6n zZLF6W1>FA=K>C3Rw@TB1Z`@cDc)V(kRuN$qD%xZS*SOhX}fFI_~ z*L-rP!{|8*jN;yfON`ei&mK84>^{sz_n$06(;)WV02;P#B5@#dmuVjGw7_3f3niyc-tXVG!ofNs5 zTYu{x6-usaLB$LA*wwR8;Ai9wIrxF~EF1rFwX@F}zAd%5d?Pr4&S#AB7eJS(^~S{ax(p$MO*`)34(f? zcNP!Qoo~e)LvlcykQb#C8Ulak90v}5DA*2RRvKIEV{`vOu7SCXvg=Ii$CR00nO}4$ zk~T;?$X66sFA>=CNrRG=o0jCB5*9wi9aYEHw@%HPuNn2Rj3}sjx&x~ES=*(vSFUuV z|FmBFxz<9JJ&&rk*>^()emH>tgO@XmjtfmrUKp^Z8lwyfxH`&>gXlW9@6PC3 z6VR$;PCdlo8_(aa(V|7AkBj~T z8gz{SoeI^A)X<|3KdA|in2$n*$x@t7)2Fx2JCG$%#=_mZ~4A270tnkZ*K2FIwx%g71aL&IIu7jOyp6f zmBYNf%@DbyVz#q8GRd-RFp}CiJ+`^ty!@7ZD|c&61MOVJBm-{3;B~}LMK6dEtPfuG z-rLJ2MJjf3A%re`Mmo~GbDzB+5{L^7(6yFj>F*}Zh6g^DxC#ZvH(pd8&$o;5aYW!l zJ=B#-w$Q7<78QK@MPu+K!WA{O5m#T1;cEN}AzD@)`)Zpn+Np!>_}ZU^iekompOe zGXF(65BpHK9rn9LVt>7QZ9@|<`t>*e+HPB7w@*HCqq+ytVk+Goe$Zc^X%~j?V+>?c zUO)!5i7MYWo>_GV{sy0nF$Wl4S5kf%oS9}CrLX!^>yV~QnG)6-FoWj8+_-TWqXzsC zNep&UfW<5n5>NC09(UBk7Q7(hj)e0MCbJ@D{h>outsz&{V`1=S)c#OjMv>YB%jiXr z&bMxT-KaNqsNP6AS8&)R5x}@c{L}7ox`9Fj1Lff#&bx7Dd-d)OTQl^~p>HVRpv?gY zwMz#nUeQtNJ0c>j#>F3|G^U*VvOLGnCFxv2<<2RO2gapusACk@e|69khuiu6Rlf^S z!`s`t{~r%}F|MEaN(?9b!ILlPvbb>hY0(A3P#wVRQKN?NueeYz3iG_o2m~ql;D7e1 zTFFI)8{NDJKihoew0sFBx8mCTeC^sIL-_D6zOv|83YRaGCnNwDzz*)CF=&F2*p(9r z`am!jUzyns1(gOi|LTnY2&;S^z}X*yIeX|RSR71;U^U89-e#5sS{3tG3mfY?$?efV z_hj+2*a?ACG`+X!FQYtHo)@R&z=!$$_o;t*%-83hvCnaH?OAJnHJ`u*4QH9^+??IW z67q5RW<#Ev$0t;5Qq1Pd?j=3vHTkY%r%s>M_i4Dka&o1JI^S*Fuy>=kW2+N3C4V_x zrq}#Rza%!j(7y4p7>}K!vR_@AF>Q@=#_HBgp)8fgeOru5_oz z)+_?-4s=fT9KP{Y@TNt1LygIG#tyA(4g3fQ(&7orG8(S~ssyE{G%nx> zYf+ScXuA@|Cyd1s6erwhzyrvPm`ZgA^zXTh2gQg0rc&okODI43Ft-k?=jc%yL{Uv2 zYIXreQSXR4Uup!VVi+}oV_cvx1iU%wO1L2=F{UM60JpqFwp&*l_nYb_=V<7^!m|lP zOhm>f|M>FnkM9R|z#x#~0C!H-Z~!KgIP0C#s)~Q-AJCO|WW)v=M@GfaP2vxXAKC}{ zuT;Tc#I!&v7|z~u(v&9qy(dqfQZWDZql8?`w3ce`NTEkbN#&!oo^0zf~m&< zkDp=)PRq{iW2CjY&?6Jb4HXIe9-e{2sYbz0;F9=#c+u?3!NgQwLt_m3c)<+B+J)M! ziff0;tqybOdZ&04iNgm&`ywS^{4xgBHvCDlmdvghoZ=n-vc)@&Cerf|^hfb#2?qFq zu_dHk*|*<@P)a|j(K_*mOrk(qy3l`p2BP%W@EU#NOB3U%j=-7+;-UnNCiD^{Q6^&_ zL;W@0KXne@5abNKc7*71`ZAvV`UM^zsQ=33(t!&^5EU#;T?-R0a5yw#K6!VVJn#)C z58^BIEzh@S(_l+)u3gawc#efjWBZ1`L~O(jdVwY5J+H7dcm6pE~l@PcioLpZINjZOdkm+|?f zPLzqRlLt@3-@mwTrup8rL!jNC$wfdK72w%Th!w8XHJe|eynw?4n#81<{JLx~!dqLv zedAhulLM(t)fhhLV?lCZICcS@Jn#wg6|N6G&(HDkU*WVbCZ0K`7l%@;8;+`!)MA-J z#XNhYmVYTd}U)8jb&uikUe(g%FSv2 z;#_0I>bewaKtShBZI%rdM;9^zdjEgtcXYt%XZ|`#>_yl&ho49p0|zJOagq;_ar)*R zJ2C(uG>>CIf#%wilLvK*iwv!(G1CJaT6MA;u%!b<1(2ag&%W_1<+{fcm75_i_6Z)u zv1iWEs>m#-U8tojTy5REwzLJttCc5U1LFXnX1*+H+Q0itXmcU`k+mygo9G)~3D!Jh zari)K+Av4NA`H-ItY|f*Q3HPVW3m@zt`lGzAqKOsF}TxmBJtmhv0fH{yRb?3`-&CE ze}T~q!Cc-{7e`Rrg#3JKf^q5K<_HO8I-I=j?5&`|D>M#(cZxxWRKtG#e0AK@5M{}E z4!G$d{pU<|?>OA83{4ykkRYofiL=R%uf2%pBc%ip!h^a{r7A<0<7dtUX5eeOHb15! z)B&#Vxs0VIAKG3T$RpRlL?D-Zckoy$tG`ml)|Mnes3Pr3fD`NlHg)vqs}}D7X-tBG zwCRGC2WexEJ<3gS7*!elDZhVk=Csf>@*ESP;>d z!zy<$ZI|v>fETsIl~XBW*y1%iZipjvm8Hfh1~ebOH+WT5^J3Oun_u#1Yw5l!pbi*$ zc@$gF<81xT2@Fu53{Y|}eN40ecP(g;Tm;H4`uX?YP_L>g#&JVxM*PRvJy)?S6naNH$(Z2VI9=Sb2ONbqu*; z{yHtW?1S*nprH5qcm6S7bdEWEBjXgXDp;PU4}qghW)Vx*PWYDpq0FGNz)&rsUhjP+ zNlrrM!5|n>r}icBGynT@mdq99#^&6?^f;9uLEkXu#!po-O_ds3q7hh0Ba#k( zgMbJ!kPaEt|4NnS7mdI85uop;J=jU@BcD0`E_?n40sKipo z@7jf`4Hh+(-*nc4`j5vcG=P%abGE;~)^ngaJ4P3L0eT_CNm)Gpb+vJZ{3y*d#i1$c znKx`ZWNG46w0Cz;hNb}RkyU~$Ur3=0RILHKz56exZDVA2Orfz^h3ajX#b5rRWJm*GzfM zI@&25cPSR3We|65{hp4cRHdqp7=Pof88c=OD*eR|gw!vNEb)};j{%)zJa4|~xB#qxQU_4sl0sQoaaF%1s+?z@s6!TcpQv+$T?gaZ%iAyCOI`D0#rr*M~0 z^x#MHK*ath^I-@uCQ{`w?oDJGdRfjSrxRH(mC$)cbN?K^iqp_1Vwb8+&JMwaAcn~?X|WG$u?FG&Jh{t?b{syLWP_C)aw7b!GhF3L6> z;R?mtFtp5^`cFas$+UbR#$ITa-olu39qfKQWpr(DfKYsaPJxB@pDuz3N4zMM-ER|t zII^_rn`KX@T7s7TJr1+*M6p~Mul~qSRKOx1T=1{LFGLEh0N@+JAQ*tf@Met{X}rcr z!-+_AAc8*4|Cuaz2ZOMm|qst$Pii-l;c-&b$_M{(_P^d zcj;ZY$md|Pz@rM_p3(7bpCVO0JIlWj@n>J=V zC9&6`w1)q_u6~h2te}OD^DCCgUD2QDsxWCSCmX7|+-t-ICDC_)InV`LmabmCK#QqJ zHOCD~-BU42XvQG(OR2$$d%mVARMMf`PTqD;jy*())6!Ty5_~Lz)AH`}NL6u+AzZ zyIi7U0IkKKMk_=;QQ2$Xx)SVd)<O(4c}FfNk;xQ|8rLv$lSbCR9eh zMg@eO;#_k$m?+e6x^K`!M~U>pXGcal7sej65(~<>(P}M&v3nNVU%s?Nq#!42>&sT| z@?9zf6{JC>vSUim*V#kUcD}9o-=~eQ0Y>nkd#ld#svM zci5V&YL`zkkLj9zx@aXMY(lLtLS$>=DZR_1E>y87#6OXBVTa zMOB(d0n5`^-~ts&Lv@|-P9(E_-HqRWUx_y;)14;K_%Bv%Ik6$CXG#khXK!WhsFG9S zCq(I#0kmxNaE6ad9DbKx8W>b)_!Z@h7#fI(N-bv%o)#-`UaenbOhtr0aeyB9^%z|V z48KChN!Km!cf+?}?)whnp^y_$sy8L}2teoq5MpY%J6fx+Ei$OLgejxv;7` z@PJ1!xY;^e{J2e)Cy;(~MBK;VVkv79RdjY#>Nc0A5-ULHfrH+rsH9C6uPfJJ-H3 z+F3`_NIODUz`ELkcY@hoBElMrf%Bh)$)$I(*IrvER|u8n#E@_&jvshU$T$O*QqXqOp&d7BiA zrlZibMkO7N6G#iZQols0Qf}{ISBdUP3=jj#w{J`1h|P2wzmlA~kXd0uFtNWoQgv}! zK^GIS_Ot#%1l4hTv}SOFsA)IVAdqj?DnZl(+(Rv|=7o&9`h7yAkB^My@U!|9dl#Dd zCNd7IRH;2G5e9Q|Oyb8JOr_Q#VHCy*$4j$Z1*qlA%g2F5$PpL03zPyr!UlfK6g5jt zD=Psn?;ri}T<_7^OR8;h@wb1YB5aIlt4QLYp|*a-+4Xf4KIehyPn${~1XL96)T&jL zM8j%$dpggEYxS}**XxpiVZp1ypQupe^~}aupA;5Fr&vJCw5X|B6`%vcgnkV*_Ctn{ z53sG6&7O(b#kD1hoQ#jVQGh;nWaLYSCVMG4X0WwwvhB++zf6kMZg8Qt@s-#{rA?Z! zEacxwsY};j-xl~)R1<7kmFKa4VV~<@SoAs&fIL~4YyG?$t^Hy=pvFD>{R<+U{<$?Sw#Z!Uw zw>TpQs7>0wM#!cD{hE(e#tbAo-icAoBecyn4VD` zjs@BilbO|4Q2u-{ST6oC-oWI0U?;Pw{u2_f-dycZX*Ou#$3*|EK7lrr7-v!LK{orHwy?vf^9|@_}y;Sg+cq#fdk0Dt&Z<1F9@%S z=tE>5SV4S7WicGm={6+&Cu9)Jh-*Uu6EMjRT?zOtLwyjPJD2tbkQ_ud!i@Sc25d0g zQaIi;m3V}cXSF*3oC;{}%Ask?VShlKy@_?{R{koG^p>4Fhw>&dJYCA%EAu|j=`}q{ z&O-RdibnT>l2Hd)J|h@= zT?cbUajN(ygoCYBRFXeRb^mrTKr)I<-W>xJ)EQBXbH_k+{&C=LeB}K4?i|XDMMn9$ zG>l=&!2RL6Veft9>eZ?$TQSOHeu;3Fy9b|B7N9U@$oJv{(q|~K@JrWCC9FNUpZk2Y zhHbzHayui13`SrTA@w(P*)my@)4q_IedB}4fO0)%O?*1&oEFpF!Ke;eO?RdSUhwne zd4z5Pj>rXeuCV=;)15Ek7$w{dSQg3{qBWP&cL@lCdP;& z<-~_-Ac20P59gYHvYBgWJ=MYgFTE$7&q!lT-w|;-!W5F3lwxSXP>8mecxSFT=Mpc2 z(V5I;7+)Y#LCU_CfNzT0S>J5_ic8AqpOZESdo;PvTC%$+RcW&+g1cjAgLw=b6y`|U zWH6W3UnU?s&+FwgtUJRAKLUJb#Y@=XsIj6>?gt;N;SDZf!4^CaYDb`ddTLB_-s!rq zO7mcdW!z9=hTufEl+RW43bn+nR~h0!3mHL{@5YZJV)FDE^pLx#l) z)}BEvxJW#ySKMXVb~%LT}6u{7D%X!Z2fFb~b*E#9a&SkaGTrI&A(gax@@)P{P80!#6?Oartmnm_kwos;PwD z$Z?kriLo_pA%#U(Y`$f|^VVC^1_*`Xd1hjGv2NC8_@#! zWzs|NAmJ_6QaL%fzXp}uUDgrYAVHHg#l0t}qE4b;F0dG8O^e0bgKr@el;o*+9c@2t zfd;iK9)fzW?~7#sI(_c8r_{Z=?g)OBx?sMt0C+8TlH4m>9k9vrMq!w=meBldjoP*6 z(#dOOH*zaeu`5~Z+u zHGO;q++-psa&bD#*~UxJaE2X?WNEQmIrmwo8=p}hz%gIAaG@6Yyji*F7{(D?Rl+v{ zBs^+8z@!C5!(Gon)~5(Y)^($`;flG@oZ!ezvW(T%H1YxOOrv8ot-#^*)y1*$inbvoAd0Sbs0vR~v_OWdH{Xo%Vr zxc?9T+sFskkN1ffGm}%KMWu2ipp;+{xPTE@E`xYWkb55TT(UUGGGe3U?Laxl9}V5S z*>tF{+|RX*Z7?g;w18dPT~eZoS#eg@(9-ftW;klU;hjzh2C_Vgr@%BEM78zCw%2&< zHYq=tjH*A1ICwBLD>Jh{o|Mxz8<8V_>&p3({WeP}9g(lv%&Y!?s<5Fv9s0^4H`h;P$2c8 zTf93{r7~y-SBxhW+qWe!fFEl=lzK(!{seU(J<@tabNEu|c|>`LZNe`o0wT^6mT)uT zw-vq=3r>PnHK}Chx6gaTh%}UDIvI&5|AYqhWta&~jx(2nCA!|KA}cPmUXsgZ3$wxi|% zq}a%tp|#g0&O^k_fQut)GO42I;9p`1Mj_E1goQ~lUHiZD6oeS$R;urtS@{d7hR`+X z241DV)ViK;>k=yY41z|;zMsPGQoq0zls~J&abA{1_IHCyX^D) z;kWFJy$(blK00Yltu>Q<886d@de>#(FFB|hZ@MQqVlu*3>x5@80d0}_N+6^XhU9#Y zqe)5Cd;pTzPWaWIpDZr{Iy+1u@S`OF^CwBP8CY6{aJJ9}VlM^`VcB^e_&E_XASVxb zT{79}P7-ZW3p1UMCr)h2Ac~?v1dmk#?Es+OW<%**~8eFeOflfGCPmwZ$NYXIBHA8pBVqZRnzr zSW>kCb)wk8W=NPRpVRnBj39ZYoLq9B^fxe)ix>aTe=CKiNF?$(?S|pYcJ0t9tzcjv zr^bj6l+y>ot7eMwUDYBfqEKUIVNMbDvL>-kGni?W3R> zt>z*h7Yqdidh+v~hva3WA`&+c49Qr^wZObtbv6NlKtkbe(Wr)sr;Gr5r*!J)IECw?ubX}w9tn!@$jv8?*V-U}tJ>l4-@x)ZK_|#&;idl4pk|Y(JJ?3&Z(1}^R>+;opVay3q z19L|%=F~3?f3|veeD?(#cyB*7f39(4 z6p|VIX9%kZXjc4^7NO$=E)kximsiu)!K9hny>H*^!#l* zzo&(X_kqLdv;%tfN@+tlRkm?I-Iwe^B~Y?eRIaz*vufHFI?OG?VpBg z^*{Gi#L?^*O1TC+|3m&@?+cEroQyaq#FdQY$*HMFWgh_`Nw@j~W-pMj!5}*F+Q5oJ zP@}Ul+AnDiBQniI1a}}YAkYg_i+LxG5we&-(9zfjCfj_}15iZ11{h>U)P_D!EqSg_ zOLzugx!U4O5uaTAED_5^FG4Uk93C|&cEXmAY8A@JU^(LP1CCK2;%t#m+ZJ_^2A9jYz6NkH z{8Q~(WIS{nlPeXwzVYQ=NOn$YV*pM%G&bQ*q-L;RumCOEkh#AxzBlHzM%2^ig;kCR zdSpXtxFZ%$~@6Ne;m=(J{0)C0n2RPK9V>F<9xI_WUe=tgRVMqP=?OWApqU%&a# z0E3+{IcA2=Zyb+5ED>%lg>}^EqW~KIiNjstD!9=AJn0fYd@oWQCl4?^A@GW!;3n!d zvvYe>5_1Bm53xy(f=&1#Rl(Q;jH>}`A~chwLDw#q86_Ap%B~K&)Hv4DF*Z6u;X8$q zrQHmpOjkJJq^cS{M4vbrI)=U;MG{C5wir(iyz=U+8n&P=N#g-m`QXd18PKRqGdGFO zqhJyPi8oy_@E}*mdEi-(n`htxPXMnVeEJ0)=JP3--%Gwij~HC)~eQmBQ@B zxoS_VC{rtLSGW^tn|XtZXdS=I+zYcFZ{B>{??LK)&l43VM|@rTi&x6Du3bHTt5a%? zu|aM_erPnW!rIpkdd%LqqUPj_udf;YN!&{%)|cFQ`@JT`J%@Mw+S92`_~-J6+ld zO^hZ^oM?(#!iyryKv!X=0O^N4OpH4-1`wfOfFc!q!1T<~)TRBlL>?#RTf9(dSm2N{ zP4s_&_{FQy;^oVuStGvC+-eKuiW5MPWX2p*xzU7%I+l{WM3h~ZkpAR5{%Y4cORawu zu!4&wxD80$TfXCCzxX1Za?21isEW*8TopTk(}Xp8Z&0s`-+xgTb%|Wo05CuwDq=mC zdszc1PME;*D4%5j+~&on(l>XnW3MVxD+}ay!Tf3=6EeB^Bt3uhzE`7)k)HtH=pR8P zYMXr~8FT~T1e}@bsIjrvCpHD0O22Y&QXqE>2EPo8NYctO=>N#t2$|A+mK-|N8g`mZ zv0@H6H=4ojd4Ke^wp!J3REuc{#qn2IHxv164nLQ>iY=SM>wL{mm~B#4WPrjjN^c0^ z;h*hmH04OS)7wCI9s(lI_&xRJ&6uNdAhX<@OK;T;(_DIP3U$fHS9F}yc1w5by8(s( zFBS)4QNz(OdGK&HR^1DCcR!B+@^IE}xtER8VkiB3pZ?7yPPu+qNq zcIDscyPhc?um{~zMG%rkD@xAmwuOlczG2j}Kr_{O<{_;qS*^kF%pHv4`!hgxmr_WR z0kN5g#hM;~<;|Qq)1C5Cp_N;2nOu6@fhrz&t#F0(X=v=U2nPD%+P!?(`f^X(}=6Y^qAzmXiT9G=KN6Kc`v(QC`V?}kybdL+p z;~50+L6oq43<6J*SoP>jQ`6CA58t~IM>ps`axKNnf{d@@23dIc z-byfE0VeGHYKb$zt&Qd_&#Aixifg;Kq86(n%@&N9ZZ4SNW?K-jX*NwLO^dE zJp@)NM&XWnh|EKP&)|b}q3)n~k*g8EB8$10qv`HNDl=pQuucasE}6sF5A$W@LZnBk ztdtc)*FYUBC-taUn@yVhlXDF#TmOd?6qCEb*gH|v*|{2N%UGa496wDZGuuLyd1&`K3|km&QZ_;bmR?*e4XWIQ3%hMe{Q6T+*fvi@{iI>Hw%k0suOkU%M5HP9Y+U^QHpD_5@yb>VVoX_U4lQ=qBf;?TOu zju5yj7+iBMYgJUlJMj&q29kRpZB7<`5=IN?uSg(TA-MynpFF?2CkqLK;epe6Fs(5& zmp#yD(Zco{v^bR9%g2yVjQ>MS;}j2}lOIg~Jrm4Dj(xJd6P4r{s>dJ!N+e2i&S+S+ z5?Seyvd^8f^)*R?#p1I5qlR71EYA~?F3^CMB>*^Ds4e}RFyLo$&Lq%{Q@&`?B9n_7 z1ha?CdvF|{3niXup9IF#SISOoNRW#tE5ff6_;|Nm^1@FV76mb;nB^w=fN{bZz!V=m zeq4*28q&sp-2H2<^8})@#ikwZgUvdxiKO-CRBtv_-3#@Eied2&zy91oNm=|t@Oj3Q zJ%OgEMZAa}NU4L+Z5%s$whZ#mUfVYUE+NU&ZZ1*K;yuTX9jlEC7cO1|-jS6MePRwa ztCF88po%R+Ge{j5OOh>eqKO-Lw{pKRXh?mc^$AT9=8{Vk~RYp z_l?_}ks%s8GA_tbMB5*)U9)HU3i%3tykhwtc)m`YGFSnPuv}F&-KRlxyA9nu@s6NK zuqG54Nx=3B22$28cq%|5r7W!pX?lM;;#6GYoI!Nac4RiBHIKS@v7%*iAEGUfqFnLf z#ZfW1FdyHoTtlQfg4TrgDLEr!4sT*4u{1w9(xz#bpLxPDC{TL7s7C=JLb}%8C2cLc ztd_Rdf(gdNwcmbyMA6z}DWP!>Gi5#_P-z#sW%Oqh=_O~o%w&P{0FFK7I|YRiO;Cylg_RIcJMY0Z#?6)yO2D=HC zrL@_HC`bF0a`UD;D#c+P^7|*Qp)Dg{pq3pwcJRm7Z`dFxqe_)3>Kh0@$HgLnOj(Tl zOMmRk(2k!BX9-Y#7$O~Yqza|9CWRuzz$l-X>()1u&DC!tjs%**C-BuTXF& zJyQbjMmHmB9K{tG`~vS>T@{ht+F}7)&E~2owZRLg#N@oFaO5u}`Q*0N*?xQwZa2yw zcL89t)Z)Wd6j1|$A{ku6ODAf3V~j-BfcnY$w_+SkcFZ3?J{!1KZ?Y2_u3-4;hTJN| z5#C!fGC(kMp|@WzHWFY%8&Eiod}Stp)tAI7knv^;O6F*Qh_5l*u@0NFBkM?&{QiJ772EI8Mk#kwrOET{cVXSu^^D=Cd6hi@9X#P>zdL2Oq({%sn_;$ zM&?h&vo|_1u`GX?_QKI~TOt7K*=3aDkM3OL1dBurz)gD6Q6r1e!{U8nZPVljWn6;^ z$KVevR@VV->=L8{Hc*Q+$w|Z%qI~)CJNiW~B78LU=-4}?Qa%@e=7eu|!q5;d!U^*_ z9lSf9T3u_u9sV&BK(>s)am1o=$%+;8I@T1SE8_d_s~4PT>c~NGDvYkJ+Cob0TH_!} zXhA!#4qQxVJ}Hab2vBj|!ef$92YKiaPyw}Y9E%jrCNx`e(VKrLDQ4gqvq_<26XKAZ z+x>C}qKnoa_C9bRA#AIk4mA{CHn4dF~w6-!SX?&-L^mq&#T0rKaI?-tQmn#iYICx%)=c~f>W#U*`Pe9&JYDRSZ*-4 zZ=ZT5SPdjryj?PlKo>(~P*r0AasI^W3zw}fu3jjC3ywUq;)YD$sm&iee0a1blNBy~ zYI^!?^Mtm*1*KcIY$^6;Z=gS*$o>X_t`K>$UdLaAE>z2|4(% zvfS_7xue6VDOP4wbilH0}-^*A9 z!dy`Pk?#p5itW9s0xQ!)^2IwMN}~zM|93>Jkv+Hf&@cp05E{r@kaFg@R8|680Ki1N z(h@P=9;d;@wgp3_lChve!%hv~E6kHoh8T%-RGNU&*+7Ic!L;Tc2+qKBXPz<4v)ey9 zDFZ2kI}|yO-XvbA2#DD{w{!=9>C=bWGUXMnoO&oCv%m@Ma6l81_gN{8WPqs?uGy`1 z2x|=svJ8>-i@@%<{M2G=KLfkMP+Cxi_%s2t`&J9UNRO%14i_j5wYY8^-u*Lj9=MT5 zBEE%c9n6t+VE&`29bUn_9a?5c$ksx|k+u&s4Q$lThCbxU92iMiaP#CFGL0Gp)og$G zdC=lUh@Jy-DWm49P7HorZSB+HEjqD-gDb;|A`s^j-c7FGz8%mBsDK#vM_6No5d*YE zOc<^c(S7+$tbp3Awwr}sdBHv~OzS^zg%U}5Llt2zcqFIAxf?R1CP@e+ zipPQjV}Dc#EaDi*&CNK8J276}Cl6O7N5K@Cnhk)?`H^O%MNoPNK5weyAC=0+BUhX>cM`i1dMo*~+q17An|i zU5eh;^S5{3zJY`IBdS&bn0ob^-+n_>|AxueulwQ@XAq3p9RORr-HU%voliusPAw5c z)nmQW84KUPCh8(>B{rSlvDE9k81#{vcN3lq&TCtp*B`lZE0CT7LyCS#p3D*nl;ORc zn5eM;6I(GpEEUXL;iLRpA)5v!kbG`=d@PAY3$>1#fR3J?Ws&)UDnRUIiS|a`StAt? z+&Qk>t|vetS|4M9tP}xC7Yql5K1p7C#Jq}VWVv+kWF(DO0EAH+3kM)3E)I^EFYrE{ zaZ^U%=~NKXT_a!WJM~r#BA9Rd8amY7L?6qsA4Fxz&safgPm3zBzQwxu-;;EF|DW0 zN%TWXfBI{bSiYIlgf?h*1AQyO$eP%WSc!7R887JpuGMu*clZf(0yE7y_H69N?SC1^KM>HaCg4nj-gCx8i5Mo%`=2@%vu@R&G+$sj0v5o@)k zv0}F^Ahi(@5&b2=fq<+1akeu`fhjxTTuseKUD<}Bn$FV7&&EQ!EuTU(?K(^6qfqB4 zSZm%lRP!do=0K-A6K`nXmNDbTxiA1d5-P<|b5>2a%qUPf7sZ1v&XBE=p`*Lfk@!iJ8B7`KjHKPYR}XaZCJ<|A=Ro z3}@>i@(h}si~%Sg7p@oft`eAVE4qhE2)452u{bifDuMkHpQtk=XEyHs@cj4Ng&%DE zvVed$f?g)l$_*^)y@p%kC6%q8T* zE#1eFXTYprbEHaJ1EDyLc3*o^kxsCx*EP_-b?tif)XMK8*9Ku6t$#w^v-PX>+s_@| zdBE^U3^M)yv3O)t?2Dk-rFVk{4csv&)obGa1E|LIO8^I=AuaU=lIjf4qR!ISX^?p! zBM(GGsQYo_tRV+O#e9aWr4eCV+?zbr!o|&tpQW{WUXK}qa|FW=fK2TsrktN#h0=aK z5D@@(b@lk9&Ghu+&nN|Dg^#L_As17ka*~pX7;{OkV?2HljDR~OBBcE1G>FY8_i9{Y zlSz$7u3cM0b{Q~qsK2>YM`lBsK5E2U3Nm^{Y+C+|A!ytW1Bwz30vZnBG*)!sfqfd> zn88R6kc28cNavCJ9ls{`_no;eBJDdtsT_ig4g5K@Yi;7CYiNSm)MfbdoF|eoQMUpC z`oe%SaEY(>>}mYCG2y~suIKbc%!E<@GAe+z-L}APC@Abhw-d+()B$C`V#z*)#I`NQ z?|j7%H*|yCNp7%~pY3|{9O&2065tW{BA|R?N2_K}uEiYhMP6J`IS)Sl21t);`Av#h z6*_)NgYfUuW(zs)mh9HzdC`{ue|XUzK*1)cGqGvbvgLSZBA+}i2S}X2gu&Z`Hcg9-+uqxPtUmFmV@SV$-na5QiIx+dA zLJy&Igu9{EPG%m5pWbW9m?WB@YYkCMQRXuFZpx6d_wxMj2Vn4+rYl$?{l9vaIit#KcdPxKJW;ai!%3T z^gd3QjEHzh3CtnTreVzRc#_W~_dQnKV8aLX<{P4(~(Ma~%lM z6bH_U+Ln%Gd}KeLXG^u=DwdIo9n;+Z+CL}t30jqujAzD(NOZbjNrI6JbW31CaNVAwkgbm!X*wZUQ`vFn*8^s|6YwuEz~_SS!L_7`Y(xqE zR0}|*SmwYnWSwOIt~~)d@f_m{6aBhPNNXwSImYg?gu%6HekZiq%&-O`k`ObCoTy<> zrG@y?4lFWkgYR|($-SKoOpNLnwRlkE(tt6x7@;DEX9bmlV$9(p3-qWLHno-^p&YRV zYSBDyG+GV|$sc*G#aoj;k~Wbq{v4gB@HuVy`~CMY5L9U|X$7^T73r2_6GKi{prWD| zBaq8uA#r%RsE>$+OfJ*js@mchW%vO&P9qONxY8aXnE%&*`Q;=i;$)~2@+}1A*r9DA?ifmn-&(@hV|C*dPRs!9=PbP$sf8cRnS3 zXpe1TYOCZVwaa*bSM4eW4OkKtH5i*BK8Z^?6!)YUszP<0Vhe-OiZ)48$msNhv{VwL zr|}d-okTW5?-Iq7#m?^$1Ic$$HA)sh$C3zrfwrl{8*e!BSZJq!;De-=m(CH=E3jU$ zEdMZ70D{1=00CJw9yMb&iWCRFCLysmXl6|~=iFLKbc%`UaI#}L3nwusKn2!@o>E{F z#?WN-(zdogk}~)xj3(&@nZB18S)auyT-{(uyo60HMIp4S_G1jm@B9>Xih@neCHNeB zbm=k_T>%xb%+|Cm+8lm^QLWw)$K)&~5QmQQ@-$%sdz7GDJ^@5*v8))w@L-P<&ppsD zz-5;Uue%<{{{3#sE!L_eh#%KQV=%M(*5&>0aQ`&7f)OjcO_FYSsqS*1WBh=LF_XrR z;G5BjvWX`dh{RwcbWt;=o&hjivqq$Er2)1XpGvcAq@6o=?`i-A+LQ(XHU}n=h_e?i zUv@O9Iw284WweLs{GPjlznq_|KiNav*=qv!+1RBb?zg?sUa2kI@xBW-OjeT1aD$F}1Gcbh?Yj#86h z+i~{ipQCt{Wk)-bji9swI@s)v>JcydX@QjSf^CQ9orowFO6QZ_j z|9*L(@bMWpYqItpiLUZ~* z@*Dr(eZ9u?r3{^Dsq0)ihW-zEUfLnXxF;BU%{e%#h?L!9N1s@JU@?b*y~+#I&@2ul zKma_H@BqsvP)SpoL#?KUj!83E1OY27SFPKJVSn?hK zZ+$@lBhZPXaroJz-cYcn*mC?}LsfvcM>Wqt6VkA)pPNpL)@UatE|n0C3Y~M`43;u8 zjasa{2d1NfR{aPpfnbF(+G&FA6Xq8hh~Q^u88~!kG$%J3*AzAWzL^byoP_AHRp;Tu zRQLcI7!zH|fo-WgRHEP?V^!^);bu|ueD~>YU+_7^TxT|PSRTP>DVTy{H=P*y!HWw+C+th)OosM=Z>ZU0Zg#YDHjs-}0;}U;_9}j`YzL*DR1tsa(n;9e zb34Inie;6sx(%0U@EY{zsb@sc=4)I}OFKrD!>pjV*qKa%$%g=$EhpYdh7B?RUo--5 z00d`gbwuXX2$t+Yg9WFEJT`zo05w3_fP|AyuZ3&B&Ae~EsfsG@Itvpw0-~6rj{dj57$wXRYUAg^dI4PNM5O1kg>L6V z>3G6bP!SGqLd>iu42VuLSoJ;ynM@TWVE5tQf2m7zB(1zL4o#iPodQ3TC17&$S1Ko| z9=ZLZ>f#s@gs7ytDKL~T1hy=}uN7RsckicXz)!(+5f5rpK@70U>9KQGcb_+2qFF@r z1zhTm)7kN9_Ye8=h*ZI{*W|@r1mU5S=dX$+Qk-EXg^m)&>jp-25^5LpNe#ScPOt^q z#ZL@4KEJH$V(UI?NeVRMM)71u0Su@_5@S~cNc|cdaYXsYff00CRW7WQg2!Ie)`DddQyI-Sj825abepm2=|>JemW6|Ik!Q?#6;btdw@1A2ew6 z=riPUu|=gO<_(MMPg0f1G;P1u3Tn(u#!aU#ZPu)rn7X2Z(mv3oQM0*aF%MUPJOZ>v z?$cOQiDw1GE4mD|s&t3iunm5aftSKsnB;^BX7MtUruGEUlW&b-txkR16bCD=gFl}_ z%cFs$q_Tw9iKW15!HQsyvZKUBrY#;TG`V;J|5KX&6i*=74;c`B)8Y$&eOr9u7t()0 zM(vLvm{>?jd=%8O6Ion#{{(6hws3g<2*uv7IAN+yCJ6DngtTK3bM&ZDXy3d!7fdyz z$2NwADeeZ zM*>gnMxw0wmC9a?X=z=9kq-y@%Zg{``SDPq)L_bXHPZ<=XG##T2gof)0O45}=n4&w z6&b~;ikGYXKA`E`Ewq*B4mNFn`PJ8yQ5l~|@8>P4uJi&zT4Q5NSSPi$x~#$ePE&ZE zJWmS0YbQLvnR399YMMVX4`s&$(*rA4sg*lq5=Ng8+vL{euJ;AjQmPSFqRh=plq|U( zoLL%2Na^${E}R-jeGC*KOTpNMUarCC6Gl6W#Fdw*jBqXdi^1Qq=;%G8lRj`_CMw+% zv0=-W5(oNpW=b0@m4CAqEwao^@M`h{nB&Pn4rECvh<*ovj&Ei&N;6o&Yc=fzNtj{_ z50P?QJVeROgkaO)aPfsnCNtLoIdP-5;0wt=3Lyl-xXD2`)=ZPpE6-l-p|*7Zr@_{6 zqRCdZtO?eL5$iE-X9xpwZkVuVaTPVC0Qcr`55%(yHe^NS&|dtDlJ<-CO*7?l0a{hC zOs?|(&qHL8n)?q0_OIX|4cdcuG2d!2uAlEPl@?tMlGbq?zm>bFquXui4#KejhG?l& zY9^XELJD0k);^KRg;_;;ur2RZ8g#gnu*PxWuwn#c(m`dIF~Fzb)b&#;#xAYVUD{<= z_?xFW-m*jG;u8y|Or5IrM8@Hkj)4CW&#!1UlUbSmu!z?7*k+C5)gYjg)Wse~D(P@5 zaa;Mj;$+g0)x^4)Fhd7utl`Lv;JhK1fxBfaIJyo4TeFIVKk=MhoVtbD%L`% zh*BWN0OAG{*b~;!3yHB$0>%dYhRRl%1P0y)fgS*}2l7Y%vxJRHvW=2d2UWey5Sbji z(k1hQqP&9tf>1cNga+$|rC5us-)`~z-*HjvjH@KevF%+O*<)per{X+UllE#KGITap&Ez?gg2M5kNMf*GDVF|kqw?oF!8Z$D zBt7w5CkKa@nGK^XA)hnD4`oL$p@canY)f}4OuWBjX$U?caTSKurQ~R+`!5eqrqJeA z4gN@?KRmr@(rT}x0`UGx7pQ4;20k*YWBYR1eJ#>YFIATE;o=?@#n;d202Ue_FY3kNA|=<5amT!tf9lE#JMU2~|_n!hsWP%`JU%8)1+ zX_P1hpe^mDp=VX0 z=2;uRT3)gE{TjW7*G#Tq+wpAuVgWx48S=|I-_Kq;aH4UW_NB9zo^HQzSf`U&#cTKV z?eTWTq&3dX{8K&m1YcTs=JprYZDiYl&p%gPgm-d3CohJG9ZkIR03?m52zj3kW%RK( z@Q!D09YD{hRRAa&)L@1I#xz1AH!2;|pO)HOB6v)_g_y_j_RXuCavgD>bB9b1+NRM# zAGW4wqXum_S8SN}eNbMW1_xcdz0ZNtl+MzLe=g@IP8Z%K@^OJ3VCUCw99NhIkuv|r zj)V6G(lLJ5_fRD)97p*RZWyOf(o^8mfPo~gqUg6tndsWCUG>Ho_>X7`4VKcJW&wc^ ztay}1Xi>FINenIi6ikFc`!8QSIO!dgyXq0;KOt|BsQVaoD^>>D9;~0OAOfAawB<)9Y{b!0(_DG;ecGIR+RQJDD#t zLk~k-U$fInKSpTp^A(1L7{5R|N`5f~4BWOD00_4IL6#kLV$}Y#E?c@+H$~2dOOM4l zDg^BeInDxQkJ6BauPk6E;cO`Twlm(~bwD-21X%{doKxvlLCO!5#g3?>@k^GX*eqAJ ztSbm0R}|W%9XyBayf-i4I>jOHz$$irxenwr$)T@b(d41YqmjisJHF*NKzt1f>rLyR*@8}cX@<(1$?obm#w5Y=DW+so;MUnaPl&L)6N zB2AyoMl@y*Ft}yf$e!bEiSVhI&Qa-?=hz6uqr}vL5_r#{+&ihhs6MJ6q-KP{*v9tW z+YmKKcv$uk5k#b&c>h`)CD1T^P3;rmLRd=_?YaO+&AUdjE}(7~S#eYb@J*X@kv=}m zXX&A1xIEsYM!`MP0Fj;{VlfZ_K=thJfI&HJc$)^%StNjhCV0z12y(|5M{zn?aN5(* zfhDyM=_)+c3u4DQih9yA!V3)&+tGY`%hlN?Wq-GAiSojx>7%I;*iTse?z4l-RsoBC zm~rP$N7{IfT6<0kmXZ7+NM<)+vdWN}`N^n_>(;%pf)v9jp`GoFx4Kf-~izW~T4}pPP$?%Qcwp^fKD%C3UCEqc15ht}!3DA^1@}e}-eM4&0 zcF>$&h#-NOZJ}bRhx1E1DA*N|29~cwS8UHXO%0lb0{< zu_@}Cw8B>({cRWIS=21L`m#i4j!uIPwpg7BDY7Csxo#*D1@KIz^VbL@22MXWwr}2( z(LP6d2!YpvN)Hu#qg+=i0B|WoPdMWpX7Bat)S0hgKT>kJ)~lkw2G^Jgb98L%JiKMh zrbvHc5T`#z{CQeU^qvnKhJG($_aO9Fk15{aT$ip;K>}QA0*%Qi9C(c0chh2*Km#9#}0zf+GGa8o<)k&ayxKSJR>!TPu zOLjHLakBvOn0QfLGdyMv&dm7bp7e;@iF*s^Zh|qyqskUW)ri0*+eewk5znpU76Gq)Hi=*7tQ9~I7XsM~OW{S9@cgZ*cz9a>f2n63xxD|z* z-j(EtkpUA$umMqOzx^PNqr|VZx;`x79}-`2%%cv3R7f0rcYH=i$;v>6E-)Ttp@*d$ zF~gwtw`4&wViRyjb>4vA&^RHEF&3pBJ1&zS$Zuf`REQ3?et++$lR8*K1CVX_m@hZyhI7u{(LRHS{M@Nz zmajQ^@U=;fkWg!)CghYf!eEhZDVmy%cJR$Gz-`5C^OX|Z9QucgBQmfPk>4z2RK!Y9 z*J;=_C=&&ljjt-dHGdCxTZA!$=5MD_Q9?PT+j+ATR_omg>M8a{cArAnDlat$$`3M@kb8FBT3;qN&aPl|wjR0Fw zXz?r&AJIj!@zHwdnKDw8k2@rx-TiBjiS;Y=3Pv;?5C2L;9A*a**BBybxrb37_Emj& z6xxwoZCMQ#a6F3HLJ%u)#yH~9LS0(jv|l7I6g`fs=sC_GWcDvd48WeXz_#T$;p^9~ zeFSyef|J%<(q-9X^iUJ$G8GMDW`qyLrLIWwzr5IZon4DDy=6 zSjWItY%>`~eWr%&GR;VRrN&;{Ggw;GpSqtg!z=vA$jvM(Qj~3k&V&eZfMFG|n{2$m zr~b1)^zgs@ZAi%>t;e^ueIC7~dmS(rv9bp4mXwSj!h<1PZs=ZzP2=qVg`4*}1<9Vc zkb`}03^zgcq&iFhpW62H$u+1yHX=$jDVAhxd ztmEe%d5^Wo2Lr>p)RH>n9hVK=m>hRv%zzjHQmL2qB<@BttdT!?^=s5A+uuaJtW{=Q zzh0+Ty&p(jB9M*nF0z?#rrUfdbxj%WfO;DkWdNulgbx*_!A_KNGw*;1YSN4)T(Hvv z#@Tyl*P${DtIO;QGoZdZH_`n7XmB-PKkTDh1C^GyJd7E2cO}q3F5)fdM7sjLYdvqH{??&OA?^)w8 zbCXS!CBSQ5)`wpBtm4QZQW9Hiy(2Y4kY&|;EdWXYE)P=kx3curI*E6!J9_rJN3nP1DF!*w`0d!l+iQ^Q*Lco&Xg}> zs#aq+Qk^a8pK}|MBEr`c9LZg5dp!kWqH4WC$3(ivmKHWw8X)ozG*EJw*{4@U>Y1E8 zv$*Z0Y97JxO&EttKrQMmxX(!K85Vs1$}9M47dh6v&@k(c*}})#T4=J^x1im#9&2sP zy@aG@)Ah#NA*7~|XQXo+C>U>s zQ3gE#oO~GL7#P2-NQ=W1mVtdcoVvoR5#QW{kIC(UH9&rT$@p>ihBvJixA4^nnNGvY z;za4m1qZ=`t$<$6$Hv<06girg{OQ0o_OI6IMUSgXLyyZMt+8Ah?`pEQAw+4jDicsq zhhziH<)D}tsoJIh`QT+yX=6ZV@pfjxGlu*;EWv`X#n=t8F7MT9+C^03H<0p_4DPyt zFUt*wS=<$P1#%+QuveCn`_d4k;+4g~LEJg0t>9Y}fFaL>L{f0AJI-h!wi;EwFdVk0 ziw{NPK;}1c?KpC+FCUfTf>KTm>ZSb@*S@sAvU}ww9q3D)3TPD0Xetd+K>Cs{9~?36 zZV*$4lp8mq<8)5|Bs8#S{rJjJ5N}r9Wj6*O31DEyLf|%^(}qTk+AoJ_(RJ^_aZt;- z={@U<2Xi7@Qfc@-q8y@PXA;f-MYiEj$X7yZ(Dr2%`L5Nfoq-}@`}}w96}~uPBlyud zH51yzhwTLzHQ(>49bpd>lXnmRxaHyPvM&kH~Ac4-EqSWLwT}cxPsnnz8fS2%Xfy#P<#3CM# zaS94hjiK-kG{9p3;TQQqewb0>MrA>i&GBS30=HNDh|t5ze2<%pt$5q)&p$_BN7?qn z!=GA)XGi8fb*4miN23LSgJrFOe>eZM5P_-e4mkVe|kOz zT}!`zw%_1l%ge$`MuPj&rCm6N5GKPlcH=z65EhS=>C(yqPA_6yp+qz05Y07|9I@dU zM}k{FB+_0_PX3We!2yiZi2B)kU@ajzcZDk&##pS^HkQ<3fo&u81D(mF_RLSE+DT7m zuUcoYUzex!DJUy&q2j>8-PPk}svX!swcZ!bl2}J9~7(~h{ zLB8^G+tJjEenLYA>|erbaP_~#rwG#>zsSRRe#aw5w9UA6E0)}?W1p1!{CyBovHn4e z5k-1;5Qc(Z3=hI|w+;Uf#`p3A!$sS>Nlt=V-lika;$+c(Y5h><`SQFEg~lh@*$o+K z$oZ3h209?mV{F(MY93%*Kddg~4vw1))_@Dt0cGD_k{=9_GQc{bU+`&SMN;5u424^w z1|?_j#k&*f#WcBYN(ZZbfz&gcC5n+!6eZ71$RJ_C?WWm8NNro>WYDGbo&MX$A3VL& zmjk7pb*$`!G+CcSHci zDOFXWV-a5+v>R%Y7qL2AB@v{1&G6v}b;L(V3@X^!kck88A@%ABUwh}FN0m5o(xT9J zKEMJ6ryKGiIex}YlrmC)pE~7;=L=keqOpUkfuA{9&Wo`~TA<=2j1CS4yrK#)enb){ zh?b&n^8z%FVKA1P$?B9{uwG_7e=<~%td=a`1TX&qCXfK8Ty@#Wzycv-H5!xrp{!pR zf<|E3s|d|pO3{k4?q_h%Yd*Qt4Gnms6&vp_b7*7ZVv=G);AzH9+npXe4GHym|5EuJqq>85ghQ*aGl8DiE<}9l#fr4G+N~~ zw8}ogw7x-@-odc&jbA4HD7-o?ET`*`MHYee2AVT5&rf4Md5#w~X5z$}AfJV5zo0m( z0cPt^;yZBJ8HPeN5ncXXWbO=|iV;-FiV|?5VS!U@#?Us&1d?wRL!5Bo(TgJiE-%H3 zM`@bsoE}6RY}K%p(k>EafTp`t{y<0YY*06N4IWINxA>}0?lUrspw<}ykSh%wWz|K- zz<{mCtzeDZ!Fy@90a4&*tYBayvPD4{2lEH5Sw_DVv9#bHgJX)^bOlNdAKI|kf+{7} z7p?p*O?Z(&&?{7cg@`1D{mGdfAQNES$2iM_GE|W)0r{(PpQql-ehLi_t86&)9I)+9N zY94-`|AX?7h+IP-T1)pq@_pbm(5rav!X;mP+%NAB1is}%yF6XWAio}SV5tX4EkfJ5 z!lS%6FwEI)fkX?H%`~kKPuAVJ3r{MEfS3ehL?`c+v-AjpS#?%3*wTj9L%uQvK|~bb z`05zaT!eq42`5f=9&D=2Og=w+#0VANgnLRk(b!%TWnWPQ8$K*u-q_I11Cp0q&*AJ# z_;wj9h-hSH@_DE3ZEHI!tzYi%<-?fq>9~w?!T=6-0Fd+IL!@b#dzmyI;~G=Db^N;F zOltk#AKeWwUvVe)hjA|ArD4B;_y_;>b_`V1f;;EtG^R+dK|BC?95sZQv@#EjFo-pF ze!bDjr9oiZ=vt^-O*wxF_b;Sq7^0Oz5@3@uRXjPyr$6|6c;97Xz#s0)uV|R2&Q!LFl>nvDIB6eP z3F$53EN7K+fg*7nE-HM<|BtmZkIS-NxBhNti9?Esh7*F4Qd;3qm_rH*gfkirI8TTZ zf|{Zhl%gWyyvrO=0Y?f48~}|_KygCBF%?uW2Q*Y1F;U*{x*t?*yU*F5_kI7^pL6y( z2+wohzuz^iwXSu2m;M{rY@H76+sh<{xKz0}imJG!96Wkp=12FGD36D7LkgeX4rJ&f z``C|sb=ZBiI3NIW${Nq6W$aDSogmO<6|HksRk`5p2himvGdWE1;p$Py#QqG1OUFQ% zMdnz)VZ-tznwuB-{7en}KIrH)e8qg2Uke$jKz71=;XN@La=XZVU?QG-e7&v8PS}~t}tW9J3K%z^6EocK7Uq^OREaEM? z(V6t-Ohv*r7^iHx_-Ax>ZLi{{O0vI@5d;IA=0|I6_}~^X%x)D1OiiMC?O;vk(cRR#<5%=qRW-HO5Fp&W?5w z0K=aL&emR_tC((}L&sC~G`-GboZmDlN`azH?U`Cxr$36*gOOhpXAH#R{52go8ps0( zG5I|zK{NoyvkHT|=GZ|Hte{lWv9mrdY5bQL34e(rXUv0d2RYyaaWBin+GRFm4SdkeorPKB z(+iH0s*$M|>DD}NvgU-OcR?U)0^qDl(h~V0vjQr3GI-p?JPB4Y z%zD>tk%4J>W^&B7t4^i)$vnW;uJ3eMK)2`j;jxhdPYgyRr9GxZ4UPq)j>ljKcx2b$ z%C)snyJlJ-*QC%zF;eM=_WJ?~E>VX_;RtHj*k5&j;(>C_l*k zbd=h?q;lRYHWk!uv1S%%5dB!Dr6Dl#z$AvxDNgJuZz(D%naq;l0fQLXq5_i~i~#Di z6EjhYF@JWv#}@}s;G$Fl=!slocI0$4V=-n$@2CK#apdVqaCzn?!&nOGO99lV;-uT} z*3GFHYxGp<%RV)xoP41MX>-(ABIXd>A@`^{WbD(NXl9eGIniWOumYzi_t0I`6$-ij zgkKXj3E5INV$7gb;?xR>DU8EVFH0bRb_lm3S4w%+>4wwON7OPJk%2bS#u7T@afVjC zF{LrUPAX!A;-#+iIq9AV6^N}6-&@$vDS5m$Fe6!;mhK7aCVT!>-##?_0=u+&U=iDx zIa2D|!+4WP^Q!{RP*sr-hRQ))!T|($BGhyMv!}=zd)>OXp|S{kqz9L%eD_I^$m5aHjCR-pb$MZ4~bS@=GavA&H<|`af*@1u}QKp%_AxW6Y zvqa}Z|Ao%6QczVA`7j_1oSacAhO$ftVr4ZU3P-MM&Xbe4iZCTbg!L?|3CeOyycj5;6Ovcz)-|@x(ImeB;k0`5&9b8{-ue6)!i0J zaHuf=NF!*Wy8xJ`0wT{39LyH|s3rzL%$Aa_G_NFXqm=>H-GLt05*eW)U;K5wt}I7~ zPRjcFJ=8e$u`i)UK^cnrpPUc$5yEwGs9d$GR=tB_WYTVc*I^4AR8)^EsfR`F0G*4L zm@#fQ`k#Eu@MTaAsxInOp*JM!^P5 zPj`H635-)d8+nZRavE`Q(mu2JESkO$k4+VV`-ZHjoXtH6Psq72jZc3D0fFm z%S%W+p#499%D`atiGti8MI!_$-qGx7;C9tHkNgGq2Tik58CP`lZse2MOiU6~FNF|c zJsqOg=L(-|J&YXEox4X{+?H}wD`7n6aEIv!&uWkYq+V7Ck~l|y)H|jW4--`}r@ty4 z^#R!ty<|6L4iHq#zlZ_iS{!H|SRN_Pu+f9CM9W3KB?Bw+gZUK;PcG)Wx(f5C!D zN0cCs5dkd#v%xZ(GJC4b@~2(G0TUb|@ef91Qu)_P;Cu{w$|fII0us2s^G+NRv=oOc zsN|$p-MX+b>{XYhl-EQ98Boe`ifPu1?G507U!k2HqO1?dt3<#K$dqTpK0C|z<}eQk zc#Kk^7~VOQ7Fzw&vTlp~|J<7D>*oh}oSm449Efh;hVlWuw85^LieuAV<+%O5IM!A{ zk*RQd%m`{oCgMePeDJ`5Jp=8@OF|8_iCRzz4AhFSu*W-iGDv0!B>-Of8kfNKu*FzR z!2O<{lErwPxE8wFbRqOLm7&!*y)lHUJMh4Z=~cE7utnFUkq7 z`4Ln`!U7(8!TWM2n>=~45Jqe>7NaCeqeieXTIvUUASv}6Bt|FhaQRCVaB=-eJ_qP= zNeG-_p+f8`Gj<{&QJqHu9x7e(0dAqjr6d~wQtEpQN>y@;zQ-s}bXA}{@dP|f=w65~ z%{#!wK3-_3P|=Ctfdb?0{oz&oSdt!S^AJXOz~%H$!OxyP(K5|CeGrt=u4jIU;DG;^ zcyg(|^$_FlxJdY_K?x{>q3OyIuvJ*j+3TZ*ofpB^}7OVJTDmj!`Vk~uxX6mv$^dxd` zEM%=YKESwqmH4If>m1xW7e_NuPP&!NE4K3x8g7fOYs{WH&m=$<$Isaq3PG~HYOPvn z(mELYt`*CCJkK+Z%j<)%A7XC_&RNXk+$Iw5EjE^>72ZGkvwNfHH?o-xq`RXsF8;YR zBCqUN;UA=_USz9)g;G2oS3=OG0}SWwV=GA8Ih1+Y#jE9zh*RT!0L)q$@Ye_`3Vs=5 zf;<@N9cC?qD1)`+SDqhCtj!xumk1KIm5Li#T?fFQ$q!ETjIY9LmXRynxwOSSfZw$W z+&d7@2g&3HZ`B;2t~rBiM-Z^c;URVi)5mHtO5#T6+5W&3SWBlT<8Pe&Kmr^92fEz| zf_FMt!;_Gro=NoZ9gu;Q z(8Q%blZaX)GuV0yF{Q#djF4RZtskKllSc_%CReD;Qqbfc6vBvM0C#)=6@AtLYtdLp zEc`$IBA#F_t1>BA2BW}}am`r@f`f)_oM!ap#*6}QTocGes$y+P33|wubzOEya$>&L zzyms{E$3{<*OG&e_Rz`r3C0dZ>zz^Bs|?$I8Iiz?(%8E$vM~+iz(8mp9+@qPpNI8} z*nv`#&F_a`InMGerP5BEX<&>R%s1+`vW}X+E$EE&78=yrU{R5wV zjm2^(`Y+fBRiy-1%_tC9G%y%n1rt&Jn(FS@##jmlJ)~Ex$$&kO)<=BvW>{BpL$AX7 z4rfL#a~|X5HXX3=jfr^|-3Hof5Xufx)1^Ptz_dCBW_&z(k!&#O2n8gaE;}PgxOCI| z=HlmOoSfN+2%>2ytD?{+{VZUHGfd$rLCE{|Pq^I;d&dOH0~`6eRz%Ue0M-to9cK=& z)d5BV4)Z@#vA+ENPb$=FOL$#XmV&uDT)uQk8xx$K9EW3Kin$ln2hB{?;)xjyYw>B= z3+XT&y@#eepb@kP5V^!J1j#ao&4r;JrV!64u^e>wkc#b^C)AuI&G4j_PyXDdMn|*4XclO( z7r^R%3n#ghR44cyNI@G?CK}N3Kv)@J=G``$mpTiqe~h^Xtrd_G`znD`8yF2p4d4*o zeZk_zGWSsHSB{`Xuc{TcnJme9$G~2VD30Qtk#1a1*S(D5nH89+Z2c_1V$j3O1U3{9 zviVSaFYEz%JQz)q#N9HPlRZ-AA@SO%ZDd=5XpcpRTpn(-c zmT^cG>9tpU@vT8D;v;VBM(Q6bc1;FETp$YKdmWfe4A%ZKGp9K`8IS}glm#)G9bktv z#>|RWcp8am*V+NMcj1%xUxaEcM|g2!Fp)}&RF?jEypOdo9Y?3cKMH3`4%wh4#D=M)`v2 zjWuvdpe3jeMA6Hcwg4{WHgaxcPeyabK)MyscOq#Vu%JZEyImN*43Vjbxmk4qRBJ0a zc>RseN=sWyWuqwV0DuW_un_7WEKEPkDwuG3DcT|NLHF?gWf$snHX;w+nvTY0=<5h9 z^Pro?g=5lQKE=gVOrbO&IUConjNtK-Smf*}YY|@%`p|HM0frwoR`4iLBTtQtuL2o^ z1U4R#*`IAbV=WaA`_aX~E;Q8=<05I7f)_{6a#%3Ip3BvjSz3gWE^-o-+kK}*_@E|q=-kwm& z`)y273gAyZEnGxHAlnGu5kx^7b5DvLCa8lr7IGiGadP8!lwh*^memN=3v2%%g^SI>0cvBkCELN*bo2ND#r_$Al21s@gcLS|Fc z2X5P5bj+&I)wy^5klKN*n>U#sF}lT!w;n~MN1Ynk+wRA8e{}pk^z!DVmAdA>xA*jg zp@&xNU6Yws?a!+>dX)8aoU!BUGt2i|-?J;*quG#w%iH%jzOwGaw!d%Rv1hs6IqysN zS{@|#C@etMc z3{4YY2k9i4-h3%ulGD=9GO@sXi_>Cqj2AWueJiXwmI}*!n11HYlmrmzw;kgw-4?|G zGks10A*!CTPr%0FgYCvj>nRqhOyzp3<+H^0@INR7A<_8=)6#tiK{8uIi$Y6|MO{SQ z#RpRWfe)+JW_DmNOp+zz<;(P%_m-}0PpA@q%&~ub<&(gJXkqql4tUT&qZYb}yg&7$ zOxV!LSexZ>7mkuxfFLlESL(&JucNYYOZqZny&gA*c$(3jVC^mYJ9tLUrP(wW5092s z6{{mk2ft(?_IC6jvFFnucz$Q-j*5`3aP^7Y>+L~Bmiaady~>5QZ!_TWb1eW5m&+Hl z|JuFm2U9AQN~6Z3y>MMjMF~7s>mBMdY+=Gc#}`m|D*RHVwB0RGKSKc=wv4@XYqBUW zUDaPT)qExVu8Vn7z-k*z+B=aN08l41B@n6j`=anpTW+b`_$0E(3n+SW5fcfu&C8e( zq%!x5@2lxKdJ8RqW`rX{g%>4R9kXSW0rN$Ksf}gYxe-NubB4->p!(EUD`sey9zDtT zZ`oI0n090shhEX1Gu9aMI-~=zC{NOD%vw!gF9_O$IBh9cOMp?D^KhbW1F>h+tK{=7 za9Q%sga#J$D8OZzjtSHcZhW14axCR(0t2VfKJcbe*@M6NqP7$m;^R)_+FF)x%y`tt z^>7K+JK-oQS!~-7b%+te_O$8%?{jqa)0I31JiXC#!u#+Tyaj+EH!T?LR9zA9viK~BfRqHMw`hc)kpn~gx<7tl+Z!Y2>KHW^AIHqriYENgljC8z! zBe`oF72-DZL0@^u2wQVH6N~a|7wv_$P))1W0QLPPAA+TMTYYoK5t8HjArf91+6Z?K8FFi<*%Yy-T%?8UacX$jY}z_r23`*D zcH-77vd#Em>aF-$;2!z#F(*!*lnX~cuB6jFP;XXbQ&wt}f9|ns$u}R=G0Q6qXgy}k z7(^2stlUH2z44}0af-KmhrUOE#P|o_@XbVa@J^N?4*U)XF5InSM_c%ENAGKoo{ShZ z3jRPKUr&jQ!P|<>X4Y*JM+029VCm9>98iDCQ0-5BeD+v?3>v&0SfI9&w!c((7IMyv z%z!6(6vfAXV9I=no}ivNU;9L5pV;LZ=6d$mC=G*cA92F)Eatcdty)>Z@%s1BnJ{F) znk|^o${wsmhPzm(w+BK>Gm|o)0hy(h`3c4*l^g!>-QG%l4@Ae)Kb|* ziGj?Ks$$5TaH3PoJA2*)B0l%{n=hIYTHs*@Zab@yDne6V6?NEu^X&K>&#HapvG2+_ z_95+2();*hm(6ER{6NjL8o%aCax3NEYYR8>Cw!6R7~ycizpjq0mdxxO*v5R<@pI?2 zy|p^(UF7G|^NNUC2EsFC6!bp#w2IpzZ>%xQKbGe|*Q}|E{EJ0TYb#(=ERg@uDCHjI z`l~HAZX-9+B8?YYENexr4o{qM{P;94+{pTNr0Svn)zVGhW*vveG~9-wN(0a;WMp=D z?%cToj!t^!H}}#s2BCLk=Cm8_j;E(*y0n&aw3(ARYwQ8dE6j?oN!RiT8@-??^HeGA zV-hv}a2(M@MzLW!U6O&q z+JQICkzeElXAh4lBLP+TCQ4)4FK%t##>1oO-hm4!GG#i{9C)&3Kw@pjbXk$2&L4j( z^Ye2F{O=N^NZNDs+P!dM$y)q22w+==q*eflJhHF&IQ2HDlhv%xrX(YR!;(%|M=OfL zAtQ{IK3`_zTIYq9@7AyPIv1A!0`30#%)^5$?aTq}%@L(fK{1UgU8NTTib#&{09mb8 zNOTCupEF=VSXdg5DIU>Hr4s)(gU2nNddH3*U{c>L|Mp|JLciu=D+rXd8!W0LP+sk( z^@K|C=w%Lq)k@1q>9{9%f-H!Fe#?X9*9~H(i-wKsBE$@vzT;{zFc7TPlp?k75z?+! zM*>BCb3emX#l+1`yXWyct2t`f3mxY~<}$)MyRzsMR6tV^6RyYz;`8xucY*_*=KDDj zdp>%tERc2Yo>0rMmAQww*wgnT7pqMu?%NS87g7!YZ8ju+(=S$4+Tm-71zmm~!r&YK=>ELczJ@E>e!w zC?q1+--^Fx_0RAB0YzSu3ol@K+MP$?ZOx}(ufIetfXqP29ao35(84GFN>y;FB#MyU zIN%7+@bFL>0lpJz-B&gZlXGU*Psf9;cBejlYCu~R=TYQ!dBq7Dh7#sTgPE@#eQ?U`+vQPF zaeY7L0nNO4+m(NPi*twd4X0N7@Mvbdox;uQE!OK1Jku29{k}1zTFS$NvPTQr5--k2 z9+4$oX2Mhl5rPyE;9wwHZg5PU*Dt2#kjj<;SY~sLLWlCqo`}Tc7s}D~CxCh?R0qW( zjUb9y4U)n>=2%FYkfQ)-T|J1hc)qW1fo_>@uT*$H=7IU8g4A$RO10*kC==LZTNpH-E2{R5c4Nvq2+gS!4 zrV3!+ftZfOtO~Q5(mXMx06^2+ zG_N7FUpUqVYFkpBk3O1vG@u~6^fShPBdg)h+Uk9`cNN$aAD{ikBvnQ3H&24XVI6Wx z5YGsH@jI=5pt#C;^h9$x*-0}L^{5I~P`KEbh1DVv6U2mQaNZcU!0kz?QvfyfG?T$~ zEXp>b9(ta6K_{iR6ATDirWuKz|6;wjtsAE&(ylCeA0`J-IFDEYxJ)IfE)}*?q-KZs z8&N-}qbrS(y!yybd(pDbO^@9e)gHJRg@m`n+sHM%A8lLpG_;NN9;(2fcy)RBA(_2B zoelu`tG_Oc(TucO8}%W;zeUxm5h5NKq>Tt;xg5i~(rR(gRw^8DAz)H+BjrQsJu)y5{HS?pR8h!Prtx+_B`!a)C%ste*3DJIgMpT z1>cT#Fm*IYt>w-V(=c)}I#P6dm!RII)8e3`s-Pi2MgV7&sEckA6M|Lt6c*Bs?4tlwZ1t?lGKk{MM1LHuG4w)@IVrb2tY8ZVq#KaRmMEqk}Du%plv^3LnnhYG!s}*jaX0e z1j|KdMnTr*$6-@0e_z__l29Yk0odm@MzczVZ=)!iPM36N`NhJSiVE8g<7+D2)w*@# zkYSaF4xbS3Q3+^J!GsBP@kpOcI&w*;i2a%(b3jzFs;0q)1-g@ z2XJ~$J-PeexB17c$Hp*a}t=P;KFZ=qut-GgHYnrT>)Q|WHsO)As#rRow~4|_5k zL6|ovK--?!9?2UVp9ifmbM)>Bj|u|`_yCk*;q3V1uya{{skIvRjgtsc*~-=}Vw>ty zEnI0pVgr2MhJ1m8GS_mCvNkH4*%%22;2q8Pb$&s@XbV zg=A-pc4%;hvoOcj%`Ax%&WBnb9X*$btAN=2!-ft2py@@aIuoQKy*G?V>t_WTg+aQL zVNi^a=u!^I-OSqi-=3R01{-Q|NwSh09~C}UhGAUr!HxXb&FbW7Rb<0mQ!XnKNkis z_4B4(AwY2AaUXPJbKqqY+boB&N!P z)Gow{=9fN{f@D)%PFX!(q5@Z(?Pn?_$qem>GkGsjs<+Q?kG)EqTr?osg2qe{r@%o` zbcPdC5JXWF502t-!2wLq{?#89Xkcx=C)?K-?15TlA4imrYnHSRSpqJ{($y}q-HK%n znv3fVDL1e$YlKln^A`ArP{y=lX0B%QQDerukD`e};o@yUeg+tzxziVC4*j9Li=-z7 z7?Gp%1kGy*#a9tB;WUjHd=yzO@!~P`R$9n1P2zzUhn|xGy}UjWh+ilO?P{Vg*0d+i zqJhu`KAi)|)pgr|9Wlz4i3(*6A;Or;eHl_2hlT*;|CoDy*Ue2-R+|!^$w(ykPuh3a z@hAm!(whIgX%n+fG;L0lumCWw=C65vk(A68oZaKF;?`EUZ6u1?Y5gW;?E{3${bkp# z>clCwa6{}0*K?%KS#sE!X)YP!!oe%)XbTVPxP4-o;lFNt1U=DR>blP7xd1~=hPdXW z5a(*U&a%G0h=QB)30#V5s~3e0N54X~GfaS~PFo zffzi#cxxch5h^u(549leg$fg`B|qG_ABng^K;kOqp4ieC@=8shYL62d)37e3@aB)f z(cBgZn4>f`03OaQu_lecFK4j8$A<@iB@1^E3&wnKRFqa|NbtcHI~DU7!5D=+Ri+?8 z6g4vDVJ`LxHraJ8%Hrqb?d`1%kZEvim4c4G@&e@I<@WB9Apqm_gf%OaE(TCd{Ww2O zPs!{k3X=ES7U3uNX0>Y7CeWbCWo6emhJW~NSV^(d_Jlhfj#jEX4QPrr1&XXv;V6aS z2vkcObn&~jYj^3%LxVk8+W-{^jVE!GPNzvN7VIs8o~F3w&?(QEQ-@*=gjA@Ki6Z8} zO&ErFK{<4jbfxjc{p;uiYSn5TP?Px!dcAbDS48$wGS}mQoj85k1;T+_!~bztV=$YK z0iE8S3r@BTqMJN}llp;}BlOrI)*GTi4qstQ`ae1W-)WL>k?sG@KS4^_v8SA5&=<{w zdOy*dwCWREqZ4yeRC}f#X#U!^<{#q)_v#s}B_f9EC5FTIMZu*v<-WvGN{2CaX9R^Q zRHhErMn#2i%rb6)trcch3~VFVf!TZWrYP8Hku?MbbT<6xifja^)aE_OgwrqHu8$Wy zC?G>^L^V-%6Aicn(zY{kJDqY=#se=7q1Dts8({-ssN?BlX*pLN)9=;(Ec6HM1bW;d zpV-_V!vflI@mOHCSnuz%lSA4L2^b<)`HWu;el?%L#;xf4co;z{F%F!mcd0>i!rRSdukaFrVR#c0er3 z$EmKhzYVGf_z4Vk=0%K@tDd`skpNzE+WHE_Gn3KM_3L!`uL9~Nip!UgFk1B&X*W`q z*|nG&qVe%&f##3H=z&2ET%VUn#o5Dj`4YZHy8Femf+0%TKl+K72SiZ(^i|S}e*|Vs^|>L>2kdSJcqZtSD4^v%X)S^5E|Sc+Ucwf{&3q z1)VeTJY4WeEgbe%A;FMSA!v8dRTG5P{N9uV7~+4dKQWtJY~K9t<8Qptf@HM3d!Vk; z>!?lfGv~aLG6i@h!xth9OiJ9Q#ysjnJgZ6;cM|1rOn(O~*1CGlzOX5ZvT7l7A|;yS z34csz?r!lGJX#llWA7UYQHvpTXDWfts1JsIpT|iFi5R%GSHTD9?qLI!(V;q!Z`3u8 zjM4tO?$)9~T1|UPTkhEfxw`=1X0T52dHUMn$)D@}W2L`#GIEEE8M0@MKp%de6x4?s zCsaYq0(Kh-)LC5ay)JrvxtsaU%M+SQSV7a*0Nr$_W;I=8wrrYta=Lu)v3REv{lr8R z)q@f5$nO3^b(rP6q-^_TuRlNl2X+k`uBppg;Z!xOI%SlQ@N%<~y-^^-MgfY`-|$Fw zcpBj9-=EXjR2@h;(mgJS0PVmQqG~ED=N(= zpjqbkb}fNAdt;TlN7YdfQwz#a4I8#&A^JgZzuv@*Y+p-kM2)W=P!=ec&n`-kH};~O z0x2OzX;fT1B_u2UsO}bIq}Fdyk>Xqu=`xqij8((Oj>1uM z@!sRT|EDlisdnx8XKu=-MLW0r6Z$tr#k<~t%8k)2Ns9RQOBnTlQZl8tSEI~-e9lvt zsMESozP3D7wbc;{iyfAHe0MF1HPGajjj0xCzTe?TxETft3C8;dhdV$mri<3o2B&_z zCuUFFodKsDg8=d6$)mvUOZrI~y!8$?8Fz(_(Tj$GH44xcbkjM~NPr10)_*5sY%4LLU}!VYAm8^E-PndaR}7B)stQii%7U#^-J zFvTqnKsLbX!15*Hw>SNu9rA`nwzh7Xm@Rq6w6xUbdA5SUv30{lNYlhP_APB4_yzEI zIBULN1f!Mh-Q2RNKCW#JeA>X_`qYVQpKAfY>KIb-<^cn%JP%FcUeE_3HjrA6u2K{& zk%hrY!1I@Z=R=AH2~HE4hY+)fGnsND-NN%jC;o+r-z4v*cMo%*opPtaJEF-)Ze&V4ak!$(%{)wREL6Cr4JZJYU zp3#3Ru)3lfvULMT!dIt6l$i1%rZAwulKb#ZwcfUJjT(mu?RY+$MnnTY2FIHr$tJ_Y zs?7lEWxuJI*1GV{n-tFjX<;UKl|)U%e?�ma6JlF!hcpHxecWGqo#)7GwymV)_!{ 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 Q*1!1F-l<2N?TD}b7u9pCm;e9( literal 223259 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

$C22UMblVytt$S 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 diff --git a/bench/comparison/sds.csv b/bench/comparison/sds.csv index 7a8346e..1141b16 100644 --- a/bench/comparison/sds.csv +++ b/bench/comparison/sds.csv @@ -1,61 +1,61 @@ solver,feature,task,matrix,structure,n,nnz,T,nrhs,nbatch,analysis_s,factorization_s,refactorization_s,solve_s,analysis_min_s,factorization_min_s,refactorization_min_s,solve_min_s,lu_nnz,flops,nsuperpanels,relres,samples,status,device,version,git_sha,date -sds,cholesky_f64,T13,Boeing/bcsstk38,SPD,8032,355460,Float64,1,1,0.055041544,0.023561976,0.023540804,0.001882663,0.05477267,0.023523856,0.023517671,0.001836221,804613,1.40793119e8,604,1.050998291749151e-10,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_f64,T13,GHS_psdef/apache2,SPD,715176,4817870,Float64,1,1,6.075783352,1.031854046,1.023644657,0.076661892,6.004857578,1.026676972,1.023323183,0.073941104,129200941,1.66491403722e11,123689,1.5829650410070863e-10,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_f64,T13,HB/bcsstk17,SPD,10974,428650,Float64,1,1,0.065546234,0.029568025,0.029604894,0.003491196,0.064005437,0.029508741,0.029566311,0.003450174,1043601,1.6795197e8,1300,5.049962573339207e-11,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_f64,T13,kkt_pglib_opf_case118_ieee_condensed_1,SPD,1088,12860,Float64,1,1,0.004455246,0.003872081,0.00387656,0.002723033,0.004427476,0.003861251,0.003867757,0.002229274,11634,219042.0,303,0.0001499152129335686,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_f64,T13,kkt_pglib_opf_case118_ieee_condensed_10,SPD,1088,12860,Float64,1,1,0.004783533,0.003635679,0.003674184,0.002090379,0.004704944,0.003616853,0.003617785,0.002076268,11634,219042.0,303,1.0007128179490731e-5,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_f64,T13,kkt_pglib_opf_case118_ieee_condensed_20,SPD,1088,12860,Float64,1,1,0.004772433,0.003662303,0.003772103,0.00207468,0.004643315,0.003626044,0.003644184,0.00205492,11634,219042.0,303,0.0977012881293089,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_f64,T13,kkt_pglib_opf_case1354_pegase_condensed_1,SPD,11192,136724,Float64,1,1,0.049981892,0.039883353,0.039883884,0.019669037,0.04814711,0.039817768,0.039802259,0.019621681,120598,2.787739e6,3134,0.00028169146220954487,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_f64,T13,kkt_pglib_opf_case1354_pegase_condensed_10,SPD,11192,136724,Float64,1,1,0.04873287,0.038411673,0.038348444,0.019679444,0.047928509,0.038323848,0.038317108,0.019636183,120598,2.787739e6,3134,0.00014028077734730922,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_f64,T13,kkt_pglib_opf_case1354_pegase_condensed_20,SPD,11192,136724,Float64,1,1,0.048956172,0.038327082,0.038384388,0.019673838,0.04874153,0.038309628,0.038284989,0.019523257,120598,2.787739e6,3134,7.407112355532926e-5,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_f64,T13,kkt_pglib_opf_case14_ieee_condensed_1,SPD,118,1282,Float64,1,1,0.00096492,0.000525965,0.000555025,0.000402396,0.000899841,0.000506245,0.00051384,0.000361576,1027,15193.0,33,1.6538473403875516e-6,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_f64,T13,kkt_pglib_opf_case14_ieee_condensed_10,SPD,118,1282,Float64,1,1,0.001552204,0.000565479,0.000540295,0.000392166,0.0010087,0.000485235,0.000493485,0.000383046,1027,15193.0,33,0.00015711648509796294,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_f64,T13,kkt_pglib_opf_case14_ieee_condensed_11,SPD,118,1282,Float64,1,1,0.00093695,0.000490015,0.000539125,0.000379317,0.000872541,0.000487475,0.000495235,0.000340847,1027,15193.0,33,1.670170208071547e-5,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_f64,T13,lap2d_300,SPD,90000,448800,Float64,1,1,0.370827877,0.036380188,0.036289609,0.004104809,0.356950908,0.03629023,0.036283499,0.00404394,2465905,3.73611053e8,20495,1.7761691759148163e-12,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_f64,T13,lap3d_40,SPD,64000,438400,Float64,1,1,0.39802196,0.222990035,0.223344848,0.017043795,0.392282098,0.222942606,0.222917496,0.015558135,14387160,1.6401480134e10,11066,7.478815931690092e-14,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_nrhs16,T12,Boeing/bcsstk38,SPD,8032,355460,Float64,16,1,0.053985858,0.023567186,0.023582937,0.003096266,0.053127947,0.023530144,0.023524176,0.003050938,804613,1.40793119e8,604,1.6616774132045366e-10,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_nrhs16,T12,GHS_psdef/apache2,SPD,715176,4817870,Float64,16,1,6.234490898,1.027368919,1.023103829,0.255904835,6.084311257,1.025134144,1.022538139,0.255507332,129200941,1.66491403722e11,123689,1.59519352774917e-10,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_nrhs16,T12,HB/bcsstk17,SPD,10974,428650,Float64,16,1,0.066237912,0.029497654,0.029602047,0.006562009,0.065259415,0.02945503,0.029526828,0.005622915,1043601,1.6795197e8,1300,5.922473282639887e-11,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_nrhs16,T12,kkt_pglib_opf_case118_ieee_condensed_1,SPD,1088,12860,Float64,16,1,0.004700083,0.003873657,0.003877566,0.002180983,0.004562895,0.003854292,0.00384882,0.00205092,11634,219042.0,303,0.0001499152129335686,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_nrhs16,T12,kkt_pglib_opf_case118_ieee_condensed_10,SPD,1088,12860,Float64,16,1,0.004559674,0.004448016,0.003637058,0.002134644,0.004472946,0.003651353,0.003604424,0.00209515,11634,219042.0,303,1.1028908236861046e-5,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_nrhs16,T12,kkt_pglib_opf_case118_ieee_condensed_20,SPD,1088,12860,Float64,16,1,0.004737484,0.003700274,0.004006584,0.002048999,0.004496825,0.003602254,0.003609785,0.00200596,11634,219042.0,303,0.31757187210790866,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_nrhs16,T12,kkt_pglib_opf_case1354_pegase_condensed_1,SPD,11192,136724,Float64,16,1,0.049626492,0.039599661,0.039632746,0.019355258,0.049022436,0.039589098,0.03958507,0.019294657,120598,2.787739e6,3134,0.000392992742458017,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_nrhs16,T12,kkt_pglib_opf_case1354_pegase_condensed_10,SPD,11192,136724,Float64,16,1,0.04966657,0.038364914,0.038218948,0.019330161,0.048206482,0.038135431,0.038175365,0.019274767,120598,2.787739e6,3134,0.00014411152068572583,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_nrhs16,T12,kkt_pglib_opf_case1354_pegase_condensed_20,SPD,11192,136724,Float64,16,1,0.049616889,0.03822914,0.038125329,0.019383157,0.049367355,0.038117826,0.038098719,0.019352948,120598,2.787739e6,3134,9.671929703062016e-5,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_nrhs16,T12,kkt_pglib_opf_case14_ieee_condensed_1,SPD,118,1282,Float64,16,1,0.00097384,0.000555105,0.000542974,0.000449095,0.000866742,0.000521184,0.000535355,0.000358437,1027,15193.0,33,2.709170129303515e-6,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_nrhs16,T12,kkt_pglib_opf_case14_ieee_condensed_10,SPD,118,1282,Float64,16,1,0.001064299,0.000510703,0.000504045,0.000485675,0.000858991,0.000500455,0.000486805,0.000375226,1027,15193.0,33,0.00045426768909551265,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_nrhs16,T12,kkt_pglib_opf_case14_ieee_condensed_11,SPD,118,1282,Float64,16,1,0.00094125,0.000521325,0.000543315,0.000446326,0.000925591,0.000490775,0.000487025,0.000401526,1027,15193.0,33,3.7141469401124885e-5,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_nrhs16,T12,lap2d_300,SPD,90000,448800,Float64,16,1,0.334096298,0.036393987,0.036393583,0.009137589,0.333249383,0.036343764,0.036319827,0.009098138,2465905,3.73611053e8,20495,1.7988719466898246e-12,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,cholesky_nrhs16,T12,lap3d_40,SPD,64000,438400,Float64,16,1,0.409275291,0.222932391,0.223009715,0.050472229,0.404915674,0.222682934,0.22295914,0.049418747,14387160,1.6401480134e10,11066,8.447248176670233e-14,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt,T15,Boeing/bcsstk38,S,8032,355460,Float64,1,1,0.061063483,0.129022486,0.129089467,0.002818442,0.059272134,0.128936368,0.129019492,0.001903311,804613,1.40793119e8,604,1.2512823581094381e-10,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt,T15,GHS_psdef/apache2,S,715176,4817870,Float64,1,1,6.966277483,90.742153005,91.194098803,0.089128092,6.966277483,90.742153005,91.194098803,0.089128092,129200941,1.66491403722e11,123689,1.6291268746741202e-10,1,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt,T15,HB/bcsstk17,S,10974,428650,Float64,1,1,0.072706655,0.198275825,0.198263953,0.003797132,0.070868664,0.198257019,0.198193158,0.003681003,1043601,1.6795197e8,1300,3.707249888539958e-11,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt,T15,kkt_pglib_opf_case118_ieee_condensed_1,S,1088,12860,Float64,1,1,0.00503649,0.0050286,0.005032138,0.002611824,0.004889712,0.004991059,0.005015509,0.002338457,11634,219042.0,303,6.969655897665449e-5,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt,T15,kkt_pglib_opf_case118_ieee_condensed_10,S,1088,12860,Float64,1,1,0.005121053,0.004988512,0.004894846,0.002376846,0.005033365,0.004834392,0.004850692,0.002365701,11634,219042.0,303,9.740282741453158e-6,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt,T15,kkt_pglib_opf_case118_ieee_condensed_20,S,1088,12860,Float64,1,1,0.00504261,0.005042945,0.005025285,0.002379726,0.004871682,0.00499047,0.004990749,0.002369027,11634,219042.0,303,0.07793477586360127,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt,T15,kkt_pglib_opf_case118_ieee_k2_1,S,3150,17714,Float64,1,1,0.054193661,0.013793913,0.013814408,0.007732719,0.052808174,0.013779913,0.013785283,0.007706387,21032,308794.0,1917,0.23695532264533115,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt,T15,kkt_pglib_opf_case118_ieee_k2_10,S,3150,17714,Float64,1,1,0.054115257,0.014978147,0.013323078,0.007690192,0.053494918,0.013254027,0.013263097,0.007660205,20542,292847.0,1906,0.01060874507064105,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt,T15,kkt_pglib_opf_case118_ieee_k2_20,S,3150,17714,Float64,1,1,0.053061332,0.01355436,0.013593394,0.007678673,0.052354006,0.013546596,0.013568231,0.007639475,20507,291377.0,1889,0.027042646838526467,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt,T15,kkt_pglib_opf_case1354_pegase_condensed_1,S,11192,136724,Float64,1,1,0.052076252,0.056332599,0.056272926,0.022579436,0.051053828,0.056288656,0.05625831,0.022551016,120598,2.787739e6,3134,0.00032169280786670235,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt,T15,kkt_pglib_opf_case1354_pegase_condensed_10,S,11192,136724,Float64,1,1,0.052021244,0.055731125,0.055726805,0.022552461,0.051619108,0.055686641,0.05568685,0.022537766,120598,2.787739e6,3134,9.534327884384974e-5,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt,T15,kkt_pglib_opf_case1354_pegase_condensed_20,S,11192,136724,Float64,1,1,0.05224864,0.056120652,0.056074372,0.022592766,0.051581671,0.056092957,0.056045671,0.022542996,120598,2.787739e6,3134,4.9109638733395656e-5,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt,T15,kkt_pglib_opf_case1354_pegase_k2_1,S,33811,188063,Float64,1,1,1.034719937,0.146043353,0.146048612,0.078678983,1.018265641,0.146023671,0.146007897,0.078667558,215953,3.404739e6,19624,14.214742644178667,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt,T15,kkt_pglib_opf_case1354_pegase_k2_10,S,33811,188063,Float64,1,1,1.087224016,0.160531018,0.145358463,0.079023534,1.076392049,0.145818691,0.14531794,0.078921025,220146,3.494638e6,19496,51.66970951161263,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt,T15,kkt_pglib_opf_case1354_pegase_k2_20,S,33811,188063,Float64,1,1,1.104788265,0.168333076,0.147665805,0.079119723,1.09590177,0.147641951,0.147638537,0.079012984,221292,3.599399e6,19600,15.32248012620186,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt,T15,kkt_pglib_opf_case14_ieee_condensed_1,S,118,1282,Float64,1,1,0.001169209,0.000614974,0.000628584,0.000418186,0.00103519,0.000600084,0.000603454,0.000394086,1027,15193.0,33,8.086607326073917e-7,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt,T15,kkt_pglib_opf_case14_ieee_condensed_10,S,118,1282,Float64,1,1,0.001053199,0.001027139,0.000630214,0.000457705,0.00099222,0.000753818,0.000596454,0.000410996,1027,15193.0,33,0.0001562445067991457,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt,T15,kkt_pglib_opf_case14_ieee_condensed_11,S,118,1282,Float64,1,1,0.001057939,0.000681173,0.000604554,0.000504465,0.00100525,0.000588785,0.000596604,0.000393426,1027,15193.0,33,5.097826580562365e-6,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt,T15,kkt_pglib_opf_case14_ieee_k2_1,S,344,1924,Float64,1,1,0.004082119,0.00201686,0.001586234,0.000960371,0.004022189,0.001946523,0.001536285,0.000947731,2139,26663.0,186,1.0697170401067997e-8,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt,T15,kkt_pglib_opf_case14_ieee_k2_10,S,344,1924,Float64,1,1,0.004873231,0.001818783,0.001604724,0.000947545,0.004666403,0.001732722,0.001578415,0.000934141,2154,27106.0,185,2.7456609715314606e-5,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt,T15,kkt_pglib_opf_case14_ieee_k2_15,S,344,1924,Float64,1,1,0.003557984,0.001709313,0.001747463,0.000842302,0.002675153,0.001701744,0.001701943,0.000824522,3273,56950.0,85,0.3235038258289765,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt,T15,lap2d_300,S,90000,448800,Float64,1,1,0.348791021,0.240367346,0.240674043,0.004701802,0.345909569,0.240345981,0.24044258,0.004654757,2465905,3.73611053e8,20495,1.6832598767896702e-12,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt,T15,lap3d_40,S,64000,438400,Float64,1,1,0.415790411,14.612541103,14.612355501,0.019351862,0.415790411,14.612541103,14.612355501,0.019351862,14387160,1.6401480134e10,11066,9.061811084088796e-14,1,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt_ir2,T16,kkt_pglib_opf_case118_ieee_k2_1,S,3150,17714,Float64,1,1,0.054299737,0.013801582,0.013799794,0.023410607,0.053704662,0.013783426,0.013765864,0.023257204,21032,308794.0,1917,3.3512086898080463e-9,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt_ir2,T16,kkt_pglib_opf_case118_ieee_k2_10,S,3150,17714,Float64,1,1,0.054693776,0.01507601,0.013270667,0.022995126,0.053929471,0.01498966,0.013263759,0.022858374,20542,292847.0,1906,5.776933647623207e-9,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt_ir2,T16,kkt_pglib_opf_case118_ieee_k2_20,S,3150,17714,Float64,1,1,0.05306064,0.013643744,0.013607562,0.022889278,0.052331748,0.013555077,0.013550177,0.022725457,20507,291377.0,1889,7.507645151131128e-9,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt_ir2,T16,kkt_pglib_opf_case1354_pegase_k2_1,S,33811,188063,Float64,1,1,0.991926506,0.146429037,0.146120059,0.243511976,0.98327876,0.146056859,0.146034119,0.242889352,215953,3.404739e6,19624,0.01594796168284804,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt_ir2,T16,kkt_pglib_opf_case1354_pegase_k2_10,S,33811,188063,Float64,1,1,1.091847841,0.149976461,0.145415602,0.239672107,1.08411467,0.145363863,0.145329983,0.239304801,220146,3.494638e6,19496,8.630339939807564,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt_ir2,T16,kkt_pglib_opf_case1354_pegase_k2_20,S,33811,188063,Float64,1,1,1.123629585,0.150556733,0.147732345,0.240913364,1.097421125,0.147659733,0.147692785,0.239965147,221292,3.599399e6,19600,0.14771862721996226,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt_ir2,T16,kkt_pglib_opf_case14_ieee_k2_1,S,344,1924,Float64,1,1,0.004375957,0.001593206,0.001583714,0.002756917,0.0039867,0.001559215,0.001540205,0.002722203,2139,26663.0,186,6.896972747993074e-13,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt_ir2,T16,kkt_pglib_opf_case14_ieee_k2_10,S,344,1924,Float64,1,1,0.00509171,0.001626868,0.00209265,0.003889711,0.004957215,0.001564664,0.001592625,0.003410052,2154,27106.0,185,2.3271477086231642e-14,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 -sds,ldlt_ir2,T16,kkt_pglib_opf_case14_ieee_k2_15,S,344,1924,Float64,1,1,0.002540124,0.002406726,0.001815996,0.002360497,0.002492155,0.001705623,0.001719133,0.002343986,3273,56950.0,85,7.139728621879342e-9,5,ok,NVIDIA GeForce RTX 4080,0.1.0,73b93aa+dirty,2026-10-02 +sds,cholesky_f64,T13,Boeing/bcsstk38,SPD,8032,355460,Float64,1,1,0.052895817,0.022689148,0.022612044,0.001930507,0.052309103,0.0225327,0.022544785,0.001828849,804613,1.40793119e8,604,9.228321860958985e-11,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_f64,T13,GHS_psdef/apache2,SPD,715176,4817870,Float64,1,1,6.166784823,1.035411549,1.023398631,0.0740429,6.08023181,1.027918907,1.022790193,0.07390622,129200941,1.66491403722e11,123689,1.5829609495382997e-10,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_f64,T13,HB/bcsstk17,SPD,10974,428650,Float64,1,1,0.066521199,0.027796134,0.027816896,0.004191822,0.064239352,0.027718274,0.027724356,0.003468137,1043601,1.6795197e8,1300,5.329711250207285e-11,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_f64,T13,kkt_pglib_opf_case118_ieee_condensed_1,SPD,1088,12860,Float64,1,1,0.005003332,0.001124552,0.001177142,0.000795485,0.004766359,0.000885744,0.000918514,0.000706246,11634,219042.0,303,0.00011749638207710804,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_f64,T13,kkt_pglib_opf_case118_ieee_condensed_10,SPD,1088,12860,Float64,1,1,0.004961799,0.001006833,0.000928334,0.000894103,0.004755579,0.000952364,0.000879194,0.000734935,11634,219042.0,303,8.282771964454982e-6,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_f64,T13,kkt_pglib_opf_case118_ieee_condensed_20,SPD,1088,12860,Float64,1,1,0.004937056,0.001247291,0.001070182,0.001024083,0.004745538,0.000985173,0.000883624,0.000715305,11634,219042.0,303,0.07466949011173213,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_f64,T13,kkt_pglib_opf_case1354_pegase_condensed_1,SPD,11192,136724,Float64,1,1,0.051688195,0.004570869,0.00299375,0.001555929,0.050475293,0.002959195,0.00294383,0.001157008,120598,2.787739e6,3134,0.0002400209917323507,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_f64,T13,kkt_pglib_opf_case1354_pegase_condensed_10,SPD,11192,136724,Float64,1,1,0.052849985,0.004720808,0.004201862,0.001157737,0.051216659,0.003400199,0.002935852,0.001148778,120598,2.787739e6,3134,0.00010652307483999695,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_f64,T13,kkt_pglib_opf_case1354_pegase_condensed_20,SPD,11192,136724,Float64,1,1,0.051370368,0.002925531,0.003947863,0.00147781,0.051090671,0.00290696,0.00292771,0.001150873,120598,2.787739e6,3134,4.9714122630844477e-5,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_f64,T13,kkt_pglib_opf_case14_ieee_condensed_1,SPD,118,1282,Float64,1,1,0.000938362,0.000483246,0.000393448,0.000568817,0.000915754,0.000332478,0.000322768,0.000391968,1027,15193.0,33,1.3024460439372e-6,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_f64,T13,kkt_pglib_opf_case14_ieee_condensed_10,SPD,118,1282,Float64,1,1,0.000984983,0.000351427,0.000425207,0.000473546,0.000927644,0.000331138,0.000329927,0.000394408,1027,15193.0,33,0.00017225756315640304,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_f64,T13,kkt_pglib_opf_case14_ieee_condensed_11,SPD,118,1282,Float64,1,1,0.001600385,0.000351278,0.000490077,0.000442517,0.000920523,0.000331408,0.000328388,0.000407448,1027,15193.0,33,1.5565096136251653e-5,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_f64,T13,lap2d_300,SPD,90000,448800,Float64,1,1,0.363597823,0.031528722,0.03143196,0.003313087,0.359637733,0.031400434,0.03136149,0.003282588,2465905,3.73611053e8,20495,1.7771927055373497e-12,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_f64,T13,lap3d_40,SPD,64000,438400,Float64,1,1,0.381863192,0.223146394,0.223414887,0.018067357,0.377376529,0.222864897,0.223028749,0.015779969,14387160,1.6401480134e10,11066,7.47528486407178e-14,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_nrhs16,T12,Boeing/bcsstk38,SPD,8032,355460,Float64,16,1,0.053352371,0.024425303,0.02254784,0.00308884,0.052144044,0.022529336,0.022515445,0.003084509,804613,1.40793119e8,604,1.8361229983712143e-10,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_nrhs16,T12,GHS_psdef/apache2,SPD,715176,4817870,Float64,16,1,6.13672171,1.030616802,1.022590665,0.256170636,6.049268182,1.022599653,1.022064699,0.255566832,129200941,1.66491403722e11,123689,1.595193195901826e-10,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_nrhs16,T12,HB/bcsstk17,SPD,10974,428650,Float64,16,1,0.066444193,0.027809125,0.027848969,0.005850721,0.064335362,0.027718646,0.027765015,0.005628426,1043601,1.6795197e8,1300,5.369098269031941e-11,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_nrhs16,T12,kkt_pglib_opf_case118_ieee_condensed_1,SPD,1088,12860,Float64,16,1,0.004806148,0.0014314,0.001032478,0.001026603,0.004764199,0.001067463,0.000893174,0.000776525,11634,219042.0,303,0.0001043087115585084,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_nrhs16,T12,kkt_pglib_opf_case118_ieee_condensed_10,SPD,1088,12860,Float64,16,1,0.004732858,0.001417461,0.001059702,0.000867864,0.00470927,0.000985753,0.001009113,0.000777325,11634,219042.0,303,8.768107291420912e-6,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_nrhs16,T12,kkt_pglib_opf_case118_ieee_condensed_20,SPD,1088,12860,Float64,16,1,0.004885028,0.001120333,0.000948878,0.000906623,0.004740848,0.000863595,0.000876999,0.000782925,11634,219042.0,303,0.3030078999673735,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_nrhs16,T12,kkt_pglib_opf_case1354_pegase_condensed_1,SPD,11192,136724,Float64,16,1,0.051818795,0.004414241,0.003626995,0.001908587,0.050626528,0.003080339,0.003592556,0.0014711,120598,2.787739e6,3134,0.00032077686694919835,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_nrhs16,T12,kkt_pglib_opf_case1354_pegase_condensed_10,SPD,11192,136724,Float64,16,1,0.051397951,0.002939895,0.002953939,0.001688338,0.050813628,0.002913971,0.00289104,0.001458825,120598,2.787739e6,3134,0.00010636507833791159,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_nrhs16,T12,kkt_pglib_opf_case1354_pegase_condensed_20,SPD,11192,136724,Float64,16,1,0.051472888,0.003009023,0.002933916,0.001903077,0.051040391,0.00291829,0.00291166,0.001579804,120598,2.787739e6,3134,6.697396768149495e-5,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_nrhs16,T12,kkt_pglib_opf_case14_ieee_condensed_1,SPD,118,1282,Float64,16,1,0.001057384,0.000479466,0.000394257,0.001058792,0.000936084,0.000331878,0.000358987,0.000476697,1027,15193.0,33,1.2908326616431468e-6,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_nrhs16,T12,kkt_pglib_opf_case14_ieee_condensed_10,SPD,118,1282,Float64,16,1,0.002164565,0.000532786,0.000485677,0.000509646,0.000908993,0.000325478,0.000363288,0.000430257,1027,15193.0,33,0.00026816205019114704,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_nrhs16,T12,kkt_pglib_opf_case14_ieee_condensed_11,SPD,118,1282,Float64,16,1,0.001020132,0.000425807,0.000357847,0.000449716,0.000952953,0.000349898,0.000330647,0.000428507,1027,15193.0,33,1.4705124707443054e-5,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_nrhs16,T12,lap2d_300,SPD,90000,448800,Float64,16,1,0.325324887,0.03152837,0.031424426,0.008513792,0.314441856,0.031439825,0.031318001,0.008498163,2465905,3.73611053e8,20495,1.7851598547374033e-12,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,cholesky_nrhs16,T12,lap3d_40,SPD,64000,438400,Float64,16,1,0.386902999,0.223042271,0.22320726,0.049068244,0.385093288,0.222839828,0.222611719,0.048659465,14387160,1.6401480134e10,11066,8.448190094604811e-14,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt,T15,Boeing/bcsstk38,S,8032,355460,Float64,1,1,0.060624225,0.131407119,0.131362702,0.002029925,0.059439843,0.13137589,0.131347536,0.001910636,804613,1.40793119e8,604,1.4180843867122588e-10,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt,T15,GHS_psdef/apache2,S,715176,4817870,Float64,1,1,7.107202684,90.755114345,91.203945714,0.08917829,7.107202684,90.755114345,91.203945714,0.08917829,129200941,1.66491403722e11,123689,1.629045645261273e-10,1,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt,T15,HB/bcsstk17,S,10974,428650,Float64,1,1,0.071961975,0.197887792,0.197856718,0.003685172,0.070547262,0.197867827,0.197776184,0.003669032,1043601,1.6795197e8,1300,3.693578455267767e-11,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt,T15,kkt_pglib_opf_case118_ieee_condensed_1,S,1088,12860,Float64,1,1,0.005745238,0.001926796,0.001701419,0.000740874,0.005228572,0.001491029,0.001513493,0.000723474,11634,219042.0,303,4.302669682539129e-5,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt,T15,kkt_pglib_opf_case118_ieee_condensed_10,S,1088,12860,Float64,1,1,0.005194696,0.002214169,0.002787787,0.001750367,0.005080131,0.001637618,0.001799307,0.001066752,11634,219042.0,303,1.1399610969542334e-5,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt,T15,kkt_pglib_opf_case118_ieee_condensed_20,S,1088,12860,Float64,1,1,0.00525929,0.001663352,0.002498752,0.000871243,0.00520416,0.001584528,0.001724887,0.000754464,11634,219042.0,303,0.08325458299212221,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt,T15,kkt_pglib_opf_case118_ieee_k2_1,S,3150,17714,Float64,1,1,0.055343651,0.00150123,0.001978034,0.000896683,0.054610868,0.00139382,0.00142681,0.000823674,21032,308794.0,1917,0.09056867773597634,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt,T15,kkt_pglib_opf_case118_ieee_k2_10,S,3150,17714,Float64,1,1,0.0555984,0.00139845,0.001353419,0.001494139,0.054707287,0.001327759,0.001330961,0.000849923,20542,292847.0,1906,0.01922668190063813,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt,T15,kkt_pglib_opf_case118_ieee_k2_20,S,3150,17714,Float64,1,1,0.05421622,0.00133248,0.001501393,0.001588253,0.053774374,0.001320149,0.001313525,0.000957439,20507,291377.0,1889,0.014854294291476057,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt,T15,kkt_pglib_opf_case1354_pegase_condensed_1,S,11192,136724,Float64,1,1,0.054796466,0.009824687,0.009603797,0.001224495,0.054552087,0.009600263,0.009591012,0.001200021,120598,2.787739e6,3134,0.00027545234473510356,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt,T15,kkt_pglib_opf_case1354_pegase_condensed_10,S,11192,136724,Float64,1,1,0.055422452,0.009602167,0.009617228,0.002194214,0.05428184,0.009593329,0.009571867,0.00123898,120598,2.787739e6,3134,9.488278667035474e-5,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt,T15,kkt_pglib_opf_case1354_pegase_condensed_20,S,11192,136724,Float64,1,1,0.054016472,0.011066087,0.009729919,0.00145556,0.053790238,0.010603346,0.009716458,0.00121572,120598,2.787739e6,3134,5.0192353762337224e-5,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt,T15,kkt_pglib_opf_case1354_pegase_k2_1,S,33811,188063,Float64,1,1,1.004016075,0.015597837,0.007240037,0.002638421,0.99742274,0.007233705,0.007170497,0.001572179,215953,3.404739e6,19624,13.01856461229925,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt,T15,kkt_pglib_opf_case1354_pegase_k2_10,S,33811,188063,Float64,1,1,1.065767901,0.007882551,0.007240921,0.00260473,1.062880945,0.007190032,0.00628589,0.00135963,220146,3.494638e6,19496,52.848192429671556,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt,T15,kkt_pglib_opf_case1354_pegase_k2_20,S,33811,188063,Float64,1,1,1.077886349,0.013019252,0.011003308,0.001685644,1.073363761,0.008562279,0.007917806,0.001496138,221292,3.599399e6,19600,47.992929768911,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt,T15,kkt_pglib_opf_case14_ieee_condensed_1,S,118,1282,Float64,1,1,0.001127281,0.000385627,0.000436776,0.000539256,0.001057122,0.000364507,0.000371267,0.000429547,1027,15193.0,33,1.1657999541762487e-6,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt,T15,kkt_pglib_opf_case14_ieee_condensed_10,S,118,1282,Float64,1,1,0.001352675,0.000463447,0.000472476,0.000465566,0.001049342,0.000369728,0.000429867,0.000428587,1027,15193.0,33,0.00013880687786021974,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt,T15,kkt_pglib_opf_case14_ieee_condensed_11,S,118,1282,Float64,1,1,0.001277951,0.000508636,0.000710394,0.000487586,0.001036812,0.000442206,0.000481592,0.000427987,1027,15193.0,33,1.1319105246087817e-5,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt,T15,kkt_pglib_opf_case14_ieee_k2_1,S,344,1924,Float64,1,1,0.004259567,0.000838714,0.000668709,0.000575875,0.004160759,0.000555685,0.000589436,0.000542126,2139,26663.0,186,7.679955110816424e-9,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt,T15,kkt_pglib_opf_case14_ieee_k2_10,S,344,1924,Float64,1,1,0.005011122,0.000560776,0.000680865,0.000743114,0.004824065,0.000556056,0.000606406,0.000520316,2154,27106.0,185,5.877775182937206e-6,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt,T15,kkt_pglib_opf_case14_ieee_k2_15,S,344,1924,Float64,1,1,0.003013006,0.001146422,0.001168541,0.000565445,0.00272051,0.000994923,0.000940113,0.000559966,3273,56950.0,85,0.480402287562271,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt,T15,lap2d_300,S,90000,448800,Float64,1,1,0.352224026,0.221263451,0.221137994,0.003748761,0.347788493,0.220387852,0.221107635,0.003679562,2465905,3.73611053e8,20495,1.6779389216462592e-12,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt,T15,lap3d_40,S,64000,438400,Float64,1,1,0.427970632,14.612296974,14.613361251,0.018982602,0.427970632,14.612296974,14.613361251,0.018982602,14387160,1.6401480134e10,11066,9.063326423318782e-14,1,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt_ir2,T16,kkt_pglib_opf_case118_ieee_k2_1,S,3150,17714,Float64,1,1,0.055196048,0.001461409,0.001667507,0.003909787,0.054259484,0.00141077,0.001403119,0.003774639,21032,308794.0,1917,3.2260005214076745e-9,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt_ir2,T16,kkt_pglib_opf_case118_ieee_k2_10,S,3150,17714,Float64,1,1,0.055369095,0.00136816,0.001362058,0.004290508,0.054318588,0.00133382,0.001339428,0.003783444,20542,292847.0,1906,5.5897389139096295e-9,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt_ir2,T16,kkt_pglib_opf_case118_ieee_k2_20,S,3150,17714,Float64,1,1,0.054366693,0.001350819,0.001671586,0.004152631,0.053275971,0.001335069,0.001420728,0.0037175,20507,291377.0,1889,1.160357102037044e-8,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt_ir2,T16,kkt_pglib_opf_case1354_pegase_k2_1,S,33811,188063,Float64,1,1,1.010063189,0.007270851,0.008991956,0.022317976,1.003646642,0.007231236,0.007204166,0.021328615,215953,3.404739e6,19624,0.034762418896692626,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt_ir2,T16,kkt_pglib_opf_case1354_pegase_k2_10,S,33811,188063,Float64,1,1,1.067244555,0.01034738,0.00906991,0.022827412,1.061806312,0.006174879,0.006321956,0.021533663,220146,3.494638e6,19496,7.936310503696266,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt_ir2,T16,kkt_pglib_opf_case1354_pegase_k2_20,S,33811,188063,Float64,1,1,1.07477958,0.011161858,0.011246247,0.022811512,1.063724657,0.009126394,0.007992944,0.021728675,221292,3.599399e6,19600,0.2161981921511238,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt_ir2,T16,kkt_pglib_opf_case14_ieee_k2_1,S,344,1924,Float64,1,1,0.004491031,0.000713474,0.000881953,0.002160144,0.004418033,0.000551436,0.000564095,0.001663596,2139,26663.0,186,6.147932736718633e-13,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt_ir2,T16,kkt_pglib_opf_case14_ieee_k2_10,S,344,1924,Float64,1,1,0.005043358,0.000593745,0.000754834,0.001786805,0.004973018,0.000586476,0.000562155,0.001700796,2154,27106.0,185,2.4139806966654987e-14,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 +sds,ldlt_ir2,T16,kkt_pglib_opf_case14_ieee_k2_15,S,344,1924,Float64,1,1,0.002677508,0.000966181,0.000857869,0.002308462,0.002588568,0.000854268,0.000827763,0.00185908,3273,56950.0,85,5.6903688411491105e-9,5,ok,NVIDIA GeForce RTX 4080,0.1.0,9d280d0+dirty,2026-10-02 diff --git a/bench/profile/phase_split.csv b/bench/profile/phase_split.csv new file mode 100644 index 0000000..177ad5e --- /dev/null +++ b/bench/profile/phase_split.csv @@ -0,0 +1,36 @@ +matrix,structure,n,nnz,lnnz,nsuper,a_fronts,subtrees,largest_subtree,b_fronts,c_fronts,groups,nlevels,refac_wall_ms,refac_kernels,refac_copies,refac_busy_ms,refac_top_ms,refac_top_name,refac_top_blocks,solve_wall_ms,solve_kernels,solve_copies,solve_busy_ms,solve_top_ms,solve_top_name,relres +lap2d_300,SPD,90000,448800,2465905,20495,19955,806,262,523,17,46,27,31.44529,202,36,31.295207991206553,3.0834229983156547,subtree_cholesky_kernel,696,3.294863,163,1,2.9057469946565107,0.48890600010054186,solve_fwd_kernel,1.7774016608331202e-12 +lap2d_300,S,90000,448800,2465905,20495,19955,806,262,523,17,46,27,220.802131,47,2,220.83750395540847,35.3783639948233,front_ldlt_kernel,2,3.665859,198,1,3.1881720133242197,0.5999050044920295,solve_fwd_kernel,1.6783599803865397e-12 +lap3d_40,SPD,64000,438400,14387160,11066,9851,1498,27,1058,157,88,36,223.953453,1222,320,223.2460540253669,6.0352479995344765,_extend_add_kernel,2,16.768692,1429,1,9.254060081730131,0.35596900124801323,trsm_lt_kernel,7.475631434439173e-14 +HB/bcsstk17,SPD,10974,428650,1043601,1300,992,815,8,290,18,69,34,27.849983,243,38,27.598129978287034,1.0920340064330958,front_cholesky_kernel,1,3.491351,191,1,3.0197519954526797,0.06867199408588931,solve_fwd_kernel,5.105278871525632e-11 +HB/bcsstk17,S,10974,428650,1043601,1300,992,815,8,290,18,69,34,197.960209,70,2,198.0250450433232,31.505417995504104,front_ldlt_kernel,1,3.635751,228,1,3.1704700086265802,0.07036799797788262,solve_fwd_kernel,3.6684981140633515e-11 +Boeing/bcsstk38,SPD,8032,355460,804613,604,341,223,7,254,9,59,14,22.660463,143,20,22.270702036621515,1.0720339996623807,front_cholesky_kernel,1,1.884735,96,1,1.5357809970737435,0.07619200187036768,solve_fwd_kernel,8.26086983891215e-11 +Boeing/bcsstk38,S,8032,355460,804613,604,341,223,7,254,9,59,14,131.820426,60,2,132.24200403055875,20.83540699823061,front_ldlt_kernel,1,1.945973,115,1,1.5975740971043706,0.07766400085529312,solve_fwd_kernel,1.0597584716249112e-10 +GHS_psdef/apache2,SPD,715176,4817870,129200941,123689,112442,15048,30,10493,754,105,35,1029.878895,6608,1570,1024.3736852353322,28.693181993730832,subtree_cholesky_kernel,3287,80.469638,6631,1,55.67874774715165,0.9998429959523492,solve_bwd_kernel,1.5829650410070863e-10 +kkt_pglib_opf_case118_ieee_condensed_1,SPD,1088,12860,11634,303,40,40,1,263,0,29,23,0.914522,30,2,0.6628190167248249,0.0606399989919737,front_cholesky_kernel,1,0.726064,48,1,0.38377896999008954,0.020961000700481236,solve_fwd_kernel,0.000152235936716747 +kkt_pglib_opf_case118_ieee_condensed_1,S,1088,12860,11634,303,40,40,1,263,0,29,23,1.510877,30,2,1.3022100029047579,0.1856320013757795,front_ldlt_kernel,1,0.769993,49,1,0.41168000461766496,0.022527994588017464,solve_fwd_kernel,9.7765347095072e-5 +kkt_pglib_opf_case118_ieee_condensed_10,SPD,1088,12860,11634,303,40,40,1,263,0,29,23,0.880533,30,2,0.6480979936895892,0.060800004575867206,front_cholesky_kernel,1,0.723924,48,1,0.38406903331633657,0.02105600287904963,solve_fwd_kernel,7.797050029651081e-6 +kkt_pglib_opf_case118_ieee_condensed_10,S,1088,12860,11634,303,40,40,1,263,0,29,23,1.472488,30,2,1.660386027651839,0.4418900061864406,front_ldlt_kernel,1,0.808113,49,1,0.411361972510349,0.022303996956907213,solve_fwd_kernel,1.0320953105576168e-5 +kkt_pglib_opf_case118_ieee_condensed_20,SPD,1088,12860,11634,303,40,40,1,263,0,29,23,0.875772,30,2,0.6487719729193486,0.06060799933038652,front_cholesky_kernel,1,0.743034,48,1,0.38307700015138835,0.02105600287904963,solve_fwd_kernel,0.0801795774065569 +kkt_pglib_opf_case118_ieee_condensed_20,S,1088,12860,11634,303,40,40,1,263,0,29,23,1.569247,30,2,1.3665969818248414,0.1975370032596402,front_ldlt_kernel,1,0.763124,49,1,0.4106239939574152,0.022079999325796962,solve_fwd_kernel,0.07316220446962236 +kkt_pglib_opf_case118_ieee_k2_1,S,3150,17714,21032,1917,1312,480,8,605,0,28,31,1.453888,29,2,1.2296700006118044,0.11494399950606748,front_ldlt_kernel,1,0.882853,59,1,0.454590015579015,0.022976004402153194,solve_fwd_kernel,0.3310520998820626 +kkt_pglib_opf_case118_ieee_k2_10,S,3150,17714,20542,1906,1302,477,8,604,0,28,31,1.342209,29,2,1.1530609626788646,0.10304099851055071,front_ldlt_kernel,1,0.899903,59,1,0.45564699394162744,0.021536005078814924,solve_fwd_kernel,0.012613239140897684 +kkt_pglib_opf_case118_ieee_k2_20,S,3150,17714,20507,1889,1288,474,8,601,0,28,31,1.336359,29,2,1.148035989899654,0.10806499631144106,front_ldlt_kernel,1,0.885523,59,1,0.4536690321401693,0.0208000055863522,solve_fwd_kernel,0.0325397117574032 +kkt_pglib_opf_case1354_pegase_condensed_1,SPD,11192,136724,120598,3134,1719,544,18,1415,0,58,39,2.931405,59,2,2.687277054064907,0.3060490053030662,front_cholesky_kernel,1,1.123841,62,1,0.9010280191432685,0.04396800068207085,solve_fwd_kernel,0.0002922762851143221 +kkt_pglib_opf_case1354_pegase_condensed_1,S,11192,136724,120598,3134,1719,544,18,1415,0,58,39,9.664206,59,2,9.863708000921179,1.7467569996370003,front_ldlt_kernel,1,1.24403,63,1,0.9552019982947968,0.04595199425239116,solve_fwd_kernel,0.00028641285196672524 +kkt_pglib_opf_case1354_pegase_condensed_10,SPD,11192,136724,120598,3134,1719,544,18,1415,0,58,39,2.915935,59,2,2.6555930089671165,0.30630500259576365,front_cholesky_kernel,1,1.209319,62,1,0.899747981748078,0.04396800068207085,solve_fwd_kernel,9.90395905078389e-5 +kkt_pglib_opf_case1354_pegase_condensed_10,S,11192,136724,120598,3134,1719,544,18,1415,0,58,39,9.68094,59,2,9.450581004784908,0.9588500033714809,front_ldlt_kernel,1,1.20882,63,1,0.954018032643944,0.04604800051311031,solve_fwd_kernel,0.00010154295478790375 +kkt_pglib_opf_case1354_pegase_condensed_20,SPD,11192,136724,120598,3134,1719,544,18,1415,0,58,39,2.920785,59,2,2.6292209440725856,0.30598499870393425,front_cholesky_kernel,1,1.140891,62,1,0.9003860104712658,0.043807995098177344,solve_fwd_kernel,5.2680720800196e-5 +kkt_pglib_opf_case1354_pegase_condensed_20,S,11192,136724,120598,3134,1719,544,18,1415,0,58,39,9.799626,59,2,9.55247203091858,1.0031709971372038,front_ldlt_kernel,1,1.248419,63,1,0.9538879676256329,0.04585600254358724,solve_fwd_kernel,4.977225669383965e-5 +kkt_pglib_opf_case1354_pegase_k2_1,S,33811,188063,215953,19624,17466,4207,43,2158,0,57,45,7.18248,58,2,7.405935044516809,0.7182409972301684,front_ldlt_kernel,1,1.450433,85,1,1.0938220075331628,0.11433700274210423,solve_fwd_kernel,19.27417625783232 +kkt_pglib_opf_case1354_pegase_k2_10,S,33811,188063,220146,19496,17333,4178,35,2163,0,53,40,6.139348,54,2,5.9121530066477135,0.4744660036521964,front_ldlt_kernel,1,1.311609,73,1,0.9801010019145906,0.09952000254997984,solve_fwd_kernel,70.23442035360941 +kkt_pglib_opf_case1354_pegase_k2_20,S,33811,188063,221292,19600,17473,4143,39,2127,0,53,44,7.984944,54,2,7.733236969215795,0.8649939991300926,front_ldlt_kernel,1,1.376158,79,1,1.0511369910091162,0.10255999950459227,solve_fwd_kernel,23.69776716342436 +kkt_pglib_opf_case14_ieee_condensed_1,SPD,118,1282,1027,33,0,0,0,33,0,11,11,0.363787,12,2,0.17347301036352292,0.02476800000295043,front_cholesky_kernel,12,0.417837,24,1,0.13132902677170932,0.010367999493610114,solve_fwd_kernel,1.3024460439372e-6 +kkt_pglib_opf_case14_ieee_condensed_1,S,118,1282,1027,33,0,0,0,33,0,11,11,0.353667,12,2,0.24371498147957027,0.03344099968671799,front_ldlt_kernel,1,0.444556,25,1,0.14550499327015132,0.011488002201076597,solve_fwd_kernel,1.1657999541762487e-6 +kkt_pglib_opf_case14_ieee_condensed_10,SPD,118,1282,1027,33,0,0,0,33,0,11,11,0.339417,12,2,0.1670400088187307,0.022559994249604642,front_cholesky_kernel,2,0.422286,24,1,0.13225700240582228,0.010624004062265158,solve_fwd_kernel,0.00017225756315640304 +kkt_pglib_opf_case14_ieee_condensed_10,S,118,1282,1027,33,0,0,0,33,0,11,11,0.425696,12,2,0.25017598090926185,0.03987200034316629,front_ldlt_kernel,1,0.445507,25,1,0.14496200310532004,0.011393000022508204,solve_fwd_kernel,0.00013880687786021974 +kkt_pglib_opf_case14_ieee_condensed_11,SPD,118,1282,1027,33,0,0,0,33,0,11,11,0.327367,12,2,0.16668799798935652,0.022528001863975078,front_cholesky_kernel,2,0.392846,24,1,0.13193600898375735,0.010656003723852336,solve_fwd_kernel,1.5565096136251653e-5 +kkt_pglib_opf_case14_ieee_condensed_11,S,118,1282,1027,33,0,0,0,33,0,11,11,0.370107,12,2,0.2443189951009117,0.034431999665685,front_ldlt_kernel,1,0.445406,25,1,0.14496197400148958,0.011359996278770268,solve_fwd_kernel,1.1319105246087817e-5 +kkt_pglib_opf_case14_ieee_k2_1,S,344,1924,2139,186,39,39,1,147,0,16,16,0.541996,17,2,0.3788810208789073,0.05417600186774507,front_ldlt_kernel,1,0.563405,35,1,0.1965429910342209,0.013056000170763582,solve_fwd_kernel,7.679955110816424e-9 +kkt_pglib_opf_case14_ieee_k2_10,S,344,1924,2154,185,38,38,1,147,0,16,16,0.592724,17,2,0.37580700882244855,0.054080002882983536,front_ldlt_kernel,1,0.574685,35,1,0.1967699863598682,0.013536002370528877,solve_fwd_kernel,2.868427965445951e-6 +kkt_pglib_opf_case14_ieee_k2_15,S,344,1924,3273,85,3,3,1,82,0,17,16,0.845124,18,2,0.6576340019819327,0.12364800204522908,front_ldlt_kernel,1,0.549785,35,1,0.23103800049284473,0.018432001525070518,solve_fwd_kernel,0.3953790651029023 diff --git a/bench/profile/phase_split.md b/bench/profile/phase_split.md new file mode 100644 index 0000000..d9b982b --- /dev/null +++ b/bench/profile/phase_split.md @@ -0,0 +1,123 @@ +# SDS phase split on CUDA (performance.md, experiment 0) + +Generated by `bench/profile_phases.jl` on NVIDIA GeForce RTX 4080, 2026-10-02. Wall time: best of 5 warm runs at full clock; a sixth run per phase under `CUDA.@profile` gives the kernels. *busy* is the sum of kernel durations; *top* is the longest kernel, its share of *busy* and its number of thread blocks. + +## Schedule + +| matrix | structure | n | nnz(L) | supernodes | A fronts | A subtrees | largest subtree | B fronts | C fronts | launch groups | levels | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| lap2d_300 | SPD | 90000 | 2.47e+06 | 20495 | 19955 | 806 | 262 | 523 | 17 | 46 | 27 | +| lap2d_300 | S | 90000 | 2.47e+06 | 20495 | 19955 | 806 | 262 | 523 | 17 | 46 | 27 | +| lap3d_40 | SPD | 64000 | 1.44e+07 | 11066 | 9851 | 1498 | 27 | 1058 | 157 | 88 | 36 | +| HB/bcsstk17 | SPD | 10974 | 1.04e+06 | 1300 | 992 | 815 | 8 | 290 | 18 | 69 | 34 | +| HB/bcsstk17 | S | 10974 | 1.04e+06 | 1300 | 992 | 815 | 8 | 290 | 18 | 69 | 34 | +| Boeing/bcsstk38 | SPD | 8032 | 8.05e+05 | 604 | 341 | 223 | 7 | 254 | 9 | 59 | 14 | +| Boeing/bcsstk38 | S | 8032 | 8.05e+05 | 604 | 341 | 223 | 7 | 254 | 9 | 59 | 14 | +| GHS_psdef/apache2 | SPD | 715176 | 1.29e+08 | 123689 | 112442 | 15048 | 30 | 10493 | 754 | 105 | 35 | +| kkt_pglib_opf_case118_ieee_condensed_1 | SPD | 1088 | 1.16e+04 | 303 | 40 | 40 | 1 | 263 | 0 | 29 | 23 | +| kkt_pglib_opf_case118_ieee_condensed_1 | S | 1088 | 1.16e+04 | 303 | 40 | 40 | 1 | 263 | 0 | 29 | 23 | +| kkt_pglib_opf_case118_ieee_condensed_10 | SPD | 1088 | 1.16e+04 | 303 | 40 | 40 | 1 | 263 | 0 | 29 | 23 | +| kkt_pglib_opf_case118_ieee_condensed_10 | S | 1088 | 1.16e+04 | 303 | 40 | 40 | 1 | 263 | 0 | 29 | 23 | +| kkt_pglib_opf_case118_ieee_condensed_20 | SPD | 1088 | 1.16e+04 | 303 | 40 | 40 | 1 | 263 | 0 | 29 | 23 | +| kkt_pglib_opf_case118_ieee_condensed_20 | S | 1088 | 1.16e+04 | 303 | 40 | 40 | 1 | 263 | 0 | 29 | 23 | +| kkt_pglib_opf_case118_ieee_k2_1 | S | 3150 | 2.1e+04 | 1917 | 1312 | 480 | 8 | 605 | 0 | 28 | 31 | +| kkt_pglib_opf_case118_ieee_k2_10 | S | 3150 | 2.05e+04 | 1906 | 1302 | 477 | 8 | 604 | 0 | 28 | 31 | +| kkt_pglib_opf_case118_ieee_k2_20 | S | 3150 | 2.05e+04 | 1889 | 1288 | 474 | 8 | 601 | 0 | 28 | 31 | +| kkt_pglib_opf_case1354_pegase_condensed_1 | SPD | 11192 | 1.21e+05 | 3134 | 1719 | 544 | 18 | 1415 | 0 | 58 | 39 | +| kkt_pglib_opf_case1354_pegase_condensed_1 | S | 11192 | 1.21e+05 | 3134 | 1719 | 544 | 18 | 1415 | 0 | 58 | 39 | +| kkt_pglib_opf_case1354_pegase_condensed_10 | SPD | 11192 | 1.21e+05 | 3134 | 1719 | 544 | 18 | 1415 | 0 | 58 | 39 | +| kkt_pglib_opf_case1354_pegase_condensed_10 | S | 11192 | 1.21e+05 | 3134 | 1719 | 544 | 18 | 1415 | 0 | 58 | 39 | +| kkt_pglib_opf_case1354_pegase_condensed_20 | SPD | 11192 | 1.21e+05 | 3134 | 1719 | 544 | 18 | 1415 | 0 | 58 | 39 | +| kkt_pglib_opf_case1354_pegase_condensed_20 | S | 11192 | 1.21e+05 | 3134 | 1719 | 544 | 18 | 1415 | 0 | 58 | 39 | +| kkt_pglib_opf_case1354_pegase_k2_1 | S | 33811 | 2.16e+05 | 19624 | 17466 | 4207 | 43 | 2158 | 0 | 57 | 45 | +| kkt_pglib_opf_case1354_pegase_k2_10 | S | 33811 | 2.2e+05 | 19496 | 17333 | 4178 | 35 | 2163 | 0 | 53 | 40 | +| kkt_pglib_opf_case1354_pegase_k2_20 | S | 33811 | 2.21e+05 | 19600 | 17473 | 4143 | 39 | 2127 | 0 | 53 | 44 | +| kkt_pglib_opf_case14_ieee_condensed_1 | SPD | 118 | 1.03e+03 | 33 | 0 | 0 | 0 | 33 | 0 | 11 | 11 | +| kkt_pglib_opf_case14_ieee_condensed_1 | S | 118 | 1.03e+03 | 33 | 0 | 0 | 0 | 33 | 0 | 11 | 11 | +| kkt_pglib_opf_case14_ieee_condensed_10 | SPD | 118 | 1.03e+03 | 33 | 0 | 0 | 0 | 33 | 0 | 11 | 11 | +| kkt_pglib_opf_case14_ieee_condensed_10 | S | 118 | 1.03e+03 | 33 | 0 | 0 | 0 | 33 | 0 | 11 | 11 | +| kkt_pglib_opf_case14_ieee_condensed_11 | SPD | 118 | 1.03e+03 | 33 | 0 | 0 | 0 | 33 | 0 | 11 | 11 | +| kkt_pglib_opf_case14_ieee_condensed_11 | S | 118 | 1.03e+03 | 33 | 0 | 0 | 0 | 33 | 0 | 11 | 11 | +| kkt_pglib_opf_case14_ieee_k2_1 | S | 344 | 2.14e+03 | 186 | 39 | 39 | 1 | 147 | 0 | 16 | 16 | +| kkt_pglib_opf_case14_ieee_k2_10 | S | 344 | 2.15e+03 | 185 | 38 | 38 | 1 | 147 | 0 | 16 | 16 | +| kkt_pglib_opf_case14_ieee_k2_15 | S | 344 | 3.27e+03 | 85 | 3 | 3 | 1 | 82 | 0 | 17 | 16 | + +## Refactorization + +| matrix | structure | wall ms | kernels | copies | busy ms | top kernel | top ms | top share | top blocks | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| lap2d_300 | SPD | 31.4 | 202 | 36 | 31.3 | `subtree_cholesky_kernel` | 3.08 | 10% | 696 | +| lap2d_300 | S | 221 | 47 | 2 | 221 | `front_ldlt_kernel` | 35.4 | 16% | 2 | +| lap3d_40 | SPD | 224 | 1222 | 320 | 223 | `_extend_add_kernel` | 6.04 | 3% | 2 | +| HB/bcsstk17 | SPD | 27.8 | 243 | 38 | 27.6 | `front_cholesky_kernel` | 1.09 | 4% | 1 | +| HB/bcsstk17 | S | 198 | 70 | 2 | 198 | `front_ldlt_kernel` | 31.5 | 16% | 1 | +| Boeing/bcsstk38 | SPD | 22.7 | 143 | 20 | 22.3 | `front_cholesky_kernel` | 1.07 | 5% | 1 | +| Boeing/bcsstk38 | S | 132 | 60 | 2 | 132 | `front_ldlt_kernel` | 20.8 | 16% | 1 | +| GHS_psdef/apache2 | SPD | 1.03e+03 | 6608 | 1570 | 1.02e+03 | `subtree_cholesky_kernel` | 28.7 | 3% | 3287 | +| kkt_pglib_opf_case118_ieee_condensed_1 | SPD | 0.915 | 30 | 2 | 0.663 | `front_cholesky_kernel` | 0.0606 | 9% | 1 | +| kkt_pglib_opf_case118_ieee_condensed_1 | S | 1.51 | 30 | 2 | 1.3 | `front_ldlt_kernel` | 0.186 | 14% | 1 | +| kkt_pglib_opf_case118_ieee_condensed_10 | SPD | 0.881 | 30 | 2 | 0.648 | `front_cholesky_kernel` | 0.0608 | 9% | 1 | +| kkt_pglib_opf_case118_ieee_condensed_10 | S | 1.47 | 30 | 2 | 1.66 | `front_ldlt_kernel` | 0.442 | 27% | 1 | +| kkt_pglib_opf_case118_ieee_condensed_20 | SPD | 0.876 | 30 | 2 | 0.649 | `front_cholesky_kernel` | 0.0606 | 9% | 1 | +| kkt_pglib_opf_case118_ieee_condensed_20 | S | 1.57 | 30 | 2 | 1.37 | `front_ldlt_kernel` | 0.198 | 14% | 1 | +| kkt_pglib_opf_case118_ieee_k2_1 | S | 1.45 | 29 | 2 | 1.23 | `front_ldlt_kernel` | 0.115 | 9% | 1 | +| kkt_pglib_opf_case118_ieee_k2_10 | S | 1.34 | 29 | 2 | 1.15 | `front_ldlt_kernel` | 0.103 | 9% | 1 | +| kkt_pglib_opf_case118_ieee_k2_20 | S | 1.34 | 29 | 2 | 1.15 | `front_ldlt_kernel` | 0.108 | 9% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_1 | SPD | 2.93 | 59 | 2 | 2.69 | `front_cholesky_kernel` | 0.306 | 11% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_1 | S | 9.66 | 59 | 2 | 9.86 | `front_ldlt_kernel` | 1.75 | 18% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_10 | SPD | 2.92 | 59 | 2 | 2.66 | `front_cholesky_kernel` | 0.306 | 12% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_10 | S | 9.68 | 59 | 2 | 9.45 | `front_ldlt_kernel` | 0.959 | 10% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_20 | SPD | 2.92 | 59 | 2 | 2.63 | `front_cholesky_kernel` | 0.306 | 12% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_20 | S | 9.8 | 59 | 2 | 9.55 | `front_ldlt_kernel` | 1 | 11% | 1 | +| kkt_pglib_opf_case1354_pegase_k2_1 | S | 7.18 | 58 | 2 | 7.41 | `front_ldlt_kernel` | 0.718 | 10% | 1 | +| kkt_pglib_opf_case1354_pegase_k2_10 | S | 6.14 | 54 | 2 | 5.91 | `front_ldlt_kernel` | 0.474 | 8% | 1 | +| kkt_pglib_opf_case1354_pegase_k2_20 | S | 7.98 | 54 | 2 | 7.73 | `front_ldlt_kernel` | 0.865 | 11% | 1 | +| kkt_pglib_opf_case14_ieee_condensed_1 | SPD | 0.364 | 12 | 2 | 0.173 | `front_cholesky_kernel` | 0.0248 | 14% | 12 | +| kkt_pglib_opf_case14_ieee_condensed_1 | S | 0.354 | 12 | 2 | 0.244 | `front_ldlt_kernel` | 0.0334 | 14% | 1 | +| kkt_pglib_opf_case14_ieee_condensed_10 | SPD | 0.339 | 12 | 2 | 0.167 | `front_cholesky_kernel` | 0.0226 | 14% | 2 | +| kkt_pglib_opf_case14_ieee_condensed_10 | S | 0.426 | 12 | 2 | 0.25 | `front_ldlt_kernel` | 0.0399 | 16% | 1 | +| kkt_pglib_opf_case14_ieee_condensed_11 | SPD | 0.327 | 12 | 2 | 0.167 | `front_cholesky_kernel` | 0.0225 | 14% | 2 | +| kkt_pglib_opf_case14_ieee_condensed_11 | S | 0.37 | 12 | 2 | 0.244 | `front_ldlt_kernel` | 0.0344 | 14% | 1 | +| kkt_pglib_opf_case14_ieee_k2_1 | S | 0.542 | 17 | 2 | 0.379 | `front_ldlt_kernel` | 0.0542 | 14% | 1 | +| kkt_pglib_opf_case14_ieee_k2_10 | S | 0.593 | 17 | 2 | 0.376 | `front_ldlt_kernel` | 0.0541 | 14% | 1 | +| kkt_pglib_opf_case14_ieee_k2_15 | S | 0.845 | 18 | 2 | 0.658 | `front_ldlt_kernel` | 0.124 | 19% | 1 | + +## Solve + +| matrix | structure | wall ms | kernels | copies | busy ms | top kernel | top ms | top share | top blocks | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| lap2d_300 | SPD | 3.29 | 163 | 1 | 2.91 | `solve_fwd_kernel` | 0.489 | 17% | 806 | +| lap2d_300 | S | 3.67 | 198 | 1 | 3.19 | `solve_fwd_kernel` | 0.6 | 19% | 806 | +| lap3d_40 | SPD | 16.8 | 1429 | 1 | 9.25 | `trsm_lt_kernel` | 0.356 | 4% | 50 | +| HB/bcsstk17 | SPD | 3.49 | 191 | 1 | 3.02 | `solve_fwd_kernel` | 0.0687 | 2% | 2 | +| HB/bcsstk17 | S | 3.64 | 228 | 1 | 3.17 | `solve_fwd_kernel` | 0.0704 | 2% | 2 | +| Boeing/bcsstk38 | SPD | 1.88 | 96 | 1 | 1.54 | `solve_fwd_kernel` | 0.0762 | 5% | 2 | +| Boeing/bcsstk38 | S | 1.95 | 115 | 1 | 1.6 | `solve_fwd_kernel` | 0.0777 | 5% | 2 | +| GHS_psdef/apache2 | SPD | 80.5 | 6631 | 1 | 55.7 | `solve_bwd_kernel` | 1 | 2% | 15048 | +| kkt_pglib_opf_case118_ieee_condensed_1 | SPD | 0.726 | 48 | 1 | 0.384 | `solve_fwd_kernel` | 0.021 | 5% | 1 | +| kkt_pglib_opf_case118_ieee_condensed_1 | S | 0.77 | 49 | 1 | 0.412 | `solve_fwd_kernel` | 0.0225 | 5% | 1 | +| kkt_pglib_opf_case118_ieee_condensed_10 | SPD | 0.724 | 48 | 1 | 0.384 | `solve_fwd_kernel` | 0.0211 | 5% | 1 | +| kkt_pglib_opf_case118_ieee_condensed_10 | S | 0.808 | 49 | 1 | 0.411 | `solve_fwd_kernel` | 0.0223 | 5% | 1 | +| kkt_pglib_opf_case118_ieee_condensed_20 | SPD | 0.743 | 48 | 1 | 0.383 | `solve_fwd_kernel` | 0.0211 | 5% | 1 | +| kkt_pglib_opf_case118_ieee_condensed_20 | S | 0.763 | 49 | 1 | 0.411 | `solve_fwd_kernel` | 0.0221 | 5% | 1 | +| kkt_pglib_opf_case118_ieee_k2_1 | S | 0.883 | 59 | 1 | 0.455 | `solve_fwd_kernel` | 0.023 | 5% | 1 | +| kkt_pglib_opf_case118_ieee_k2_10 | S | 0.9 | 59 | 1 | 0.456 | `solve_fwd_kernel` | 0.0215 | 5% | 1 | +| kkt_pglib_opf_case118_ieee_k2_20 | S | 0.886 | 59 | 1 | 0.454 | `solve_fwd_kernel` | 0.0208 | 5% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_1 | SPD | 1.12 | 62 | 1 | 0.901 | `solve_fwd_kernel` | 0.044 | 5% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_1 | S | 1.24 | 63 | 1 | 0.955 | `solve_fwd_kernel` | 0.046 | 5% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_10 | SPD | 1.21 | 62 | 1 | 0.9 | `solve_fwd_kernel` | 0.044 | 5% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_10 | S | 1.21 | 63 | 1 | 0.954 | `solve_fwd_kernel` | 0.046 | 5% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_20 | SPD | 1.14 | 62 | 1 | 0.9 | `solve_fwd_kernel` | 0.0438 | 5% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_20 | S | 1.25 | 63 | 1 | 0.954 | `solve_fwd_kernel` | 0.0459 | 5% | 1 | +| kkt_pglib_opf_case1354_pegase_k2_1 | S | 1.45 | 85 | 1 | 1.09 | `solve_fwd_kernel` | 0.114 | 10% | 4207 | +| kkt_pglib_opf_case1354_pegase_k2_10 | S | 1.31 | 73 | 1 | 0.98 | `solve_fwd_kernel` | 0.0995 | 10% | 4178 | +| kkt_pglib_opf_case1354_pegase_k2_20 | S | 1.38 | 79 | 1 | 1.05 | `solve_fwd_kernel` | 0.103 | 10% | 4143 | +| kkt_pglib_opf_case14_ieee_condensed_1 | SPD | 0.418 | 24 | 1 | 0.131 | `solve_fwd_kernel` | 0.0104 | 8% | 1 | +| kkt_pglib_opf_case14_ieee_condensed_1 | S | 0.445 | 25 | 1 | 0.146 | `solve_fwd_kernel` | 0.0115 | 8% | 1 | +| kkt_pglib_opf_case14_ieee_condensed_10 | SPD | 0.422 | 24 | 1 | 0.132 | `solve_fwd_kernel` | 0.0106 | 8% | 1 | +| kkt_pglib_opf_case14_ieee_condensed_10 | S | 0.446 | 25 | 1 | 0.145 | `solve_fwd_kernel` | 0.0114 | 8% | 1 | +| kkt_pglib_opf_case14_ieee_condensed_11 | SPD | 0.393 | 24 | 1 | 0.132 | `solve_fwd_kernel` | 0.0107 | 8% | 1 | +| kkt_pglib_opf_case14_ieee_condensed_11 | S | 0.445 | 25 | 1 | 0.145 | `solve_fwd_kernel` | 0.0114 | 8% | 1 | +| kkt_pglib_opf_case14_ieee_k2_1 | S | 0.563 | 35 | 1 | 0.197 | `solve_fwd_kernel` | 0.0131 | 7% | 1 | +| kkt_pglib_opf_case14_ieee_k2_10 | S | 0.575 | 35 | 1 | 0.197 | `solve_fwd_kernel` | 0.0135 | 7% | 1 | +| kkt_pglib_opf_case14_ieee_k2_15 | S | 0.55 | 35 | 1 | 0.231 | `solve_fwd_kernel` | 0.0184 | 8% | 1 | diff --git a/bench/profile/phase_split_main_9d280d0.csv b/bench/profile/phase_split_main_9d280d0.csv new file mode 100644 index 0000000..72e567e --- /dev/null +++ b/bench/profile/phase_split_main_9d280d0.csv @@ -0,0 +1,36 @@ +matrix,structure,n,nnz,lnnz,nsuper,a_fronts,subtrees,largest_subtree,b_fronts,c_fronts,groups,nlevels,refac_wall_ms,refac_kernels,refac_copies,refac_busy_ms,refac_top_ms,refac_top_name,refac_top_blocks,solve_wall_ms,solve_kernels,solve_copies,solve_busy_ms,solve_top_ms,solve_top_name,relres +lap2d_300,SPD,90000,448800,2465905,20495,20248,304,541,230,17,39,27,40.938102,197,36,40.68908906629076,5.427025003882591,subtree_cholesky_kernel,126,4.656793,161,1,3.6051619827048853,0.8780499993008561,solve_fwd_kernel,1.7764847090947624e-12 +lap2d_300,S,90000,448800,2465905,20495,20248,304,541,230,17,39,27,238.803117,40,2,239.46214899478946,35.26122299808776,front_ldlt_kernel,1,4.664464,196,1,3.650341066531837,0.9709130026749335,solve_fwd_kernel,1.6830630388247175e-12 +lap3d_40,SPD,64000,438400,14387160,11066,9851,1498,27,1058,157,88,36,223.146783,1222,320,220.79544007283403,6.022865003615152,_extend_add_kernel,2,19.458185,1429,1,8.375450895982794,0.3541449987096712,trsm_lt_kernel,7.473313198575137e-14 +HB/bcsstk17,SPD,10974,428650,1043601,1300,1113,772,10,169,18,62,34,30.264521,236,38,29.00085204601055,1.472068004659377,subtree_cholesky_kernel,50,3.083579,189,1,2.499338035704568,0.06672000017715618,trsm_lt_kernel,3.971715314690285e-11 +HB/bcsstk17,S,10974,428650,1043601,1300,1113,772,10,169,18,62,34,197.62484,63,2,196.50214802095434,30.96597500552889,front_ldlt_kernel,1,3.574976,226,1,2.604549932584632,0.06966399814700708,solve_bwd_kernel,3.685735638327279e-11 +Boeing/bcsstk38,SPD,8032,355460,804613,604,452,207,10,143,9,50,14,23.333882,134,20,22.969184043176938,1.506052001786884,subtree_cholesky_kernel,26,1.855436,94,1,1.2522610413725488,0.06448000203818083,solve_bwd_kernel,1.0509838534963984e-10 +Boeing/bcsstk38,S,8032,355460,804613,604,452,207,10,143,9,50,14,128.317469,51,2,128.1734189542476,20.884090998151805,front_ldlt_kernel,1,2.476182,113,1,1.3014489595661871,0.06873599340906367,solve_fwd_kernel,1.2669274682594579e-10 +GHS_psdef/apache2,SPD,715176,4817870,129200941,123689,112442,15048,30,10493,754,105,35,1025.153138,6608,1570,1017.8589681090671,28.93130799930077,subtree_cholesky_kernel,3287,94.037878,6631,1,55.418416050088126,0.9681320007075556,solve_bwd_kernel,1.58294025958631e-10 +kkt_pglib_opf_case118_ieee_condensed_1,SPD,1088,12860,11634,303,303,1,303,0,0,1,23,3.67788,2,2,3.5011350046261214,3.498799000226427,subtree_cholesky_kernel,1,1.733865,4,1,1.5914630057523027,0.7962600066093728,solve_fwd_kernel,0.0001499152129335686 +kkt_pglib_opf_case118_ieee_condensed_1,S,1088,12860,11634,303,303,1,303,0,0,1,23,4.844423,2,2,4.702741003711708,4.69922100455733,subtree_ldlt_kernel,1,1.965725,5,1,1.8418639883748256,0.930755995796062,solve_fwd_kernel,6.969655897665449e-5 +kkt_pglib_opf_case118_ieee_condensed_10,SPD,1088,12860,11634,303,303,1,303,0,0,1,23,3.41398,2,2,3.4857429927797057,3.4833749959943816,subtree_cholesky_kernel,1,1.855136,4,1,1.5913980096229352,0.7962910021888092,solve_fwd_kernel,1.0007128179490731e-5 +kkt_pglib_opf_case118_ieee_condensed_10,S,1088,12860,11634,303,303,1,303,0,0,1,23,4.690519,2,2,4.543540002487134,4.540148001979105,subtree_ldlt_kernel,1,1.964487,5,1,1.842023993958719,0.9307239961344749,solve_fwd_kernel,9.740282741453158e-6 +kkt_pglib_opf_case118_ieee_condensed_20,SPD,1088,12860,11634,303,303,1,303,0,0,1,23,3.41129,2,2,3.2494539918843657,3.247117994760629,subtree_cholesky_kernel,1,1.708695,4,1,1.5917830023681745,0.7964839969645254,solve_fwd_kernel,0.0977012881293089 +kkt_pglib_opf_case118_ieee_condensed_20,S,1088,12860,11634,303,303,1,303,0,0,1,23,4.834262,2,2,4.689269000664353,4.685749001509976,subtree_ldlt_kernel,1,1.961965,5,1,1.842023993958719,0.9307560030720197,solve_fwd_kernel,0.07793477586360127 +kkt_pglib_opf_case118_ieee_k2_1,S,3150,17714,21032,1917,1917,1,1917,0,0,1,31,13.11925,2,2,12.973722004971933,12.966426002094522,subtree_ldlt_kernel,1,6.958695,5,1,6.728797990945168,3.3799830052885227,solve_bwd_kernel,0.23695532264533115 +kkt_pglib_opf_case118_ieee_k2_10,S,3150,17714,20542,1906,1906,1,1906,0,0,1,31,12.581965,2,2,12.612952006747946,12.605624004208948,subtree_ldlt_kernel,1,6.981328,5,1,7.264960986503866,3.9136809937190264,solve_fwd_kernel,0.01060874507064105 +kkt_pglib_opf_case118_ieee_k2_20,S,3150,17714,20507,1889,1889,1,1889,0,0,1,31,12.939176,2,2,12.75285700103268,12.745721003739163,subtree_ldlt_kernel,1,6.805352,5,1,6.65839798602974,3.327950995299034,solve_bwd_kernel,0.027042646838526467 +kkt_pglib_opf_case1354_pegase_condensed_1,SPD,11192,136724,120598,3134,3134,1,3134,0,0,1,39,38.511127,2,2,37.79882600065321,37.78900200268254,subtree_cholesky_kernel,1,16.640785,4,1,16.256424998573493,8.1917169954977,solve_fwd_kernel,0.00028169146220954487 +kkt_pglib_opf_case1354_pegase_condensed_1,S,11192,136724,120598,3134,3134,1,3134,0,0,1,39,56.734447,2,2,55.60293800954241,55.59359400649555,subtree_ldlt_kernel,1,19.398913,5,1,19.053269999858458,9.550283000862692,solve_fwd_kernel,0.00032169280786670235 +kkt_pglib_opf_case1354_pegase_condensed_10,SPD,11192,136724,120598,3134,3134,1,3134,0,0,1,39,36.573532,2,2,36.32653100794414,36.3164830050664,subtree_cholesky_kernel,1,16.459733,4,1,16.252361005172133,8.189988999220077,solve_fwd_kernel,0.00014028077734730922 +kkt_pglib_opf_case1354_pegase_condensed_10,S,11192,136724,120598,3134,3134,1,3134,0,0,1,39,54.508839,2,2,55.786108001484536,55.77676399843767,subtree_ldlt_kernel,1,19.592323,5,1,21.014174999436364,10.93729800049914,solve_fwd_kernel,9.534327884384974e-5 +kkt_pglib_opf_case1354_pegase_condensed_20,SPD,11192,136724,120598,3134,3134,1,3134,0,0,1,39,37.785906,2,2,36.31881900219014,36.30880299897399,subtree_cholesky_kernel,1,16.41682,4,1,16.25335499556968,8.191397995688021,solve_fwd_kernel,7.407112355532926e-5 +kkt_pglib_opf_case1354_pegase_condensed_20,S,11192,136724,120598,3134,3134,1,3134,0,0,1,39,55.567023,2,2,56.2434530002065,56.234140996821225,subtree_ldlt_kernel,1,19.345324,5,1,18.799060992023442,9.550442999170627,solve_fwd_kernel,4.9109638733395656e-5 +kkt_pglib_opf_case1354_pegase_k2_1,S,33811,188063,215953,19624,19624,1,19624,0,0,1,45,146.229977,2,2,146.57016799174016,146.5252709967899,subtree_ldlt_kernel,1,77.197792,5,1,73.74653799342923,39.22814799443586,solve_fwd_kernel,14.214742644178667 +kkt_pglib_opf_case1354_pegase_k2_10,S,33811,188063,220146,19496,19496,1,19496,0,0,1,40,140.622228,2,2,141.79128799878526,141.74376799928723,subtree_ldlt_kernel,1,75.377886,5,1,70.34442399890395,35.341779999725986,solve_fwd_kernel,51.66970951161263 +kkt_pglib_opf_case1354_pegase_k2_20,S,33811,188063,221292,19600,19600,1,19600,0,0,1,44,148.964114,2,2,143.31307399697835,143.26920199528104,subtree_ldlt_kernel,1,72.436652,5,1,70.32032799907029,35.37141199922189,solve_fwd_kernel,15.32248012620186 +kkt_pglib_opf_case14_ieee_condensed_1,SPD,118,1282,1027,33,33,1,33,0,0,1,11,0.566292,2,2,0.32124800054589286,0.31974400189938024,subtree_cholesky_kernel,1,0.303951,4,1,0.1733129975036718,0.08636800339445472,solve_fwd_kernel,1.6538473403875516e-6 +kkt_pglib_opf_case14_ieee_condensed_1,S,118,1282,1027,33,33,1,33,0,0,1,11,0.576646,2,2,0.43811299838125706,0.4352329997345805,subtree_ldlt_kernel,1,0.293941,5,1,0.20172700169496238,0.10102400119649246,solve_fwd_kernel,8.086607326073917e-7 +kkt_pglib_opf_case14_ieee_condensed_10,SPD,118,1282,1027,33,33,1,33,0,0,1,11,0.462566,2,2,0.2972799993585795,0.2957760007120669,subtree_cholesky_kernel,1,0.357721,4,1,0.17337598546873778,0.08643199544167146,solve_fwd_kernel,0.00015711648509796294 +kkt_pglib_opf_case14_ieee_condensed_10,S,118,1282,1027,33,33,1,33,0,0,1,11,0.613752,2,2,0.43478400039020926,0.4319040017435327,subtree_ldlt_kernel,1,0.380851,5,1,0.20185699395369738,0.10112099698744714,solve_fwd_kernel,0.0001562445067991457 +kkt_pglib_opf_case14_ieee_condensed_11,SPD,118,1282,1027,33,33,1,33,0,0,1,11,0.482642,2,2,0.29702499887207523,0.29555200308095664,subtree_cholesky_kernel,1,0.291901,4,1,0.17337600729661062,0.08649600204080343,solve_fwd_kernel,1.670170208071547e-5 +kkt_pglib_opf_case14_ieee_condensed_11,S,118,1282,1027,33,33,1,33,0,0,1,11,0.609402,2,2,0.4289290009182878,0.42604900227161124,subtree_ldlt_kernel,1,0.31889,5,1,0.2016970029217191,0.10108800051966682,solve_fwd_kernel,5.097826580562365e-6 +kkt_pglib_opf_case14_ieee_k2_1,S,344,1924,2139,186,186,1,186,0,0,1,16,1.440204,2,2,1.3344010003493167,1.3313289964571595,subtree_ldlt_kernel,1,0.826443,5,1,0.7005440056673251,0.3494080010568723,solve_fwd_kernel,1.0697170401067997e-8 +kkt_pglib_opf_case14_ieee_k2_10,S,344,1924,2154,185,185,1,185,0,0,1,16,1.492795,2,2,1.3532800076063722,1.3501440043910407,subtree_ldlt_kernel,1,0.956303,5,1,0.6999690012889914,0.3488319998723455,solve_fwd_kernel,2.7456609715314606e-5 +kkt_pglib_opf_case14_ieee_k2_15,S,344,1924,3273,85,85,1,85,0,0,1,16,1.6414,2,2,1.518080993264448,1.5150089966482483,subtree_ldlt_kernel,1,0.715502,5,1,0.5655999921145849,0.28262399428058416,solve_fwd_kernel,0.3235038258289765 diff --git a/bench/profile/phase_split_main_9d280d0.md b/bench/profile/phase_split_main_9d280d0.md new file mode 100644 index 0000000..b9d1ef2 --- /dev/null +++ b/bench/profile/phase_split_main_9d280d0.md @@ -0,0 +1,123 @@ +# SDS phase split on CUDA before the regime-A split (main at 9d280d0; performance.md, experiment 0) + +Generated by `bench/profile_phases.jl` on NVIDIA GeForce RTX 4080, 2026-10-02. One warm run per phase under `CUDA.@profile`, wall time from a single warm run without clock warm-up (the script then had no `spin_device`; small cases read up to ~2× high, the single-block KKT kernels of tens of ms are not affected). *busy* is the sum of kernel durations; *top* is the longest kernel, its share of *busy* and its number of thread blocks. + +## Schedule + +| matrix | structure | n | nnz(L) | supernodes | A fronts | A subtrees | largest subtree | B fronts | C fronts | launch groups | levels | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| lap2d_300 | SPD | 90000 | 2.47e+06 | 20495 | 20248 | 304 | 541 | 230 | 17 | 39 | 27 | +| lap2d_300 | S | 90000 | 2.47e+06 | 20495 | 20248 | 304 | 541 | 230 | 17 | 39 | 27 | +| lap3d_40 | SPD | 64000 | 1.44e+07 | 11066 | 9851 | 1498 | 27 | 1058 | 157 | 88 | 36 | +| HB/bcsstk17 | SPD | 10974 | 1.04e+06 | 1300 | 1113 | 772 | 10 | 169 | 18 | 62 | 34 | +| HB/bcsstk17 | S | 10974 | 1.04e+06 | 1300 | 1113 | 772 | 10 | 169 | 18 | 62 | 34 | +| Boeing/bcsstk38 | SPD | 8032 | 8.05e+05 | 604 | 452 | 207 | 10 | 143 | 9 | 50 | 14 | +| Boeing/bcsstk38 | S | 8032 | 8.05e+05 | 604 | 452 | 207 | 10 | 143 | 9 | 50 | 14 | +| GHS_psdef/apache2 | SPD | 715176 | 1.29e+08 | 123689 | 112442 | 15048 | 30 | 10493 | 754 | 105 | 35 | +| kkt_pglib_opf_case118_ieee_condensed_1 | SPD | 1088 | 1.16e+04 | 303 | 303 | 1 | 303 | 0 | 0 | 1 | 23 | +| kkt_pglib_opf_case118_ieee_condensed_1 | S | 1088 | 1.16e+04 | 303 | 303 | 1 | 303 | 0 | 0 | 1 | 23 | +| kkt_pglib_opf_case118_ieee_condensed_10 | SPD | 1088 | 1.16e+04 | 303 | 303 | 1 | 303 | 0 | 0 | 1 | 23 | +| kkt_pglib_opf_case118_ieee_condensed_10 | S | 1088 | 1.16e+04 | 303 | 303 | 1 | 303 | 0 | 0 | 1 | 23 | +| kkt_pglib_opf_case118_ieee_condensed_20 | SPD | 1088 | 1.16e+04 | 303 | 303 | 1 | 303 | 0 | 0 | 1 | 23 | +| kkt_pglib_opf_case118_ieee_condensed_20 | S | 1088 | 1.16e+04 | 303 | 303 | 1 | 303 | 0 | 0 | 1 | 23 | +| kkt_pglib_opf_case118_ieee_k2_1 | S | 3150 | 2.1e+04 | 1917 | 1917 | 1 | 1917 | 0 | 0 | 1 | 31 | +| kkt_pglib_opf_case118_ieee_k2_10 | S | 3150 | 2.05e+04 | 1906 | 1906 | 1 | 1906 | 0 | 0 | 1 | 31 | +| kkt_pglib_opf_case118_ieee_k2_20 | S | 3150 | 2.05e+04 | 1889 | 1889 | 1 | 1889 | 0 | 0 | 1 | 31 | +| kkt_pglib_opf_case1354_pegase_condensed_1 | SPD | 11192 | 1.21e+05 | 3134 | 3134 | 1 | 3134 | 0 | 0 | 1 | 39 | +| kkt_pglib_opf_case1354_pegase_condensed_1 | S | 11192 | 1.21e+05 | 3134 | 3134 | 1 | 3134 | 0 | 0 | 1 | 39 | +| kkt_pglib_opf_case1354_pegase_condensed_10 | SPD | 11192 | 1.21e+05 | 3134 | 3134 | 1 | 3134 | 0 | 0 | 1 | 39 | +| kkt_pglib_opf_case1354_pegase_condensed_10 | S | 11192 | 1.21e+05 | 3134 | 3134 | 1 | 3134 | 0 | 0 | 1 | 39 | +| kkt_pglib_opf_case1354_pegase_condensed_20 | SPD | 11192 | 1.21e+05 | 3134 | 3134 | 1 | 3134 | 0 | 0 | 1 | 39 | +| kkt_pglib_opf_case1354_pegase_condensed_20 | S | 11192 | 1.21e+05 | 3134 | 3134 | 1 | 3134 | 0 | 0 | 1 | 39 | +| kkt_pglib_opf_case1354_pegase_k2_1 | S | 33811 | 2.16e+05 | 19624 | 19624 | 1 | 19624 | 0 | 0 | 1 | 45 | +| kkt_pglib_opf_case1354_pegase_k2_10 | S | 33811 | 2.2e+05 | 19496 | 19496 | 1 | 19496 | 0 | 0 | 1 | 40 | +| kkt_pglib_opf_case1354_pegase_k2_20 | S | 33811 | 2.21e+05 | 19600 | 19600 | 1 | 19600 | 0 | 0 | 1 | 44 | +| kkt_pglib_opf_case14_ieee_condensed_1 | SPD | 118 | 1.03e+03 | 33 | 33 | 1 | 33 | 0 | 0 | 1 | 11 | +| kkt_pglib_opf_case14_ieee_condensed_1 | S | 118 | 1.03e+03 | 33 | 33 | 1 | 33 | 0 | 0 | 1 | 11 | +| kkt_pglib_opf_case14_ieee_condensed_10 | SPD | 118 | 1.03e+03 | 33 | 33 | 1 | 33 | 0 | 0 | 1 | 11 | +| kkt_pglib_opf_case14_ieee_condensed_10 | S | 118 | 1.03e+03 | 33 | 33 | 1 | 33 | 0 | 0 | 1 | 11 | +| kkt_pglib_opf_case14_ieee_condensed_11 | SPD | 118 | 1.03e+03 | 33 | 33 | 1 | 33 | 0 | 0 | 1 | 11 | +| kkt_pglib_opf_case14_ieee_condensed_11 | S | 118 | 1.03e+03 | 33 | 33 | 1 | 33 | 0 | 0 | 1 | 11 | +| kkt_pglib_opf_case14_ieee_k2_1 | S | 344 | 2.14e+03 | 186 | 186 | 1 | 186 | 0 | 0 | 1 | 16 | +| kkt_pglib_opf_case14_ieee_k2_10 | S | 344 | 2.15e+03 | 185 | 185 | 1 | 185 | 0 | 0 | 1 | 16 | +| kkt_pglib_opf_case14_ieee_k2_15 | S | 344 | 3.27e+03 | 85 | 85 | 1 | 85 | 0 | 0 | 1 | 16 | + +## Refactorization + +| matrix | structure | wall ms | kernels | copies | busy ms | top kernel | top ms | top share | top blocks | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| lap2d_300 | SPD | 40.9 | 197 | 36 | 40.7 | `subtree_cholesky_kernel` | 5.43 | 13% | 126 | +| lap2d_300 | S | 239 | 40 | 2 | 239 | `front_ldlt_kernel` | 35.3 | 15% | 1 | +| lap3d_40 | SPD | 223 | 1222 | 320 | 221 | `_extend_add_kernel` | 6.02 | 3% | 2 | +| HB/bcsstk17 | SPD | 30.3 | 236 | 38 | 29 | `subtree_cholesky_kernel` | 1.47 | 5% | 50 | +| HB/bcsstk17 | S | 198 | 63 | 2 | 197 | `front_ldlt_kernel` | 31 | 16% | 1 | +| Boeing/bcsstk38 | SPD | 23.3 | 134 | 20 | 23 | `subtree_cholesky_kernel` | 1.51 | 7% | 26 | +| Boeing/bcsstk38 | S | 128 | 51 | 2 | 128 | `front_ldlt_kernel` | 20.9 | 16% | 1 | +| GHS_psdef/apache2 | SPD | 1.03e+03 | 6608 | 1570 | 1.02e+03 | `subtree_cholesky_kernel` | 28.9 | 3% | 3287 | +| kkt_pglib_opf_case118_ieee_condensed_1 | SPD | 3.68 | 2 | 2 | 3.5 | `subtree_cholesky_kernel` | 3.5 | 100% | 1 | +| kkt_pglib_opf_case118_ieee_condensed_1 | S | 4.84 | 2 | 2 | 4.7 | `subtree_ldlt_kernel` | 4.7 | 100% | 1 | +| kkt_pglib_opf_case118_ieee_condensed_10 | SPD | 3.41 | 2 | 2 | 3.49 | `subtree_cholesky_kernel` | 3.48 | 100% | 1 | +| kkt_pglib_opf_case118_ieee_condensed_10 | S | 4.69 | 2 | 2 | 4.54 | `subtree_ldlt_kernel` | 4.54 | 100% | 1 | +| kkt_pglib_opf_case118_ieee_condensed_20 | SPD | 3.41 | 2 | 2 | 3.25 | `subtree_cholesky_kernel` | 3.25 | 100% | 1 | +| kkt_pglib_opf_case118_ieee_condensed_20 | S | 4.83 | 2 | 2 | 4.69 | `subtree_ldlt_kernel` | 4.69 | 100% | 1 | +| kkt_pglib_opf_case118_ieee_k2_1 | S | 13.1 | 2 | 2 | 13 | `subtree_ldlt_kernel` | 13 | 100% | 1 | +| kkt_pglib_opf_case118_ieee_k2_10 | S | 12.6 | 2 | 2 | 12.6 | `subtree_ldlt_kernel` | 12.6 | 100% | 1 | +| kkt_pglib_opf_case118_ieee_k2_20 | S | 12.9 | 2 | 2 | 12.8 | `subtree_ldlt_kernel` | 12.7 | 100% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_1 | SPD | 38.5 | 2 | 2 | 37.8 | `subtree_cholesky_kernel` | 37.8 | 100% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_1 | S | 56.7 | 2 | 2 | 55.6 | `subtree_ldlt_kernel` | 55.6 | 100% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_10 | SPD | 36.6 | 2 | 2 | 36.3 | `subtree_cholesky_kernel` | 36.3 | 100% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_10 | S | 54.5 | 2 | 2 | 55.8 | `subtree_ldlt_kernel` | 55.8 | 100% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_20 | SPD | 37.8 | 2 | 2 | 36.3 | `subtree_cholesky_kernel` | 36.3 | 100% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_20 | S | 55.6 | 2 | 2 | 56.2 | `subtree_ldlt_kernel` | 56.2 | 100% | 1 | +| kkt_pglib_opf_case1354_pegase_k2_1 | S | 146 | 2 | 2 | 147 | `subtree_ldlt_kernel` | 147 | 100% | 1 | +| kkt_pglib_opf_case1354_pegase_k2_10 | S | 141 | 2 | 2 | 142 | `subtree_ldlt_kernel` | 142 | 100% | 1 | +| kkt_pglib_opf_case1354_pegase_k2_20 | S | 149 | 2 | 2 | 143 | `subtree_ldlt_kernel` | 143 | 100% | 1 | +| kkt_pglib_opf_case14_ieee_condensed_1 | SPD | 0.566 | 2 | 2 | 0.321 | `subtree_cholesky_kernel` | 0.32 | 100% | 1 | +| kkt_pglib_opf_case14_ieee_condensed_1 | S | 0.577 | 2 | 2 | 0.438 | `subtree_ldlt_kernel` | 0.435 | 99% | 1 | +| kkt_pglib_opf_case14_ieee_condensed_10 | SPD | 0.463 | 2 | 2 | 0.297 | `subtree_cholesky_kernel` | 0.296 | 99% | 1 | +| kkt_pglib_opf_case14_ieee_condensed_10 | S | 0.614 | 2 | 2 | 0.435 | `subtree_ldlt_kernel` | 0.432 | 99% | 1 | +| kkt_pglib_opf_case14_ieee_condensed_11 | SPD | 0.483 | 2 | 2 | 0.297 | `subtree_cholesky_kernel` | 0.296 | 100% | 1 | +| kkt_pglib_opf_case14_ieee_condensed_11 | S | 0.609 | 2 | 2 | 0.429 | `subtree_ldlt_kernel` | 0.426 | 99% | 1 | +| kkt_pglib_opf_case14_ieee_k2_1 | S | 1.44 | 2 | 2 | 1.33 | `subtree_ldlt_kernel` | 1.33 | 100% | 1 | +| kkt_pglib_opf_case14_ieee_k2_10 | S | 1.49 | 2 | 2 | 1.35 | `subtree_ldlt_kernel` | 1.35 | 100% | 1 | +| kkt_pglib_opf_case14_ieee_k2_15 | S | 1.64 | 2 | 2 | 1.52 | `subtree_ldlt_kernel` | 1.52 | 100% | 1 | + +## Solve + +| matrix | structure | wall ms | kernels | copies | busy ms | top kernel | top ms | top share | top blocks | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| lap2d_300 | SPD | 4.66 | 161 | 1 | 3.61 | `solve_fwd_kernel` | 0.878 | 24% | 304 | +| lap2d_300 | S | 4.66 | 196 | 1 | 3.65 | `solve_fwd_kernel` | 0.971 | 27% | 304 | +| lap3d_40 | SPD | 19.5 | 1429 | 1 | 8.38 | `trsm_lt_kernel` | 0.354 | 4% | 50 | +| HB/bcsstk17 | SPD | 3.08 | 189 | 1 | 2.5 | `trsm_lt_kernel` | 0.0667 | 3% | 10 | +| HB/bcsstk17 | S | 3.57 | 226 | 1 | 2.6 | `solve_bwd_kernel` | 0.0697 | 3% | 772 | +| Boeing/bcsstk38 | SPD | 1.86 | 94 | 1 | 1.25 | `solve_bwd_kernel` | 0.0645 | 5% | 207 | +| Boeing/bcsstk38 | S | 2.48 | 113 | 1 | 1.3 | `solve_fwd_kernel` | 0.0687 | 5% | 207 | +| GHS_psdef/apache2 | SPD | 94 | 6631 | 1 | 55.4 | `solve_bwd_kernel` | 0.968 | 2% | 15048 | +| kkt_pglib_opf_case118_ieee_condensed_1 | SPD | 1.73 | 4 | 1 | 1.59 | `solve_fwd_kernel` | 0.796 | 50% | 1 | +| kkt_pglib_opf_case118_ieee_condensed_1 | S | 1.97 | 5 | 1 | 1.84 | `solve_fwd_kernel` | 0.931 | 51% | 1 | +| kkt_pglib_opf_case118_ieee_condensed_10 | SPD | 1.86 | 4 | 1 | 1.59 | `solve_fwd_kernel` | 0.796 | 50% | 1 | +| kkt_pglib_opf_case118_ieee_condensed_10 | S | 1.96 | 5 | 1 | 1.84 | `solve_fwd_kernel` | 0.931 | 51% | 1 | +| kkt_pglib_opf_case118_ieee_condensed_20 | SPD | 1.71 | 4 | 1 | 1.59 | `solve_fwd_kernel` | 0.796 | 50% | 1 | +| kkt_pglib_opf_case118_ieee_condensed_20 | S | 1.96 | 5 | 1 | 1.84 | `solve_fwd_kernel` | 0.931 | 51% | 1 | +| kkt_pglib_opf_case118_ieee_k2_1 | S | 6.96 | 5 | 1 | 6.73 | `solve_bwd_kernel` | 3.38 | 50% | 1 | +| kkt_pglib_opf_case118_ieee_k2_10 | S | 6.98 | 5 | 1 | 7.26 | `solve_fwd_kernel` | 3.91 | 54% | 1 | +| kkt_pglib_opf_case118_ieee_k2_20 | S | 6.81 | 5 | 1 | 6.66 | `solve_bwd_kernel` | 3.33 | 50% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_1 | SPD | 16.6 | 4 | 1 | 16.3 | `solve_fwd_kernel` | 8.19 | 50% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_1 | S | 19.4 | 5 | 1 | 19.1 | `solve_fwd_kernel` | 9.55 | 50% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_10 | SPD | 16.5 | 4 | 1 | 16.3 | `solve_fwd_kernel` | 8.19 | 50% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_10 | S | 19.6 | 5 | 1 | 21 | `solve_fwd_kernel` | 10.9 | 52% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_20 | SPD | 16.4 | 4 | 1 | 16.3 | `solve_fwd_kernel` | 8.19 | 50% | 1 | +| kkt_pglib_opf_case1354_pegase_condensed_20 | S | 19.3 | 5 | 1 | 18.8 | `solve_fwd_kernel` | 9.55 | 51% | 1 | +| kkt_pglib_opf_case1354_pegase_k2_1 | S | 77.2 | 5 | 1 | 73.7 | `solve_fwd_kernel` | 39.2 | 53% | 1 | +| kkt_pglib_opf_case1354_pegase_k2_10 | S | 75.4 | 5 | 1 | 70.3 | `solve_fwd_kernel` | 35.3 | 50% | 1 | +| kkt_pglib_opf_case1354_pegase_k2_20 | S | 72.4 | 5 | 1 | 70.3 | `solve_fwd_kernel` | 35.4 | 50% | 1 | +| kkt_pglib_opf_case14_ieee_condensed_1 | SPD | 0.304 | 4 | 1 | 0.173 | `solve_fwd_kernel` | 0.0864 | 50% | 1 | +| kkt_pglib_opf_case14_ieee_condensed_1 | S | 0.294 | 5 | 1 | 0.202 | `solve_fwd_kernel` | 0.101 | 50% | 1 | +| kkt_pglib_opf_case14_ieee_condensed_10 | SPD | 0.358 | 4 | 1 | 0.173 | `solve_fwd_kernel` | 0.0864 | 50% | 1 | +| kkt_pglib_opf_case14_ieee_condensed_10 | S | 0.381 | 5 | 1 | 0.202 | `solve_fwd_kernel` | 0.101 | 50% | 1 | +| kkt_pglib_opf_case14_ieee_condensed_11 | SPD | 0.292 | 4 | 1 | 0.173 | `solve_fwd_kernel` | 0.0865 | 50% | 1 | +| kkt_pglib_opf_case14_ieee_condensed_11 | S | 0.319 | 5 | 1 | 0.202 | `solve_fwd_kernel` | 0.101 | 50% | 1 | +| kkt_pglib_opf_case14_ieee_k2_1 | S | 0.826 | 5 | 1 | 0.701 | `solve_fwd_kernel` | 0.349 | 50% | 1 | +| kkt_pglib_opf_case14_ieee_k2_10 | S | 0.956 | 5 | 1 | 0.7 | `solve_fwd_kernel` | 0.349 | 50% | 1 | +| kkt_pglib_opf_case14_ieee_k2_15 | S | 0.716 | 5 | 1 | 0.566 | `solve_fwd_kernel` | 0.283 | 50% | 1 | diff --git a/bench/profile_phases.jl b/bench/profile_phases.jl new file mode 100644 index 0000000..56a979a --- /dev/null +++ b/bench/profile_phases.jl @@ -0,0 +1,212 @@ +# Experiment 0 of performance.md: where SDS spends refactorization and solve +# time on CUDA. For every harness matrix and structure, one warm +# refactorization and one warm solve run under `CUDA.@profile` (CUPTI); the +# script reports the launch plan of the schedule (regime-A subtrees, regime-B +# and regime-C fronts, launch groups), the wall time, the number of kernels and +# copies, the GPU busy time (sum of kernel durations), the share of the longest +# kernel and its grid, and writes `bench/profile/phase_split.{md,csv}`. +# +# julia --project=bench bench/profile_phases.jl [--only=m1,m2] [--structures=SPD,S] +# [--no-suitesparse] [--no-dumps] +# +# The SDS phases are run with `asynchronous = false`, as in bench/compare.jl. The +# wall time is the best of 5 warm runs, each after 0.2 s of device load so that +# the GPU is at full clock; the profiled run is a sixth one. +# LDLᵀ is skipped on matrices whose LDLᵀ factorization took more than 10 s in +# bench/comparison/sds.csv (GHS_psdef/apache2, lap3d_40): issue #75. + +using LinearAlgebra +using SparseArrays +using Random +using Printf +using Dates +using SparseDirectSolver, Metis +using CUDA, CUDA.cuSPARSE + +include(joinpath(@__DIR__, "matrices.jl")) +using .BenchMatrices + +function parse_args(args) + o = Dict("only" => "", "structures" => "SPD,S", "suitesparse" => "true", "dumps" => "true") + for a in args + if a in ("--no-suitesparse", "--no-dumps") + o[a[6:end]] = "false" + elseif (m = match(r"^--(only|structures)=(.*)$", a)) !== nothing + o[m[1]] = m[2] + else + error("unknown argument \"$a\"; see the header of bench/profile_phases.jl") + end + end + return o +end + +const OPTS = parse_args(ARGS) +const SLOW_LDLT = ("GHS_psdef/apache2", "lap3d_40") +const OUTDIR = joinpath(@__DIR__, "profile") + +# kernel name without the KernelAbstractions/CUDA template arguments +function short_name(name::AbstractString) + m = match(r"^(?:void\s+)?(?:gpu_)?([A-Za-z0-9_]+?)_?(?:\(|<|$)", name) + return m === nothing ? first(name, 40) : m[1] +end + +# keep the GPU at full clock before each timed phase (see `spin_device` in bench/compare.jl) +const SPIN_BUFFER = Ref{Any}(nothing) +function spin_device(seconds = 0.2) + SPIN_BUFFER[] === nothing && (SPIN_BUFFER[] = CUDA.zeros(Float32, 2^24)) + buf, t0 = SPIN_BUFFER[], time() + while time() - t0 < seconds + buf .= sin.(buf) .+ 1f0 + CUDA.synchronize() + end +end + +""" + profile_phase(f) -> NamedTuple + +Run `f()` (one phase, ending in a device synchronization) under `CUDA.@profile` +and summarize the device trace: wall time, kernels, copies, GPU busy time and +the longest kernel. +""" +function profile_phase(f) + wall = Inf + for _ in 1:5 # wall time: best of 5 warm runs at full clock + spin_device() + t0 = time_ns() + f() + wall = min(wall, (time_ns() - t0) / 1e6) + end + spin_device() + r = CUDA.@profile trace = true f() + d = r.device + iskernel = [d.grid[i] !== missing for i in eachindex(d.id)] + dur = [(d.stop[i] - d.start[i]) * 1e3 for i in eachindex(d.id)] + kidx = findall(iskernel) + busy = sum(dur[kidx]; init = 0.0) + span = isempty(d.id) ? 0.0 : (maximum(d.stop) - minimum(d.start)) * 1e3 + top = isempty(kidx) ? 0 : kidx[argmax(dur[kidx])] + byname = Dict{String, Tuple{Int, Float64}}() + for i in kidx + k = short_name(d.name[i]) + c, t = get(byname, k, (0, 0.0)) + byname[k] = (c + 1, t + dur[i]) + end + return (; wall, kernels = length(kidx), copies = count(!, iskernel), busy, span, + top_ms = top == 0 ? 0.0 : dur[top], top_name = top == 0 ? "" : short_name(d.name[top]), + top_blocks = top == 0 ? 0 : Int(d.grid[top].x * d.grid[top].y * d.grid[top].z), + top_threads = top == 0 ? 0 : Int(d.block[top].x * d.block[top].y * d.block[top].z), + byname) +end + +function plan_summary(s) + sc = s.symbolic.schedule + P = s.numeric.plan + reg = Array(sc.regime) + A, B, C = SparseDirectSolver.REGIME_A, SparseDirectSolver.REGIME_B, SparseDirectSolver.REGIME_C + nsub = length(sc.subtree_root) + sizes = nsub == 0 ? Int[] : diff(Array(sc.subtree_ptr)) + return (; nsuper = length(reg), a_fronts = count(==(A), reg), subtrees = nsub, + largest_subtree = isempty(sizes) ? 0 : maximum(sizes), + b_fronts = count(==(B), reg), c_fronts = count(==(C), reg), + groups = length(P.sub_first) + length(P.group_first), nlevels = maximum(Array(sc.level); init = 0)) +end + +function run_case(M::BenchMatrix, structure::String) + A = M.A + n = size(A, 1) + Random.seed!(666) + Ad = CuSparseMatrixCSR(tril(A)) + b = CuArray(rand(n)) + x = similar(b) + s = SparseDirectSolver.DirectSolver(Ad, structure, 'L') + ex(p) = SparseDirectSolver.execute!(p, s, x, b; asynchronous = false) + ta = @elapsed ex("analysis") + ex("factorization") + info = SparseDirectSolver.getparam(s, "info") + for _ in 1:2 + ex("refactorization") + ex("solve") + end + CUDA.synchronize() + refac = profile_phase(() -> (ex("refactorization"); CUDA.synchronize())) + solve = profile_phase(() -> (ex("solve"); CUDA.synchronize())) + relres = norm(Array(b) - A * Array(x)) / norm(Array(b)) + return (; matrix = M.name, structure, n, nnz = nnz(A), info, analysis_ms = ta * 1e3, + lnnz = SparseDirectSolver.getparam(s, "lu_nnz"), relres, plan_summary(s)..., refac, solve) +end + +function main() + only = isempty(OPTS["only"]) ? nothing : Set(split(OPTS["only"], ',')) + structures = split(OPTS["structures"], ',') + mats = bench_matrices(; suitesparse = OPTS["suitesparse"] == "true", dumps = OPTS["dumps"] == "true") + only === nothing || filter!(M -> M.name in only, mats) + rows = [] + for M in mats, st in structures + st in M.structures || continue + st == "S" && M.name in SLOW_LDLT && continue + print(rpad("$(M.name) $st", 52)) + r = try + run_case(M, String(st)) + catch err + println("ERROR ", sprint(showerror, err)[1:min(end, 200)]) + continue + end + @printf("refac %8.2f ms (%4d kernels, top %5.1f%% %s on %d blocks) solve %8.2f ms (%4d kernels)\n", + r.refac.wall, r.refac.kernels, 100 * r.refac.top_ms / max(r.refac.busy, eps()), + r.refac.top_name, r.refac.top_blocks, r.solve.wall, r.solve.kernels) + push!(rows, r) + end + mkpath(OUTDIR) + write_csv(joinpath(OUTDIR, "phase_split.csv"), rows) + write_md(joinpath(OUTDIR, "phase_split.md"), rows) + println("wrote ", joinpath(OUTDIR, "phase_split.{md,csv}")) +end + +f1(x) = @sprintf("%.3g", x) + +function write_csv(path, rows) + cols = ["matrix", "structure", "n", "nnz", "lnnz", "nsuper", "a_fronts", "subtrees", "largest_subtree", + "b_fronts", "c_fronts", "groups", "nlevels", "refac_wall_ms", "refac_kernels", "refac_copies", + "refac_busy_ms", "refac_top_ms", "refac_top_name", "refac_top_blocks", "solve_wall_ms", + "solve_kernels", "solve_copies", "solve_busy_ms", "solve_top_ms", "solve_top_name", "relres"] + open(path, "w") do io + println(io, join(cols, ',')) + for r in rows + v = [r.matrix, r.structure, r.n, r.nnz, r.lnnz, r.nsuper, r.a_fronts, r.subtrees, r.largest_subtree, + r.b_fronts, r.c_fronts, r.groups, r.nlevels, r.refac.wall, r.refac.kernels, r.refac.copies, + r.refac.busy, r.refac.top_ms, r.refac.top_name, r.refac.top_blocks, r.solve.wall, + r.solve.kernels, r.solve.copies, r.solve.busy, r.solve.top_ms, r.solve.top_name, r.relres] + println(io, join(string.(v), ',')) + end + end +end + +function write_md(path, rows) + open(path, "w") do io + println(io, "# SDS phase split on CUDA (performance.md, experiment 0)\n") + println(io, "Generated by `bench/profile_phases.jl` on ", CUDA.name(CUDA.device()), ", ", Dates.today(), + ". Wall time: best of 5 warm runs at full clock; a sixth run per phase under `CUDA.@profile` gives the kernels. *busy* is the sum of kernel durations; ", + "*top* is the longest kernel, its share of *busy* and its number of thread blocks.\n") + println(io, "## Schedule\n") + println(io, "| matrix | structure | n | nnz(L) | supernodes | A fronts | A subtrees | largest subtree | B fronts | C fronts | launch groups | levels |") + println(io, "| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |") + for r in rows + println(io, "| ", join([r.matrix, r.structure, r.n, f1(r.lnnz), r.nsuper, r.a_fronts, r.subtrees, + r.largest_subtree, r.b_fronts, r.c_fronts, r.groups, r.nlevels], " | "), " |") + end + for (title, key) in (("Refactorization", :refac), ("Solve", :solve)) + println(io, "\n## ", title, "\n") + println(io, "| matrix | structure | wall ms | kernels | copies | busy ms | top kernel | top ms | top share | top blocks |") + println(io, "| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |") + for r in rows + p = getfield(r, key) + println(io, "| ", join([r.matrix, r.structure, f1(p.wall), p.kernels, p.copies, f1(p.busy), + "`" * p.top_name * "`", f1(p.top_ms), + @sprintf("%.0f%%", 100 * p.top_ms / max(p.busy, eps())), + p.top_blocks], " | "), " |") + end + end + end +end + +main() diff --git a/performance.md b/performance.md index 91388e7..bf9f823 100644 --- a/performance.md +++ b/performance.md @@ -59,6 +59,42 @@ - **Compile latency.** The `Val`-specialized kernels make the first factorization cost minutes, which is bad for MadNLP users. Limit the specialization set (a few width classes), use PrecompileTools workloads on the CPU backend, and consider `@device_override`-free generic paths for rare sizes. - **Type stability and allocation.** Keep integer types uniform (Int32 on device). Keep the `pivot_stats` and inertia readback to a single host transfer per factorization. MadNLP needs inertia every iteration, and that one sync is unavoidable unless inertia correction moves to the device. +## Experiment 0 results (2026-10-02, RTX 4080) + +Measured with `bench/profile_phases.jl` (CUPTI trace of one warm refactorization and solve per harness matrix; `bench/profile/phase_split.md`, the state before the fix in `bench/profile/phase_split_main_9d280d0.md`) and `bench/compare.jl` (`bench/comparison/comparison.md`). + +**The gap was not launch overhead.** GPU busy time (sum of kernel durations) equals wall time on every harness row, so the host never starves the device. The time goes into kernels that run on far too few thread blocks. + +**Root cause on every pglib KKT dump: one thread block.** The regime-A rule took a front into a fused subtree whenever its whole subtree's stack fit the local-memory budget, with no parallelism criterion. KKT trees of small fronts fit as a whole, so the entire factorization (3134 supernodes on case1354 condensed, 19.6k on case1354 K2) and the forward solve ran in one 128-thread workgroup on one of 76 SMs, at about 12 µs per front. + +**Fix (branch `perf/exp0-baseline-split`).** A new analysis tuning knob `subtree_parallelism` (default 4096): a regime-A subtree may do at most 1/4096 of the factorization flops. 4096 was best or near-best in a sweep over 128..4096 and a work floor never helped. Refactorization and solve, before and after: + +| matrix | refactorization | solve | +| --- | --- | --- | +| case118 condensed, Cholesky | 3.9 → 1.2 ms | 2.7 → 0.8 ms | +| case118 K2, LDLᵀ | 13.8 → 2.0 ms | 7.7 → 0.9 ms | +| case1354 condensed, Cholesky | 39.9 → 3.0 ms | 19.7 → 1.6 ms | +| case1354 condensed, LDLᵀ | 56.3 → 9.6 ms | 22.6 → 1.2 ms | +| case1354 K2, LDLᵀ | 146 → 7.2 ms | 78.7 → 2.6 ms | +| SuiteSparse and Laplacian matrices | unchanged within noise (lap2d_300 36 → 31 ms) | unchanged | + +SDS/cuDSS geometric means over the harness (`comparison.md`), before → after: + +| feature | factorization | refactorization | solve | +| --- | --- | --- | --- | +| Cholesky, Float64 | 5.64× → 2.47× | 9.06× → 3.89× | 8.93× → 4.36× | +| LDLᵀ, static pivoting | 20.4× → 6.37× | 29.8× → 9.90× | 13.4× → 3.96× | +| LDLᵀ + 2 IR steps, K2 dumps | 23.4× → 3.18× | 36.0× → 5.45× | 33.3× → 7.57× | + +A side effect: the default solve (`deterministic_mode = 0`) now uses its atomic regime-B forward sweep on the small KKT and test matrices too, so two solves are no longer bitwise identical there. That was always the documented contract (bitwise reproducibility needs `deterministic_mode = 1`), but before the fix these matrices never reached the atomic path. MadNLP should set `deterministic_mode = 1` if it relies on repeatable solves. + +**What is left, by measurement:** +1. **KKT refactor+solve is now level-bound.** 30–60 kernels per refactorization and 35–85 per solve, the longest kernel under 15% of busy time, regime-B fronts on one or two blocks per level. This is where performance.md's launch minimization (experiment 5: level merging, graph capture) now pays, together with experiment 6 for the solve. Remaining refactorization gap on case1354: 5× (Cholesky) and 9–14× (LDLᵀ). +2. **LDLᵀ regime B/C is the single largest gap on everything else** (lap2d_300 43×, bcsstk17 59×, lap3d_40 250×, apache2 186× vs cuDSS): `front_ldlt_kernel` runs one front per workgroup on 1–2 blocks (issue #75). Experiments 1–2 unchanged in priority. +3. **Large Cholesky** (lap3d_40 4.4×, apache2 2.4×, solve 11–13×): 1222/6608 kernels per refactorization, `extend_add` on 2 blocks. Level merging and wider extend-add grids. + +Revised order: experiments 1–2 (LDLᵀ kernels, #75) and 5–6 (launches and solve) now have the largest measured payoff; experiment 3 (matching and scaling) remains the accuracy blocker on K2 (relres unchanged by this fix). + ## Recommendations: Prioritized Experiment Plan | # | Experiment | Payoff | Effort | Key measurement | Success criterion | diff --git a/src/options.jl b/src/options.jl index 5441ef4..8370c85 100644 --- a/src/options.jl +++ b/src/options.jl @@ -75,8 +75,19 @@ const DEFAULT_AMALGAMATION = AmalgamationParams((32, 0.25, 8)) # regime A local-memory budgets (bytes): 16, 32 and 48 KiB (PLAN §2.3 step 5) const DEFAULT_SUBTREE_BUDGETS = [16 * 1024, 32 * 1024, 48 * 1024] +# Regime A runs a subtree on one workgroup. A tree of small fronts fits the +# local-memory budgets as a whole and then ran on one workgroup of one SM: the +# pglib KKT dumps were factored 10-20x slower than with regime A off +# (performance.md, experiment 0; bench/profile/phase_split.md). A subtree may do +# at most `1/SUBTREE_PARALLELISM` of the factorization flops. 4096 was the best +# or near-best value of a sweep over 128..4096 on the harness (RTX 4080); it +# leaves the SuiteSparse and Laplacian subtrees as they were. +"Default `subtree_parallelism`: a regime-A subtree does at most this fraction (inverse) of the factorization flops." +const SUBTREE_PARALLELISM = 4096 + # `Options` fields that are analysis tuning knobs, not parameter strings (T07) -const TUNING_OPTIONS = (:regime_c_width, :regime_c_rows, :subtree_budgets, :memory_budget) +const TUNING_OPTIONS = (:regime_c_width, :regime_c_rows, :subtree_budgets, :subtree_parallelism, + :memory_budget) """ Options(; kwargs...) @@ -121,6 +132,7 @@ defaults below. Keyword arguments are applied through [`setparam!`](@ref), so | `regime_c_width` | `64` | fronts wider than this go to regime C (vendor dense calls) | | `regime_c_rows` | `512` | fronts with more rows than this go to regime C | | `subtree_budgets` | `[16384, 32768, 49152]` | regime A local-memory budgets in bytes; empty disables regime A | +| `subtree_parallelism` | `4096` | a regime-A subtree does at most `1/subtree_parallelism` of the factorization flops (`0`: no limit) | | `memory_budget` | `-1` | update-stack bytes per level chunk (negative: no limit, no chunking) | | `user_perm`, `user_schur_indices`, `user_nd_partition_tree`, `ubatch_mask`, `pivot_sign` | `nothing` | not provided | | `user_host_interrupt` | `nothing` | not provided | @@ -128,7 +140,7 @@ defaults below. Keyword arguments are applied through [`setparam!`](@ref), so Vectors are stored as host copies; `user_host_interrupt` is stored by reference because it is polled while a phase runs. -The last four rows are analysis tuning knobs of the schedule (PLAN §2.3 step 5, +The last five rows are analysis tuning knobs of the schedule (PLAN §2.3 step 5, TASKS T07). They are not cuDSS parameter strings, so [`setparam!`](@ref) does not know them; set them with `Options(; regime_c_width = 128)` (validated) or by assigning the field. @@ -169,6 +181,7 @@ mutable struct Options regime_c_width::Int regime_c_rows::Int subtree_budgets::Vector{Int} + subtree_parallelism::Int memory_budget::Int64 # user-provided data parameters (inputs of the phases) user_perm::Union{Nothing, Vector{Int}} @@ -184,7 +197,7 @@ mutable struct Options 0, 0, 0.0, PIVOT_AUTO, 0.01, nothing, PIVOT_EPSILON_DEFAULT, -1, 0, 0, 1, 0, 0, 10, 0, -1, 1, 0, 0, -1, IR_PLAIN, nothing, DEFAULT_AMALGAMATION, SCHEDULE_AUTO, PIVOT_PAIRS_DEFAULT, - 64, 512, copy(DEFAULT_SUBTREE_BUDGETS), -1, + 64, 512, copy(DEFAULT_SUBTREE_BUDGETS), SUBTREE_PARALLELISM, -1, nothing, nothing, nothing, nothing, nothing, nothing, ) for (name, value) in kwargs @@ -465,6 +478,9 @@ for field in (:regime_c_width, :regime_c_rows) _parse_int($(String(field)), value, 1, typemax(Int), "an integer ≥ 1") end +_parse_tuning(::Val{:subtree_parallelism}, value) = + _parse_int("subtree_parallelism", value, 0, typemax(Int), "an integer ≥ 0 (0: no limit)") + _parse_tuning(::Val{:memory_budget}, value) = Int64(_parse_int("memory_budget", value, typemin(Int64), typemax(Int64), "an integer (negative: no limit)")) diff --git a/src/symbolic/schedule.jl b/src/symbolic/schedule.jl index 1c7c353..5f35560 100644 --- a/src/symbolic/schedule.jl +++ b/src/symbolic/schedule.jl @@ -231,6 +231,18 @@ function nlaunches(sc::Schedule) return total end +""" + front_flops(f, w) -> Int64 + +Multiply-add count of the partial dense factorization of an `f×f` front with +`w` pivot columns: `Σ_{j=f-w+1}^{f} j²` (the elimination of column `k` updates +the trailing `(f-k)×(f-k)` block). The work measure of the regime-A split. +""" +function front_flops(f::Integer, w::Integer) + sq(n) = Int64(n) * (n + 1) * (2n + 1) ÷ 6 + return sq(f) - sq(f - w) +end + """ build_schedule(sp::SupernodePartition, opts::Options = Options(), ::Type{T} = Float64) -> Schedule @@ -243,7 +255,11 @@ the supernodes of `sp`, with byte budgets for the element type `T`: and its subtree's serial stack peak (packed lower-triangular `f×f` fronts plus the packed `m×m` contribution blocks waiting for their parent, `m = f - w`) fits the [`subtree_capacity`](@ref) of the largest of - `opts.subtree_budgets`; the maximal eligible subtrees are the regime-A + `opts.subtree_budgets`, and its subtree's flops ([`front_flops`](@ref)) + are at most `total ÷ opts.subtree_parallelism` (`0`: no flop limit), so + that a large tree of small fronts is split into enough subtrees to fill + the device instead of running on one workgroup; the maximal + eligible subtrees are the regime-A subtrees, each with the smallest budget class that holds it (empty `subtree_budgets` disables regime A); 3. regime B: the rest, binned by the smallest width class in `8, 16, 32, 64, …` @@ -269,6 +285,15 @@ function build_schedule(sp::SupernodePartition, opts::Options = Options(), ::Typ sp.snparent[s] != 0 && push!(children[sp.snparent[s]], s) end level = tree_height(sp.snparent) + # flops of every subtree; children precede parents in the supernode numbering + work = [front_flops(rows[s], width[s]) for s in 1:ns] + total = sum(work; init = Int64(0)) + for s in 1:ns + p = sp.snparent[s] + p != 0 && (work[p] += work[s]) + end + par = opts.subtree_parallelism + maxwork = par <= 0 ? typemax(Int64) : total ÷ par big = [width[s] > cw || rows[s] > cr for s in 1:ns] # 2. regime A: serial stack peak (entries) with children ordered by decreasing peak - cb (Liu) peak = zeros(Int, ns) @@ -283,7 +308,7 @@ function build_schedule(sp::SupernodePartition, opts::Options = Options(), ::Typ acc += cb[c] end peak[s] = max(pk, acc + packed_length(rows[s])) - eligible[s] = !big[s] && all(c -> eligible[c], kids) && peak[s] <= maxcap + eligible[s] = !big[s] && all(c -> eligible[c], kids) && peak[s] <= maxcap && work[s] <= maxwork end regime = fill(REGIME_B, ns) subtree = zeros(Int, ns) diff --git a/test/test_api.jl b/test/test_api.jl index 05671e7..897be39 100644 --- a/test/test_api.jl +++ b/test/test_api.jl @@ -62,6 +62,9 @@ end n = size(A, 1) for view in ('L', 'U', 'F') solver = DirectSolver(api_matrix(backend, triangle_view(A, view), INT), spd_structure(T), view) + # deterministic_mode = 1: the bitwise comparisons below need the atomic-free forward sweep (the default atomic + # sweep sums regime-B updates in a run-dependent order on a GPU) + setparam!(solver, "deterministic_mode", 1) b = rand(T, n, 3) bd = to_device(backend, b) xd = similar(bd) @@ -88,6 +91,7 @@ end @test to_host(cd) == x # the named wrappers solver2 = DirectSolver(api_matrix(backend, triangle_view(A, view), INT), spd_structure(T), view) + setparam!(solver2, "deterministic_mode", 1) @test analyze!(solver2) === solver2 @test factorize!(solver2) === solver2 @test refactorize!(solver2; asynchronous = false) === solver2 @@ -281,6 +285,8 @@ end A = laplacian3d(T, 6, 6, 5) n = size(A, 1) solver = api_solver(backend, A) + # deterministic_mode = 1 for the bitwise comparisons of the layouts (atomic sweep: run-dependent sums on a GPU) + setparam!(solver, "deterministic_mode", 1) for nrhs in (1, 2, 5, 3) # the workspace grows to 5 right-hand sides and stays b = api_rhs(T, n, nrhs) x = api_solve(backend, solver, b) @@ -350,6 +356,8 @@ end F = cholesky(api_matrix(backend, triangle_view(A, view), INT); view) @test F isa DirectSolver{T, INT} @test !F.fresh_factorization && getparam(F, "info") == 0 + # deterministic_mode = 1 for the bitwise comparisons below (atomic sweep: run-dependent sums on a GPU) + setparam!(F, "deterministic_mode", 1) @test relres(A, to_host(F \ bd), b) <= tol(T) @test relres(A, to_host(F \ bd[:, 1]), b[:, 1]) <= tol(T) xd = similar(bd) diff --git a/test/test_numeric_cholesky_a.jl b/test/test_numeric_cholesky_a.jl index 5f8e2fd..4838365 100644 --- a/test/test_numeric_cholesky_a.jl +++ b/test/test_numeric_cholesky_a.jl @@ -2,10 +2,13 @@ # workgroup per leaf subtree, fronts and contribution blocks in local memory), # together with regimes B and C, checked against the T08 reference panels. -# default budgets (16, 32, 48 KiB): regimes A, B and C on the 3-D Laplacian and the random SPD matrix -const NUMERIC_A_OPTS = Options() +# default budgets (16, 32, 48 KiB): regimes A, B and C on the 3-D Laplacian and the random SPD matrix; regime-A +# subtrees as large as the budgets allow (`subtree_parallelism = 0`; the default split leaves these small +# matrices few or no subtrees, see "subtree_parallelism" in test_symbolic_schedule.jl) +const NUMERIC_A_OPTS = Options(subtree_parallelism = 0) # small budgets and regime-C thresholds: all three regimes on a 2-D Laplacian -const NUMERIC_ABC_OPTS = Options(subtree_budgets = [8192, 16384], regime_c_width = 16, regime_c_rows = 128) +const NUMERIC_ABC_OPTS = Options(subtree_budgets = [8192, 16384], regime_c_width = 16, regime_c_rows = 128, + subtree_parallelism = 0) numeric_a_matrices(::Type{T}) where {T} = (("laplacian2d(40,40) A+B+C", laplacian2d(T, 40, 40), NUMERIC_ABC_OPTS), @@ -57,11 +60,11 @@ end @test SDS.nsubtrees(S.schedule) == 0 # the local capacity depends on the element size: wider numeric elements than the analysis's are rejected C = SDS.CSR(tril(laplacian2d(Float32, 10, 10))) - S32 = SDS.symbolic_analysis(C, "SPD", 'L') + S32 = SDS.symbolic_analysis(C, "SPD", 'L'; opts = NUMERIC_A_OPTS) @test S32.elsize == sizeof(Float32) && SDS.nsubtrees(S32.schedule) > 0 @test thrown(() -> SDS.factorize!(SDS.allocate_numeric(S32, Float64), S32, Float64.(C.nzval))) isa InvalidValueError - S64 = SDS.symbolic_analysis(SDS.CSR(tril(laplacian2d(Float64, 10, 10))), "SPD", 'L') + S64 = SDS.symbolic_analysis(SDS.CSR(tril(laplacian2d(Float64, 10, 10))), "SPD", 'L'; opts = NUMERIC_A_OPTS) @test SDS.factorize!(SDS.allocate_numeric(S64, Float32), S64, Float32.(C.nzval)) == 0 end @@ -94,9 +97,10 @@ end @testset "budget classes and kernel sizes ($(backend_name(backend)), $T)" for backend in BACKENDS, T in ELTYPES # the same matrix under different budgets: other subtrees, other local sizes, same factor A = laplacian3d(T, 8, 8, 8) - for opts in (Options(subtree_budgets = [8192]), Options(subtree_budgets = [65536]), - Options(subtree_budgets = [8192, 20000, 1 << 20], regime_c_width = 32), - Options(subtree_budgets = [32768], factorization_alg = "algo2")) + for opts in (Options(subtree_budgets = [8192], subtree_parallelism = 0), + Options(subtree_budgets = [65536], subtree_parallelism = 0), + Options(subtree_budgets = [8192, 20000, 1 << 20], regime_c_width = 32, subtree_parallelism = 0), + Options(subtree_budgets = [32768], factorization_alg = "algo2", subtree_parallelism = 0)) S, Nr, _, Sd, Nd, nz = numeric_setup(backend, A; opts) @test SDS.nsubtrees(S.schedule) > 0 @test SDS.factorize!(Nd, Sd, nz) == 0 @@ -112,7 +116,8 @@ end T in ELTYPES A = laplacian2d(T, 100, 100) b = rand(T, size(A, 1), 2) - x = map((Options(reordering_alg = "algo3"), Options(reordering_alg = "algo3", subtree_budgets = Int[]))) do opts + x = map((Options(reordering_alg = "algo3", subtree_parallelism = 0), + Options(reordering_alg = "algo3", subtree_budgets = Int[]))) do opts S, Nr, _, Sd, Nd, nz = numeric_setup(backend, A; opts) @test SDS.factorize!(Nd, Sd, nz) == 0 Nh = SDS.host_numeric(Nd) @@ -168,7 +173,8 @@ end @testset "info: first non-positive pivot ($(backend_name(backend)), $T)" for backend in BACKENDS, T in ELTYPES n, j = 60, 23 - for opts in (NUMERIC_A_OPTS, Options(reordering_alg = "algo5"), Options(use_superpanels = 0), NUMERIC_ABC_OPTS) + for opts in (NUMERIC_A_OPTS, Options(reordering_alg = "algo5", subtree_parallelism = 0), + Options(use_superpanels = 0, subtree_parallelism = 0), NUMERIC_ABC_OPTS) A = singular_block_matrix(T, n, j; stored_zero = true) A[j, j] = 3 _, Nr, info_ref, Sd, Nd, nz = numeric_setup(backend, A; opts) @@ -190,7 +196,7 @@ end end # a non-positive pivot that only appears after elimination: [1 2; 2 1] block at columns 3, 4 A = sparse(T[4 0 0 0; 0 4 0 0; 0 0 1 2; 0 0 2 1]) - _, _, info_ref, Sd, Nd, nz = numeric_setup(backend, A; opts = Options(reordering_alg = "algo5")) + _, _, info_ref, Sd, Nd, nz = numeric_setup(backend, A; opts = Options(reordering_alg = "algo5", subtree_parallelism = 0)) @test SDS.nsubtrees(Sd.schedule) > 0 @test info_ref == 4 @test SDS.factorize!(Nd, Sd, nz) == 4 diff --git a/test/test_symbolic_schedule.jl b/test/test_symbolic_schedule.jl index f03ae32..400d97d 100644 --- a/test/test_symbolic_schedule.jl +++ b/test/test_symbolic_schedule.jl @@ -205,10 +205,52 @@ triangle(A, view) = view == 'L' ? tril(A) : view == 'U' ? triu(A) : A @test thrown(() -> setparam!(Options(), "memory_budget", 1)) isa ArgumentError end +@testset "subtree_parallelism: flop limit of the regime-A subtrees" begin + @test Options().subtree_parallelism == SDS.SUBTREE_PARALLELISM == 4096 + @test Options(subtree_parallelism = 0).subtree_parallelism == 0 + @test copy(Options(subtree_parallelism = 7)).subtree_parallelism == 7 + @test thrown(() -> Options(subtree_parallelism = -1)) isa InvalidValueError + @test thrown(() -> Options(subtree_parallelism = 1.5)) isa InvalidValueError + # multiply-adds of a partial front factorization: Σ_{j=f-w+1}^{f} j² + @test SDS.front_flops(3, 1) == 9 && SDS.front_flops(3, 3) == 14 && SDS.front_flops(5, 2) == 41 + @test SDS.front_flops(1000, 64) == sum(Int64(j)^2 for j in 937:1000) + A = laplacian2d(Float64, 60, 60) + schedules = map((0, 64, 4096)) do par + S = SDS.symbolic_analysis(SDS.CSR(tril(A)), "SPD", 'L'; opts = Options(subtree_parallelism = par)) + check_schedule(S) + S + end + S0 = schedules[1] + sp = S0.partition + ns = SDS.nsupernodes(S0) + work = [SDS.front_flops(S0.schedule.rows[s], S0.schedule.width[s]) for s in 1:ns] + total = sum(work) + for s in 1:ns # subtree flops (children numbered before parents) + sp.snparent[s] != 0 && (work[sp.snparent[s]] += work[s]) + end + for (par, S) in zip((64, 4096), schedules[2:end]) + sc = S.schedule + @test S.partition.snparent == sp.snparent # the limit changes the schedule only + maxwork = total ÷ par + # every subtree within the limit, regime A shrinks, and the subtrees are maximal: the parent of a + # subtree root is over the limit or was already outside regime A without it + @test all(t -> work[sc.subtree_root[t]] <= maxwork, 1:SDS.nsubtrees(sc)) + @test all(s -> sc.regime[s] != SDS.REGIME_A || S0.schedule.regime[s] == SDS.REGIME_A, 1:ns) + @test all(sc.subtree_root) do r + q = sp.snparent[r] + q == 0 || work[q] > maxwork || S0.schedule.regime[q] != SDS.REGIME_A + end + end + # a large tree of small fronts is split over many workgroups (measured 7, 56, 240 subtrees) + @test SDS.nsubtrees(schedules[1].schedule) < SDS.nsubtrees(schedules[2].schedule) < + SDS.nsubtrees(schedules[3].schedule) + @test SDS.nsubtrees(schedules[3].schedule) >= 100 +end + @testset "small example" begin # arrow matrix: four leaves 1..4 coupled to the 2×2 root block 5..6 A = sparse(Float64[4 0 0 0 1 1; 0 4 0 0 1 1; 0 0 4 0 1 1; 0 0 0 4 1 1; 1 1 1 1 4 1; 1 1 1 1 1 4]) - opts = Options(reordering_alg = "algo5", use_superpanels = 0) + opts = Options(reordering_alg = "algo5", use_superpanels = 0, subtree_parallelism = 0) S = SDS.symbolic_analysis(SDS.CSR(A), "SPD", 'L'; opts) sc = S.schedule @test SDS.nsupernodes(S) == 5 @@ -219,6 +261,9 @@ end @test SDS.nlaunches(sc) == 1 @test S.layout.stack_len == 0 check_schedule(S) + # the default flop limit (1/4096 of 31 multiply-adds) leaves no front of this tiny tree in regime A + @test SDS.nsubtrees(SDS.symbolic_analysis(SDS.CSR(A), "SPD", 'L'; + opts = Options(reordering_alg = "algo5", use_superpanels = 0)).schedule) == 0 # without regime A: one level of four B fronts (same bin), then the root S0 = SDS.symbolic_analysis(SDS.CSR(A), "SPD", 'L'; opts = Options(reordering_alg = "algo5", use_superpanels = 0, subtree_budgets = Int[])) From a78d26a463c3a7d6205092392f07e0cc5057e3a0 Mon Sep 17 00:00:00 2001 From: Michel Schanen Date: Mon, 5 Oct 2026 07:27:30 -0500 Subject: [PATCH 2/2] PERFORMANCE.md: rename from performance.md; track performance issues Upper case like PLAN.md, TASKS.md and RESEARCH.md. New "Tracked issues" table of the issues labelled `performance` (#81, #82, #75, #60, #25) and the accuracy issues that gate the K2 results (#71, #67); references in src/options.jl and bench/ updated. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01TJrmq7e9jiW4VxBMEVup2E --- performance.md => PERFORMANCE.md | 16 +++++++++++++++- bench/README.md | 2 +- bench/profile/phase_split.md | 2 +- bench/profile/phase_split_main_9d280d0.md | 2 +- bench/profile_phases.jl | 4 ++-- src/options.jl | 2 +- 6 files changed, 21 insertions(+), 7 deletions(-) rename performance.md => PERFORMANCE.md (95%) diff --git a/performance.md b/PERFORMANCE.md similarity index 95% rename from performance.md rename to PERFORMANCE.md index bf9f823..389e80a 100644 --- a/performance.md +++ b/PERFORMANCE.md @@ -2,6 +2,20 @@ **Bottom line:** For MadNLP-style repeated KKT solves, SparseDirectSolver.jl (SDS) will not beat cuDSS by out-BLASing it on large fronts. Its realistic edge comes from three places. First, robust indefinite numerics that cuDSS lacks: true 2×2 Bunch–Kaufman pivots, per-row pivot signs, and correct inertia. Second, a refactorize+solve path that is device-resident, launch-minimal and graph-captured, which removes the host synchronizations and launches that dominate at OPF scale. Third, a GPU-resident or cached analysis phase. The immediate blockers are not raw FLOP rate. They are (a) the serial, reference-faithful pivot search and the one-workgroup-per-front regime-C LDLᵀ (issue #75), and (b) missing matching and scaling, without which K2 systems produce max|L| of 1e14–1e16 (issue #71). +## Tracked issues + +Performance issues carry the GitHub label `performance` ([list](https://github.com/exanauts/SparseDirectSolver.jl/issues?q=label%3Aperformance)). Keep this table in step with them: add a row when an issue is opened, and update the status when its PR merges or it closes. + +| issue | what | experiment | status | +| --- | --- | --- | --- | +| #81 (PR) | regime-A subtrees ran a whole KKT tree on one workgroup; flop limit `subtree_parallelism` | 0 | open PR | +| #82 | KKT refactorization and solve are level-bound after #81: 54–59 launches per refactorization, 62–85 per solve | 5, 6 | open | +| #75 | device LDLᵀ: serial pivot search, one workgroup per regime-B/C front, no vendor `sytrf` | 1, 2 | open, triaged | +| #60 | regime-A follow-ups: CUDA timings (partly answered by experiment 0) and per-backend local-memory caps | 7 | open, triaged | +| #25 | T25 performance pass (task) | 5, 6, 7 | open | + +Related accuracy issues that gate the K2 results: #71 (max\|L\| 1e14–1e16 on the K2 dumps, needs scaling) and #67 (pivot-pair matching), both experiment 3 / T21. + ## TL;DR - **Current state:** SDS is a KernelAbstractions multifrontal solver. Symbolic analysis runs on the host (AMD or METIS ND, amalgamation, MA57-style pivot pairs). Numeric factorization runs in three regimes: fused subtree kernels, level-batched fused front kernels, and vendor potrf/trsm/syrk. SPD Cholesky and LDLᵀ with in-front Bunch–Kaufman and static perturbation both work on CUDA. LU, batching, matching and scaling, mixed precision and the non-CUDA backends do not exist yet. The LDLᵀ is deliberately slow: it reproduces the CPU reference pivot for pivot. - **cuDSS weak spots to exploit:** analysis (reordering) always runs on the host and is synchronous. It is the documented bottleneck in MadNLP/ExaModels: Pacaud, Shin, Montoison, Schanen and Anitescu (arXiv:2405.14236) report that "the analysis phase is four times slower for cuDSS compared to CHOLMOD". QOCO-GPU reports the same bottleneck. Symmetric-indefinite pivoting is diagonal-only within a supernode plus epsilon perturbation, with no LBLᵀ. The defaults (no matching) give relres 0.26–170 on the K2 dumps. Hybrid, MG and MGMN modes force synchronous phases. @@ -89,7 +103,7 @@ SDS/cuDSS geometric means over the harness (`comparison.md`), before → after: A side effect: the default solve (`deterministic_mode = 0`) now uses its atomic regime-B forward sweep on the small KKT and test matrices too, so two solves are no longer bitwise identical there. That was always the documented contract (bitwise reproducibility needs `deterministic_mode = 1`), but before the fix these matrices never reached the atomic path. MadNLP should set `deterministic_mode = 1` if it relies on repeatable solves. **What is left, by measurement:** -1. **KKT refactor+solve is now level-bound.** 30–60 kernels per refactorization and 35–85 per solve, the longest kernel under 15% of busy time, regime-B fronts on one or two blocks per level. This is where performance.md's launch minimization (experiment 5: level merging, graph capture) now pays, together with experiment 6 for the solve. Remaining refactorization gap on case1354: 5× (Cholesky) and 9–14× (LDLᵀ). +1. **KKT refactor+solve is now level-bound.** 30–60 kernels per refactorization and 35–85 per solve, the longest kernel under 15% of busy time, regime-B fronts on one or two blocks per level. This is where the launch minimization of experiment 5 (level merging, graph capture) now pays, together with experiment 6 for the solve (issue #82). Remaining refactorization gap on case1354: 5× (Cholesky) and 9–14× (LDLᵀ). 2. **LDLᵀ regime B/C is the single largest gap on everything else** (lap2d_300 43×, bcsstk17 59×, lap3d_40 250×, apache2 186× vs cuDSS): `front_ldlt_kernel` runs one front per workgroup on 1–2 blocks (issue #75). Experiments 1–2 unchanged in priority. 3. **Large Cholesky** (lap3d_40 4.4×, apache2 2.4×, solve 11–13×): 1222/6608 kernels per refactorization, `extend_add` on 2 blocks. Level merging and wider extend-add grids. diff --git a/bench/README.md b/bench/README.md index 46c9c33..9bc6325 100644 --- a/bench/README.md +++ b/bench/README.md @@ -15,7 +15,7 @@ Baselines every later milestone is measured against (PLAN.md §5 M0, §7). The | `dump_madnlp_kkt.jl` | dumps MadNLP K2 and condensed KKT matrices of pglib-opf cases | | `features.jl` | module `BenchFeatures`: the comparison features, one per planned capability in TASKS.md order (`cholesky_f64` … `mixed_precision`), with structure, element type, matrix selector and parameters; `task_status` reads the task's marker in TASKS.md | | `compare.jl` | cuDSS vs SparseDirectSolver.jl per feature × matrix with BenchmarkTools; one solver per run (`--solver=cudss` or `--solver=sds`), results merged into `bench/comparison/.csv` | -| `profile_phases.jl` | where SDS spends refactorization and solve time on CUDA (performance.md, experiment 0): schedule per matrix (regime-A subtrees, B/C fronts, launch groups) and a CUPTI trace of one warm refactorization and solve (kernels, copies, busy time, longest kernel and its grid); writes `bench/profile/phase_split.{md,csv}`: `julia --project=bench bench/profile_phases.jl [--only=m1,m2] [--structures=SPD,S]` | +| `profile_phases.jl` | where SDS spends refactorization and solve time on CUDA (PERFORMANCE.md, experiment 0): schedule per matrix (regime-A subtrees, B/C fronts, launch groups) and a CUPTI trace of one warm refactorization and solve (kernels, copies, busy time, longest kernel and its grid); writes `bench/profile/phase_split.{md,csv}`: `julia --project=bench bench/profile_phases.jl [--only=m1,m2] [--structures=SPD,S]` | | `compare_report.jl` | renders `bench/comparison/comparison.md` (overview + one table per feature) and `comparison.png` (SDS/cuDSS ratio per feature and phase); environment `bench/report/` (CairoMakie) | | `pivot_pairs.jl` | 2×2 pivot pairs of the `S` analysis (issue #66): `pivot_pairs` = `none`/`default`/`all` on the K2 dumps and the KKT generators, with nnz(L), zero/perturbed/2×2 pivots, max abs L and factor error of the CPU reference LDLᵀ; package environment: `julia --project=. bench/pivot_pairs.jl [--only=case118,...] [--generators=false]` | diff --git a/bench/profile/phase_split.md b/bench/profile/phase_split.md index d9b982b..ed49b9a 100644 --- a/bench/profile/phase_split.md +++ b/bench/profile/phase_split.md @@ -1,4 +1,4 @@ -# SDS phase split on CUDA (performance.md, experiment 0) +# SDS phase split on CUDA (PERFORMANCE.md, experiment 0) Generated by `bench/profile_phases.jl` on NVIDIA GeForce RTX 4080, 2026-10-02. Wall time: best of 5 warm runs at full clock; a sixth run per phase under `CUDA.@profile` gives the kernels. *busy* is the sum of kernel durations; *top* is the longest kernel, its share of *busy* and its number of thread blocks. diff --git a/bench/profile/phase_split_main_9d280d0.md b/bench/profile/phase_split_main_9d280d0.md index b9d1ef2..6ea43c0 100644 --- a/bench/profile/phase_split_main_9d280d0.md +++ b/bench/profile/phase_split_main_9d280d0.md @@ -1,4 +1,4 @@ -# SDS phase split on CUDA before the regime-A split (main at 9d280d0; performance.md, experiment 0) +# SDS phase split on CUDA before the regime-A split (main at 9d280d0; PERFORMANCE.md, experiment 0) Generated by `bench/profile_phases.jl` on NVIDIA GeForce RTX 4080, 2026-10-02. One warm run per phase under `CUDA.@profile`, wall time from a single warm run without clock warm-up (the script then had no `spin_device`; small cases read up to ~2× high, the single-block KKT kernels of tens of ms are not affected). *busy* is the sum of kernel durations; *top* is the longest kernel, its share of *busy* and its number of thread blocks. diff --git a/bench/profile_phases.jl b/bench/profile_phases.jl index 56a979a..8350299 100644 --- a/bench/profile_phases.jl +++ b/bench/profile_phases.jl @@ -1,4 +1,4 @@ -# Experiment 0 of performance.md: where SDS spends refactorization and solve +# Experiment 0 of PERFORMANCE.md: where SDS spends refactorization and solve # time on CUDA. For every harness matrix and structure, one warm # refactorization and one warm solve run under `CUDA.@profile` (CUPTI); the # script reports the launch plan of the schedule (regime-A subtrees, regime-B @@ -183,7 +183,7 @@ end function write_md(path, rows) open(path, "w") do io - println(io, "# SDS phase split on CUDA (performance.md, experiment 0)\n") + println(io, "# SDS phase split on CUDA (PERFORMANCE.md, experiment 0)\n") println(io, "Generated by `bench/profile_phases.jl` on ", CUDA.name(CUDA.device()), ", ", Dates.today(), ". Wall time: best of 5 warm runs at full clock; a sixth run per phase under `CUDA.@profile` gives the kernels. *busy* is the sum of kernel durations; ", "*top* is the longest kernel, its share of *busy* and its number of thread blocks.\n") diff --git a/src/options.jl b/src/options.jl index 8370c85..14691a1 100644 --- a/src/options.jl +++ b/src/options.jl @@ -78,7 +78,7 @@ const DEFAULT_SUBTREE_BUDGETS = [16 * 1024, 32 * 1024, 48 * 1024] # Regime A runs a subtree on one workgroup. A tree of small fronts fits the # local-memory budgets as a whole and then ran on one workgroup of one SM: the # pglib KKT dumps were factored 10-20x slower than with regime A off -# (performance.md, experiment 0; bench/profile/phase_split.md). A subtree may do +# (PERFORMANCE.md, experiment 0; bench/profile/phase_split.md). A subtree may do # at most `1/SUBTREE_PARALLELISM` of the factorization flops. 4096 was the best # or near-best value of a sweep over 128..4096 on the harness (RTX 4080); it # leaves the SuiteSparse and Laplacian subtrees as they were.