The required components include:
- Ginkgo: The Ginkgo library is needed. It needs to be installed and preferably the installation path
provided as an environment variable in
Ginkgo_DIR
variable. - MPI: As multiple nodes and a domain decomposition is used, an MPI implementation is necessary.
To build Schwarz-Lib, you can use the standard CMake procedure.
mkdir build; cd build
cmake -G "Unix Makefiles" .. && make
By default, SCHWARZ_BUILD_BENCHMARKING
is enabled. This allows you to quickly run an example with the timings if needed. For a detailed list of options available see the Benchmarking page.
For more CMake options please refer to the Installation page
- Executor paradigm:
- GPU.
- OpenMP.
- Single rank per node and threading in one node.
- Factorization paradigm:
- CHOLMOD.
- UMFPACK.
- Solving paradigm:
- Direct:
- Ginkgo.
- CHOLMOD.
- UMFPACK.
- Iterative:
- Ginkgo.
- deal.ii.
- Partitioning paradigm:
- METIS.
- Regular, 1D.
- Regular, 2D.
- Zoltan.
- Convergence check:
- Centralized, tree based convergence (Yamazaki 2019).
- Decentralized, leader election based (Bahi 2005).
- Communication paradigm.
- Onesided.
- Twosided.
- Event based.
- Communication strategies.
- Remote comm strategies:
- MPI_Put , gathered.
- MPI_Put , one by one.
- MPI_Get , gathered .
- MPI_Get , one by one.
- Lock strategies: MPI_Win_lock / MPI_Win_lock_all .
- Lock all and unlock all.
- Lock local and unlock local.
- Flush strategies: MPI_Win_flush / MPI_Win_flush_local .
- Flush all.
- Flush local.
- Schwarz problem type.
- RAS.
- O-RAS.
Any of the implemented features can be permuted and tested.
- On Summit, the Spectrum MPI seems to have a bug with using
MPI_Put
with GPU buffers.MPI_Get
works as expected. This bug has also been confirmed with an external micro-benchmarking library, OSU Micro-Benchmarks.
For installing and building, please check the Installation page
Credits: This code (written in C++, with additions and improvements) was inspired by the code from Ichitaro Yamazaki, ICL, UTK.