===== FLENS [TOC] ===== 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. - __GeMatrix__, - __SyMatrix__, - __TrMatrix__, - __DenseVector__. - 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: - __clang__ version 3.0 (or higher) - __gcc__ version 4.7 (or higher) - __icc__ version 12.1.2 (or higher) Git It ====== You can clone a public branch from __GitHub__ *--[BOX]------------------------------------------------------------------* | | | git clone git://github.com/michael-lehn/FLENS.git | | | *-------------------------------------------------------------------------* Philosophy ========== *--[BOX]------------------------------------------------------------------* | | | 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__! :links: __FLENS-LAPACK__ -> doc:flens/lapack/lapack __FLENS-BLAS__ -> doc:flens/blas/blas __BLAS__ -> http://www.netlib.org/blas/ __LAPACK__ -> http://www.netlib.org/lapack/ __tutorial__ -> doc:flens/examples/tutorial __Session (\d)__ -> doc:flens/examples/tutorial#$1 __GeMatrix__ -> file:flens/matrixtypes/general/impl/gematrix.h __SyMatrix__ -> file:flens/matrixtypes/symmetric/impl/symatrix.h __TrMatrix__ -> file:flens/matrixtypes/triangular/impl/trmatrix.h __DenseVector__ -> file:flens/vectortypes/impl/densevector.h __CXXBLAS__ -> dir:cxxblas/ __QD Library__ -> http://crd-legacy.lbl.gov/~dhbailey/mpdist __mpfr__ -> http://www.mpfr.org __ATLAS__ -> http://math-atlas.sourceforge.net __GotoBLAS__ -> http://www.tacc.utexas.edu/tacc-projects/gotoblas2 __GitHub__ -> http://github.com/michael-lehn/FLENS __clang__ -> http://clang.llvm.org/ __gcc__ -> http://gcc.gnu.org/ __icc__ -> http://software.intel.com/en-us/articles/intel-compilers/ __list__ -> https://imap.uni-ulm.de/lists/info/flens