Skip to content
Sylwester Arabas edited this page Aug 17, 2018 · 2 revisions

Blitz++ is a meta-template library for array manipulation in C++ with a speed comparable to Fortran implementations, while preserving an object-oriented interface.

Blitz++ is implemented using expression template techniques thanks to which optimizations such as loop fusion, unrolling, tiling, and algorithm specialization can be performed automatically at compile time without relying on compiler optimisations.

The key rationale behind development of Blitz++ has been that the scientific computing requires domain-specific abstractions, such as arrays, matrices, and tensors. Building such abstractions into a language (such as arrays in Fortran 90) can result in fast code, but may also be limiting: such abstractions are hard to extend or modify, and economics restrict the number of features which may be included in a compiler. The solution offered by Blitz++ is to move high-level optimizations out of compilers and into libraries. The Blitz++ library demonstrates how this may be done in C++. The mechanisms are somewhat crude, but the results are appealing: Blitz++ arrays offer functionality and efficiency competitive with Fortran 90, but without any language extensions. The Blitz++ library is able to parse and analyse array expressions at compile time, and performs loop transformations which have until now been the responsibility of optimizing compilers. Furthermore, being a library allows to incorporate new and useful features - independent of compiler. Some examples of such extensions featured in Blitz++ are flexible storage formats, tensor notation and index placeholders.

Blitz++ has matured back in early noughties and its development has entered maintenance mode as of the time of writing.