Science Score: 39.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
✓DOI references
Found 12 DOI reference(s) in README -
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (13.9%) to scientific vocabulary
Repository
Basic Info
Statistics
- Stars: 10
- Watchers: 2
- Forks: 0
- Open Issues: 0
- Releases: 4
Metadata Files
README.md
PITTS
PITTS--Parallel Iterative Tensor-Train Solvers--is a small header-only C++20 library for numerical algorithms with low-rank tensor approximations in tensor train form (TT format, see 2 and 3). Algorithms are parallelized for multi-core CPU clusters using OpenMP and MPI.
Currently provides a fast TT-SVD implementation (algorithm to compress a dense tensor in the TT format), and methods for solving linear systems (symmetric and non-symmetric) in tensor-train format (TT-GMRES 4, TT-MALS 5, TT-AMEn 6).
Bindings to other languages / libraries: * Python: complete functionality using pybind11 with numpy-compatible interface * ITensor (C++): conversion to/from MPS and MPO * Julia (JlCxx): basic data types and TSQR algorithm
Table of Contents
Install
You can get a copy of the repository from [https://github.com/melven/pitts]:
sh
git clone https://github.com/melven/pitts.git
Dependencies
- CMake >= 3.18 (tested with 3.23, 3.26 and 3.28)
- GCC >= 11.1 (or a C++20 compliant compiler, tested with GCC 12 and 13 and with LLVM 16)
- OpenMP (usually included in the compiler)
- MPI (tested with OpenMPI 4.1 and MPICH 4.1)
- LAPACK (tested with Intel MKL 2022.1 and 2023.2)
- Eigen >= 3.3.9 (3.3.8 has a C++20 bug, tested with 3.4.0 and master branch from 2023-10 (faster))
- cereal (tested with 1.3)
- Python >= 3.6 (tested with 3.9 and 3.10)
- pybind11 (optional, tested with 2.9 and 2.10)
- JlCxx (optional, tested with 0.11)
- likwid (optional, tested with 5.2)
Supplied version numbers ("tested with") are used in CI builds.
Compiling
Simply configure with CMake and compile, on Linux system usually done by:
sh
cd pitts
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
Running the tests
Internally uses googletest with patches for MPI parallelization for testing C++ code and python unittest to check the behavior of the python interface.
sh
make check
The tests run with different numbers of OpenMP threads and MPI processes.
They call mpiexec to launch multiple processes, respectively the SLURM command srun when a SLURM queueing system is found.
Usage
Currently, pitts can be used from C++ and python.
C++ interface
pitts is intended as header-only library and its data types and algorithms can be directly included:
```c++
include "pitts_tensortrain.hpp"
include "pittstensortrainrandom.hpp"
// create a random tensor in TT format with dimensions 2^5 and TT ranks [2,4,4,2]
void someFunction()
{
PITTS::TensorTrain
As pitts heavily uses templates and C++20 features, using pitts from C++ code requires a C++20 compliant compiler (and enabling C++20, of course).
Python interface
For simple tests, add the build directory pitts/build/src to the PYTHONPATH environment variable.
You can also install it in a custom directory using the CMAKE_INSTALL_PREFIX setting and type make install.
To use PITTS in your python code, simply import pitts_py:
```python import pitts_py
create a random tensor in TT format with dimensions 2^5 and TT ranks [2,4,4,2]
tt = pittspy.TensorTraindouble(dimensions=[2,2,2,2,2]) tt.setTTranks([2,4,4,2]) pitts_py.randomize(tt) ```
References
[1] Roehrig-Zoellner, M., Thies, J. and Basermann, A.: "Performance of the Low-Rank TT-SVD for Large Dense Tensors on Modern MultiCore CPUs", SIAM Journal on Scientific Computing, 2022, https://doi.org/10.1137/21M1395545
[2] Oseledets, I. V.: "Tensor-Train Decomposition", SIAM Journal on Scientific Computing, 2011, https://doi.org/10.1137/090752286
[3] Grasedyck, L., Kressner, D. and Tobler, C.: "A literature survey of low-rank tensor approximation techniques", GAMM-Mitteilungen, 2013, https://doi.org/10.1002/gamm.201310004
[4] Dolgov, S. V.: "TT-GMRES: solution to a linear system in the structured tensor format", Russian Journal of Numerical Analysis and Mathematical Modelling, 2013, https://doi.org/10.1515/rnam-2013-0009
[5] Holtz, S., Rohwedder, T. and Schneider, R.: "The Alternating Linear Scheme for Tensor Optimization in the Tensor Train Format", SIAM Journal on Scientific Computing, 2012, https://doi.org/10.1137/100818893
[6] Dolgov, S. V. and Savostyanov, D. V.: "Alternating Minimal Energy Methods for Linear Systems in Higher Dimensions" SIAM Journal on Scientific Computing, 2014, http://doi.org/10.1137/140953289
Contributing
Please feel free to send any question or suggestion to Melven.Roehrig-Zoellner@DLR.de.
License
Owner
- Name: Melven Roehrig-Zoellner
- Login: melven
- Kind: user
- Location: Cologne
- Company: DLR (German Aerospace Center)
- Repositories: 16
- Profile: https://github.com/melven