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.
-
FLENS-BLAS is a high-level and easy-to-use BLAS interface
-
FLENS-LAPACK is a high-level and easy-to-use C++ implementation of LAPACK.
-
FLENS also allows using overloaded operators for accessing BLAS. Most important in this respect:
-
Overloaded operators come without performance penalty!
-
In a special debug mode you can exactly trace what is happening and how you linear algebra expressions gets evaluated through BLAS calls
-
More features are explained in the tutorial.
-
Examples and Tutorial
-
Overview of all driver functions currently implemented in FLENS-LAPACK
-
We just started with a tutorial:
-
Session 1: General matrices and dense vectors.
-
Session 2: BLAS, CXXBLAS, FLENS-BLAS and Overloaded Operators.
-
Session 3: More on matrices: Triangular and symmetric matrices, matrix views, ...
-
Session 4: Using FLENS-LAPACK.
-
Session 5: Using an external LAPACK implementation.
-
Session 6: Define your own matrix/vector types.
-
Session 7: How to define a kick-ass interface for FLENS-LAPACK.
-
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.
-
FLENS-BLAS and FLENS-LAPACK.
-
Overloaded operators for BLAS working ontop of the FLENS-BLAS layer.
-
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!