CompressedSparseLayout¶
Usage
use CompressedSparseLayout;
or
import CompressedSparseLayout;
Warning
‘CompressedSparseLayout’ is unstable and may change in the future
This module supports Compressed Sparse Row/Column (CSR/CSC) memory
layouts for sparse domains and the arrays declared over them. It
does this via a pair of records, csrLayout
and
cscLayout
, which correspond to the CSR and CSC approaches,
respectively. These two records are duals of one another, where the
CSR format supports efficient iteration over rows while the CSC
format is better for column-wise traversals.
A sparse domain can be declared using these layouts using syntax like the following:
use CompressedSparseLayout; const D = {1..m, 1..n}, // a dense domain defining a bounding box CSRDomain: sparse subdomain(D) dmapped new csrLayout() = ...; var CSRArray: [CSRDomain] real;
In addition to the standard methods and operators defined on sparse domains and arrays in Chapel, these layouts also support the following methods:
Domains and arrays support
.rows()/.cols()
queries, which return arange
value representing the indices of the rows or columns over which the domain is defined. Note that some of these rows or columns may be empty in practice.CSR/CSC arrays support
.colsAndVals(row)
/.rowsAndVals(col)
iterators, which take a given row/column index as input and yield 2-tuples corresponding the column/row index and value at that index, respectively. Note that CSR only supports.colsAndVals()
and CSC only supports.rowsAndVals()
.
- config param csLayoutSortByDefault = true¶
Indicates whether the indices within a row/column of a CSR/CSC layout should be sorted by default or not. Note that this default can be overridden on a per-instance basis using the
sortedIndices
initializer arguments below.
- record csrLayout¶
This record implements a 2D compressed sparse row layout (CSR, for short).
Each domain declared over this layout represents its sparse index set using an
.size
-element vector to store the column indices and a ~#rows-element vector indicating the offset where each row starts. ThesortedIndices
argument in the initializer indicates whether the column indices within each row are stored in sorted order or not.Arrays declared over such domains store their elements corresponding to the domain’s indices using a dense
.size
-element vector.As a result of this storage format, CSR domains and arrays support efficient iteration over rows, but not over columns.
- param sortedIndices : bool = csLayoutSortByDefault¶
- proc init(param sortedIndices: bool = csLayoutSortByDefault)¶
- record cscLayout¶
This record implements a 2D compressed sparse column layout (CSC, for short). It is the dual of the
csrLayout
layout above, simply swapping rows and columns in its representation and operators. As a result, it effectively stores its arrays’ values in column-major order, supporting efficient iteration over rows, but not over columns.- param sortedIndices : bool = csLayoutSortByDefault¶
- proc init(param sortedIndices: bool = csLayoutSortByDefault)¶