Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/angsch/drsyl
Robust Task-Parallel Solution of the Triangular Sylvester Equation
https://github.com/angsch/drsyl
blas openmp sylvester-equation
Last synced: about 1 month ago
JSON representation
Robust Task-Parallel Solution of the Triangular Sylvester Equation
- Host: GitHub
- URL: https://github.com/angsch/drsyl
- Owner: angsch
- Created: 2020-08-18T12:17:50.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-12-02T08:39:36.000Z (about 1 year ago)
- Last Synced: 2024-12-05T07:27:13.441Z (about 2 months ago)
- Topics: blas, openmp, sylvester-equation
- Language: C
- Homepage:
- Size: 41 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Robust Task-Parallel Solution of the Triangular Sylvester Equation
The robust solver `drsyl` solves the scaled triangular Sylvester equation $AX + XB = \alpha C$ in a tiled and task-parallel fashion. The matrices $A$ and $B$ are assumed to be upper quasi-triangular; the right-hand side matrix $C$ and the solution matrix $X$ are dense. The scalar $\alpha$ is computed alongside with the solution $X$ such that overflow is avoided and the solution matrix $X$ at no point during the computation contains infinities representing overflow. This property qualifies `drsyl` as robust. The name `drsyl` is inspired by the LAPACK naming convention and stands for *d*ouble precision *r*obust triangular *Syl*vester equation solver.
## Prerequisites
* A compiler that supports OpenMP. The compiler optimization level must be chosen such that associative math is disabled.
* An efficient BLAS implementation.
* An implementation of the LAPACK routines. Only needed for the validation.## Building and executing
### Makefile
A Makefile for the GNU compiler linked against OpenBLAS and the Intel compiler linked against MKL is included. Try `make`.### CMake
Navigate into the directory and run the following.
```
mkdir build
cd build
cmake ..
make -j
```
### ExecutionThe executable `drsyl` takes 8 input parameters.
* `m`. The matrix size of A and the row count of C and X.
* `n`. The matrix size of B and the column count of C and X.
* `tlsz`. The tile size. A good starting value is 400. For a good performance, the tile size needs to be tuned.
* `cmplx-ratio-A`. The proportion of 2-by-2 blocks on the diagonal of A.
* `cmplx-ratio-B`. The proportion of 2-by-2 blocks on the diagonal of B.
* `sign`. The sign of the matrix B in the Sylvester equation.
* `mem-layout`. The storage format of the matrices, 0=column major or 1=tile layout.
* `seed`. The seed for the random number generator to reproduce runs.For a quick test, type `./drsyl 5000 5000 400 0.5 0.5 1 0 0`. The solver uses task parallelism. The number of threads is controlled with `OMP_NUM_THREADS`. For best performance, it is recommended to pin the threads.
## Remarks
By default, a double-precision number is used for the scaling factor $\alpha$. Sometimes the systems grow so quickly that overflow protection with a double-precision scaling factor does not suffice. Then setting `-DINTSCALING` during the build process activates integer scaling factors and allows for solving systems that are not solvable by a double-precision scaling factor. This change requires a complete rebuild (`make clean`, `make`).
More information can be found [here](https://people.cs.umu.se/angies/sylvester).
## Publication Reference
Schwarz, A., Kjelgaard Mikkelsen, C.C. (2020). Robust Task-Parallel Solution of the Triangular Sylvester Equation. In: Wyrzykowski, R., Deelman, E., Dongarra, J., Karczewski, K. (eds) Parallel Processing and Applied Mathematics. PPAM 2019. Lecture Notes in Computer Science(), vol 12043. Springer, Cham. https://doi.org/10.1007/978-3-030-43229-4_8