libflame download page

Source code

libflame is provided as free software, licensed under the GNU Lesser General Public License (LGPL) in two forms:

Reference Guide

We strongly encourage our users to refer to the latest copy of the libflame user's guide for installation instructions and API reference.

What is libflame?

FLAME is a methodology for developing dense linear algebra libraries that is radically different from the LINPACK/LAPACK approach that dates back to the 1970s. By libflame we denote the library that has resulted from this project. For addition information, visit the FLAME home page.

What's provided by libflame?

The following libflame features benefit both basic and advanced users, as well as library developers:

What's new in libflame?

We've added lots of functionality since libflame 4.0 was released on February 13, 2010. Here is a basic summary of what's new in libflame 5.0:

Library API and implementations:

Build system:

What's in the latest snapshot?

Here is a list of features and changes we've made since 5.0 that you can enjoy right now by downloading the latest snapshot.

Status of operation support

libflame contains implementations of many operations that are provided by the BLAS and LAPACK libraries. However, not all FLAME implementions support every datatype. Also, in many cases, we use a different naming convention for our routine names. The following table summarizes which routines are supported within libflame and also provides their corresponding netlib name for reference.

operation name

netlib routine name

libflame routine name

FLAME/C

FLASH

GPU support

type support

lapack2flame support

Elemental

libflame routine prefix

FLA_

FLASH_*

FLASH_#

Level-3 BLAS

general matrix-matrix multiply

?gemm

Gemm

y

y

y

sdcz

N/A

y

hermitian matrix-matrix multiply

?hemm

Hemm

y

y

y

sdcz

N/A

y

hermitian rank-k update

?herk

Herk

y

y

y

sdcz

N/A

y

hermitian rank-2k update

?her2k

Her2k

y

y

y

sdcz

N/A

y

symmetric matrix-matrix multiply

?symm

Symm

y

y

y

sdcz

N/A

y

symmetric rank-k update

?syrk

Syrk

y

y

y

sdcz

N/A

y

symmetric rank-2k update

?syr2k

Syr2k

y

y

y

sdcz

N/A

y

triangular matrix multiply

?trmm

Trmm

y

y

y

sdcz

N/A

y

triangular solve with multiple right-hand sides

?trsm

Trsm

y

y

y

sdcz

N/A

y

LAPACK-level

Cholesky factorization

?potrf

Chol

y

y

y

sdcz

sdcz

y

LU factorization with no pivoting

~

LU_nopiv

y

y

y

LU factorization with partial pivoting

?getrf

LU_piv

y

y

y

sdcz

sdcz

y

LU factorization with incremental pivoting

~

LU_incpiv

y

sdcz

N/A

QR factorization (via UT Householder transforms)

?geqrf

QR_UT

y

y

y

sdcz

sdcz

y

QR factorization (via incremental UT Householder transforms)

~

QR_UT_inc

y

sdcz

N/A

LQ factorization (via UT Householder transforms)

?gelqf

LQ_UT

y

y

y

sdcz

sdcz

Up-and-Downdate Cholesky/QR factor

~

UDdate_UT

y

sdcz

Up-and-Downdate Cholesky/QR factor (via incremental UT Householder-like transforms)

~

UDdate_UT_inc

y

sdcz

N/A

Triangular matrix inversion

?trtri

Trinv

y

y

y

sdcz

sdcz

y

Triangular-transpose matrix multiply

?lauum

Ttmm

y

y

y

sdcz

sdcz

SPD/HPD inversion

?potri+

SPDinv

y

y

y

sdcz

sdcz

y

Triangular Sylvester equation solve

?trsyl^

Sylv

y

y

y

sdcz

sdcz

Triangular Lyapunov equation solve

~

Lyap

y

y

y

Reduction of Hermitian-positive definite eigenproblem to standard form

[sd]sygst, [cz]hegst

Eig_gest

y

y

y

sdcz

sdcz

y

Reduction to upper Hessenberg form

?gehrd

Hess_UT

y

sdcz

sdcz

Reduction to tridiagonal form

[sd]sytrd, [cz]hetrd

Tridiag_UT

y

sdcz

sdcz

y

Reduction to bidiagonal form

?gebrd

Bidiag_UT

y

sdcz

sdcz

Symmetric/Hermitian Eigenvalue Decomposition

[sd]syev, [cz]heev

Hevd

y

dz

y

Generalized Symmetric/Hermitian Eigenvalue Decomposition

[sd]sygvx, [cz]hegvx

Soon!

y

Skew Symmetric/Hermitian Eigenvalue Decomposition

~

Soon!

y

Singular Value Decomposition

?gesvd

Svd

y

dz

Notes:

  • y These routines are provided by libflame.
  • ? Expands to one of {sdcz}.
  • ~ These routines are not provided by LAPACK.
  • + The LAPACK routine ?potri() differs from FLA_SPDinv() and FLASH_SPDinv() in that ?potri() require the user to invoke the Cholesky factorization manually and then pass in the result as input, whereas the FLAME implementations perform the Cholesky factorization internally and automatically.
  • ^ LAPACK provides only an unblocked implementation of the triangular Sylvester equation solver. The lapack2flame compatibility interface maps invocations of ?trsyl() to the blocked implementation in libflame.
  • * Invocations of routines with the FLASH_ prefix call SuperMatrix by default. If SuperMatrix was not enabled at configure-time, or it was disabled at runtime with FLASH_Queue_disable(), then FLASH_ routines execute sequentially, though they will still use hierarchical storage.

  • # GPU support must be enabled at configure-time and then invoked with FLASH_Queue_enable_gpu().

LAPACK compatibility in libflame

We provide an interface, lapack2flame, which allows legacy codes that link to LAPACK to utilize libflame without any code changes. However, lapack2flame does not provide interfaces to all routines within LAPACK. The column labeled "l2f support" in the above table shows which datatypes are supported for each operation.

System and software requirements

Please see the libflame user's guide for the latest system requirements for both GNU/Linux and UNIX, and Windows platforms.

Building and installing libflame

Please see the libflame user's guide for the latest instructions on downloading, configuring, compiling, and installing libflame.

Linking your LAPACK-dependent application to libflame

Please see the libflame user's guide for the latest instructions on linking your legacy, LAPACK-dependent application to libflame.

Examples

We have plenty of example code that is ready to run.

Beyond LAPACK

We have functionality beyond LAPACK. For example, we have routines for updating an LU factorization with pivoting. Adding additional operations is not our top priority at the moment. However, if you have an operation that you would like to see supported, it doesn't hurt to contact us with your request!

Give us feedback!

Questions? Comments? Suggestions? Please email us at flame@cs.utexas.edu !

FLAMEWiki: libflame (last edited 2011-10-24 20:57:49 by FieldVanZee)