Requirements of the GLAS library

To attain the goals as described above, GLAS needs to fulfill at least following requirements:

Types of matrices

GLAS must provide both dense and sparse matrices. Dense matrices can be considered a special case of sparse matrix that have a fixed structure and with the number of non-zeros equal to the number of rows times the number of columns. Dense matrices thus do not allow to change the structure. But sparse matrices neither always allow to change the structure. Some types of sparse matrices might be optimised by freezing their structure at a specific moment.

Additionally also structured matrices will be supported such as symmetric, hermitian, skew-symmetric etc.

Containers and views

Vectors and matrices 'own' their values. But many different types of views will be made available that implement the same interfaces.

Storage

The containers need to be able to store their data on the stack or on the heap. They also need to be able to store (part of) their data on disk (to support out-of-core algorithms). Additionally it should be possible to distribute data over multiple memory spaces (to support parallel algorithms).

Efficient expression evaluation

Within this project we focus on evaluating expressions containing operations on vectors, matrices and other expressions in a minimal amount of time. An example of such and expression is y = a*x + b. These expressions should be evaluated as efficiently as possible taking into account possible memory-footprint constraints. Therefore it needs to minimise the necessary amount of floating point operations and the data access patterns. Additionally, the expression might be best evaluated without or using some strategically placed temporaries. Again these temporaries need an optimal layout to reduce the required number of flops and optimise the data-access patterns. For instance D=(A+B)*(C+D) is best evaluated using a temporaries. The goal of the project is to analyse the order of the evaluation of elements of an expression depending on the data in this expression. Generics should also support mixing different data types (e.g. multiplication of real matrix with complex vector).

3rd party backends

This project is about (an interface for) a generic linear algebra library and to provide a reference implementation. To attain optimal performance with this reference implementation, the generics should certainly allow to plugin multiple optimised backends such as Netlib-BLAS, ATLAS etc. Whenever such a backend is plugged in, the library should be able to map (parts of) expressions to these backends and request to calculate them. Of course, the (parts of) expressions that can not be mapped must be calculated by the library itself.

Multi-platform

Linear algebra intensive applications are run on a wide variety of platforms. Therefore GLAS aims to support all these platforms. It is however required that are reasoneably standard conforming C++ compiler is available for each of supported platforms. Efforts to be compatible with non-conforming compilers however may not cripple the design.