Content |
FLENS
FLENS is short for Flexible Library for Efficient Numerical Solutions. And that's exactly what it is:
A builing block for the implementation of other (higher-level) numerical libraries or numerical applications
Some key points
-
C++ library (requires a C++11 conform compiler)
-
Easy install as FLENS is headers only
-
FLENS gives you
-
Matrix/vector types for dense linear algebra
-
Generic implementation of BLAS (see CXXBLAS)
-
Generic reimplementation of LAPACK (see FLENS-LAPACK)
-
Generic implementation means that you can use any element type for your matrices/vectors that “acts like a double”. So in particular types from the QD Library, mpfr, ...
-
-
If high performance BLAS libraries like ATLAS/GotoBLAS/... are available you simply can link against them and boost performance.
Examples and Tutorial
As the documentation is almost not existing you don't have much to read. This is what we can offer you at the moment:
-
Looking at examples is always a good start:
-
Computing a LU factorization,
-
computing a QR factorization,
-
computing eigenvalues and eigenvectors,
-
solving systems of linear equations.
-
-
Overview of all driver functions currently implemented in FLENS-LAPACK
-
We just started with a tutorial:
-
Session 1: First steps with general matrices.
-
Session 2: Triangular and symmetric matrices.
-
From the examples you also can see what compiler flags are needed.
Scope of this Branch
-
Only real matrix types with full storage and dense vector types, i.e.
-
Our generic BLAS implementation CXXBLAS.
-
Support for high and multipecission types from QD Library and mpfr.
-
Support for native BLAS implementations like ATLAS or GotoBLAS.
-
Overloaded operators for BLAS mostly work but are not well tested. In FLENS-LAPACK we use the FLENS-BLAS layer (e.g. blas::mv) which is for the LAPACK part often more expressive.
-
We improved our doctool (look at the bottom of each page for document source). We now use restructured text.
Compiler Requirements
FLENS uses some of the C++11 features and therefore requires a recent C++ compiler:
Git It
You can clone a public branch from GitHub
git clone git://github.com/michael-lehn/FLENS.git
Philosophy
We are FLENS.
Resistance is futile.
Advanced technology will be assimilated...
This should answer the following questions:
-
Why are the matrix/vector types in FLENS as they are?
-
Why do we reimplement the LAPACK library with FLENS?
-
What is the idea behind our CXXBLAS?
The answer is simple:
-
LAPACK is the most advanced and best supported numerical library in the world. Improvements in numerical algorithms have a great chance to make it soon into LAPACK. If we keep FLENS-LAPACK up-to-date to current LAPACK releases we keep up with some of the most sophisticated numerical algorithms.
-
LAPACK gains its performance from highly optimized BLAS kernel routines. These implementations achieve peak performance on certain platforms. When possible our CXXBLAS is just an interface to these implementations.
-
For multi-precision data types CXXBLAS gives you a generic implementation that does not give high performance (yet) but allows using LAPACK in high precision.
Mailing List
Join the mailing list!