Add Hybrid Solver#112
Conversation
Codecov Report❌ Patch coverage is ❌ Your patch check has failed because the patch coverage (10.34%) is below the target coverage (75.00%). You can increase the patch coverage or adjust the target coverage. Additional details and impacted files@@ Coverage Diff @@
## main #112 +/- ##
==========================================
- Coverage 80.73% 80.07% -0.67%
==========================================
Files 51 52 +1
Lines 2118 2138 +20
Branches 280 285 +5
==========================================
+ Hits 1710 1712 +2
- Misses 408 426 +18
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
|
||
| if(POLYSOLVE_WITH_MPI) | ||
| # If the option is ON (either via auto-detect or forced by the user), ensure it is actually found | ||
| find_package(MPI REQUIRED) |
There was a problem hiding this comment.
i have mixed feeling about this, i would rather have a warning and disalbe if no mpi
|
|
||
| # Silently detect MPI to set the default option | ||
| find_package(MPI QUIET) | ||
| if(MPI_CXX_FOUND) |
There was a problem hiding this comment.
here too, the philosophy of polysolve is user select, if system dosent have it, warning then disable
There was a problem hiding this comment.
I think MPI should be disabled by default just like CUDA. Both are troubling dependencies.
| m_nrows = A.rows(); | ||
| m_ncols = A.cols(); | ||
| m_nnz = A.nonZeros(); | ||
|
|
There was a problem hiding this comment.
It's fine to support int32 index only, but please throw on large index somewhere. Do hybrid support int64 index type?
| solvers.push_back("CPUHybrid"); | ||
| #endif | ||
| #ifdef POLYSOLVE_WITH_GPU_HYBRID | ||
| solvers.push_back("GPUHybrid"); |
There was a problem hiding this comment.
Tests that require GPU to run should be hidden by default
| "doc": "Use preconditioned residual norm for termination check." | ||
| }, | ||
| { | ||
| "pointer": "/CPUHybrid", |
There was a problem hiding this comment.
This is just my personal opinion but maybe setting other than tolerance should be in advanced? I don't think user would want to tweak stuff like gmm iter.
Added CPU and GPU implementations of hybrid linear solver. The CPU solver is only built if MPI is found, and the GPU solver is only built if CUDA is found.
Added cuDSS wrapper
Added test case to verify hybrid linear solvers are converging well for a system with ill-conditioning due to contact