GSLIB
GSLIB is a library for Gather/Scatter-type nearest neighbor data exchanges for SEM, FEM, and finite-difference applications. It can also be used for efficient transpose and reduction operations and for smoothing, prolongation, and restriction in AMG and other solvers.
Any global-to-local map, $l(i) = g(j(i))$, can be expressed as the matrix-vector product $l=Qg$, where $Q$ is a Boolean matrix. GSLIB supports the parallel matrix-vector products $Q$, $Q^T$, and $QQ^T$. Users simply provide the local-to-global map $j(i)$ on each processor. GSLIB identifies shared global vertices across multiple processors and sets up the required communication exchange to use the fastest of three available algorithms. The user does not need to know or express data locality to efficiently establish communication on anywhere from one to millions of ranks.
GSLIB supports
- Stencils of arbitrary width
- 64-bit indexing for global addressing
- short / long ints, floats, doubles
- arbitrary associative/commutative operators (+,*,min/max) for reduction, $Q^T$
- GPUDirect communication (beta-version)
- gather-scatter on arbitrary m-tuples (vector fields)
Additional features include:
- XXT solver (parallel direct solver for coarse-grid problems)
- AMG solver (design for solving coarse-grid problems in parallel)
- Robust and efficient spectral/finite element interpolation in parallel.
Applications and libraries using GSLIB include Nek5000, NekCEM, Nektar++, and MOAB.
In CEED, GSLIB is primarily involved in the efforts of the Software thrust.
For more information, see the GSLIB GitHub repository: https://github.com/gslib/gslib.