Glossary

Block

A block is an interface to a logically contiguous array of data. Blocks provide a means to organize the access to the data. They may store the data themselves, or access the data through other blocks. This abstraction provides important latitude for optimizations such as expression templates, or parallelism.

Block types have to fulfill the requirements outlined in table 6.1 of the specification.

Dense Block

Dense blocks are modifiable, allocatable blocks that explicitely store one value for each index in its domain. The data layout is specified in terms of a template parameter, allowing storage to be optimized for particular operations (see dimension ordering).

Dense blocks allow users to supply data storage, either at construction time, or later, in which case the block is 'rebound' to an alternate user storage.

Dimension Ordering

Dimension ordering refers to the layout of data in a multi-dimensional block, such as row-major or column-major. Dimension ordering has an impact on performance in operations involving loops over the data, as adjacent reads / writes may require a new cache-line to be fetched first.

Domain

A domain represents a logical set of indices for which views provide data. It may be a contiguous set of indices for dense matrices, or a non-contiguous set of indices for subviews.

Expression Block

Expression blocks are used to store mathematical expressions, allowing optimized evaluation. Conventionally, in an equation 'View A = B + C * D' the computation of A would require at least two temporaries, representing the results of the two binary operations. Additionally, the evaluation of each of these subexpressions implies a loop, resuling in suboptimal performance.

With expression blocks, the above expression will generate a block representing 'B + C * D', which is evaluated when assigned to 'A'. Specializations of expression blocks may use highly optimized functions to be called, depending on the specific types and subexpressions involved.

Map

A map specifies how a block can be devided into subblocks for the purpose of parallel execution. It defines how subblocks are to be assigned to processors.

Map types have to fulfill the requirements outlined in table 3.1 of the parallel specification.

View

A view represents the base for mathematical linear algebra operations, such as vectors, matrices, tensors. It has a dimension, a value_type, and a number of accessors to access and manipulate its values. The actual data are stored in blocks, to which views hold references internally.

Multiple views may share the same data, making copy operations for those views an inexpensive operation. All views are parametrized for two types: the view's value_type, as well as the underlaying block type.

View types have to fulfill the requirements outlined in table 6.3 of the specification.