Skip to content

Parallel solves in HiPO - #3200

Merged
filikat merged 47 commits into
latestfrom
hipo-s
Aug 7, 2026
Merged

filikat merged 47 commits into
latestfrom
hipo-s

Conversation

@filikat

@filikat filikat commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator
  • Forward, backward and diagonal solves with the factorisation now exploit multi-threading. This is achieved by dividing the supernodes into tasks, with each tasks processing "enough work" to make multi-threading worth it. From the supernodal elimination tree, a task elimination tree is derived giving the dependencies among tasks.
  • Diagonal solves are easily parallelised, as different supernodes require access to different entries, an there is no need to satisfy tree dependencies. Backward solves are easy too, because the tree is processed from roots to leaves, so no data race is possible. Forward solves are more tricky, because the tree is processed from leaves to roots, so local buffers are needed to avoid data races. A heuristic chooses whether to use serial or parallel solve, for each of the three types of solves, depending on the properties of the elimination tree.
  • Given the many phases that can run in parallel within HiPO, two new options are added hipo_parallel_force and hipo_parallel_forbid, to force or forbid the use of specific parallel techniques. They are both bit maps and their details are explained in the documentation.
  • General improvements and simplifications of the factorisation code

@codecov

codecov Bot commented Aug 5, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 1.51007% with 587 lines in your changes missing coverage. Please review.
✅ Project coverage is 72.72%. Comparing base (5d2e9ed) to head (9217b34).
⚠️ Report is 78 commits behind head on latest.

Files with missing lines Patch % Lines
highs/ipm/hipo/factorhighs/HybridSolveHandler.cpp 0.00% 218 Missing ⚠️
highs/ipm/hipo/ipm/FactorHighsSolver.cpp 0.00% 98 Missing ⚠️
highs/ipm/hipo/factorhighs/Analyse.cpp 0.00% 79 Missing ⚠️
...ipm/hipo/factorhighs/HybridHybridFormatHandler.cpp 0.00% 65 Missing ⚠️
highs/ipm/hipo/ipm/Solver.cpp 0.00% 34 Missing ⚠️
highs/ipm/hipo/factorhighs/Numeric.cpp 0.00% 19 Missing ⚠️
highs/ipm/hipo/factorhighs/Factorise.cpp 0.00% 18 Missing ⚠️
highs/ipm/hipo/factorhighs/Symbolic.cpp 0.00% 11 Missing ⚠️
highs/ipm/hipo/ipm/Options.h 0.00% 10 Missing ⚠️
highs/ipm/hipo/ipm/PreProcess.cpp 0.00% 10 Missing ⚠️
... and 8 more
Additional details and impacted files
@@            Coverage Diff             @@
##           latest    #3200      +/-   ##
==========================================
- Coverage   72.92%   72.72%   -0.21%     
==========================================
  Files         436      442       +6     
  Lines      106033   106631     +598     
  Branches    17071    17173     +102     
==========================================
+ Hits        77327    77544     +217     
- Misses      28430    28810     +380     
- Partials      276      277       +1     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@filikat filikat self-assigned this Aug 5, 2026
@filikat
filikat marked this pull request as ready for review August 6, 2026 13:52
@filikat
filikat requested a review from jajhall August 6, 2026 13:52

@jajhall jajhall left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I trust you on the technical changes, but in the documentation there are typos in parallel.md since it compiles to give

Setting hipo\_parallel_force (resp. hipo\_parallel\_forbid) to one of these values, or a sum of values, forces (resp. forbids) the use of parallelism in the corresponding phases. These options override any other behaviour enforced by other options. If a given phase is both forced and forbidden, the default behaviour is used instead. For instance, setting hipo\_parallel\_force to 81 = 1+16+64 and hipo\_parallel\_forbid to 68 = 4+64 forces the use of parallelism in the analyse phase and for building the normal equations values, and forbids it for the reordering of augmented system.

Also, could you comment on the default value of hipo_parallel_type, hipo_parallel_force and hipo_parallel_forbid, as well as adding a health warning about changing hipo_parallel_force or hipo_parallel_forbid: something along the lines of "the heuristics are very much likely to be correct, but force/forbid are ways of overriding them"

@filikat
filikat merged commit a2946b6 into latest Aug 7, 2026
534 of 536 checks passed
@filikat
filikat deleted the hipo-s branch August 7, 2026 10:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants