elemental / Elemental

Distributed-memory, arbitrary-precision, dense and sparse-direct linear algebra, conic optimization, and lattice reduction
Other
505 stars 110 forks source link

Build Status Join the chat at https://gitter.im/elemental/chat

Elemental is a modern C++ library for distributed-memory dense and sparse-direct linear algebra, conic optimization, and lattice reduction. The library was initially released in Elemental: A new framework for distributed memory dense linear algebra and absorbed, then greatly expanded upon, the functionality from the sparse-direct solver Clique, which was originally released during a project on Parallel Sweeping Preconditioners.

Deprecation notice

Elemental has not been maintained since 2016. But the project was forked by Lawrence Livermore National Lab. The author stopped being interested in volunteering to develop MPI codes and no one has stepped up after three years.

Software consists of teams of people. If you want people to continue developing a project after it ceases to be their personal interest, fund them for it.

The developer is now volunteering time towards high-performance math software for workstations at hodgestar.com.

Documentation

The (now outdated) documentation for Elemental is built using Sphinx and the Read the Docs Theme

Unique features

Elemental supports a wide collection of sequential and distributed-memory functionality, including sequential and distributed-memory support for the datatypes:

Linear algebra:

Convex optimization:

Lattice reduction:

The current development roadmap

Core data structures:

Linear algebra:

Convex optimization:

License

The vast majority of Elemental is distributed under the terms of the New BSD License. Please see the debian/copyright file for an overview of the copyrights and licenses for the files in the library.

The optional external dependency METIS is distributed under the (equally permissive) Apache License, Version 2.0, though ParMETIS can only be used for research purposes (and can be easily disabled). libquadmath is distributed under the terms of the GNU Lesser General Public License, version 2.1 or later, while, QD is distributed under the terms of the LBNL-BSD-License.

Dependencies

Intranodal linear algebra

OpenBLAS is automatically downloaded and installed if no vendor/tuned BLAS/LAPACK is detected.

Intranodal graph partitioning

If ParMETIS is not disabled and cannot be found (including access to internal APIs), then it is automatically downloaded and installed; otherwise, if METIS support is not detected, METIS is downloaded and installed.

Internodal linear algebra

If ScaLAPACK support is not explicitly disabled, then Elemental looks for a previous installation and, failing that, attempts to automatically download and install the library.

Internodal communication

Auxiliary libraries

Python interface

C++ visualization

Build system

Third-party interfaces

In addition to the C++11, C, and Python interfaces included within the project, three external interfaces are currently being externally developed:

Related open-source projects

Distributed dense linear algebra:

Distributed sparse-direct linear algebra:

Distributed linear algebra Frameworks

Convex optimization

Lattice reduction and number theory