3. mcSPARSE索引和数据格式
mcSPARSE库支持稠密向量、稀疏向量以及稠密矩阵和稀疏矩阵格式。
3.1. 基准索引格式
该库支持以0为基数和以1为基数的两种索引方式。
通过 mcsparseIndexBase_t 类型来选择基准索引,可作为独立参数或矩阵描述符 mcsparseMatDescr_t 类型中的字段进行传递。
3.1.1. 向量格式
本节描述了稠密向量和稀疏向量的格式。
3.1.1.1. 稠密格式
稠密向量用一个线性数据数组表示,线性地存储在内存中。
3.1.1.2. 稀疏格式
稀疏向量使用两个数组来表示。
数据数组 包含了等价的稠密格式中的非零值。
整数索引数组 包含了等价的稠密格式中对应非零值的位置。
3.2. 矩阵格式
在这节中讨论了矩阵的稠密格式和几种稀疏格式。
3.2.1. 稠密格式
假设稠密矩阵 X 以列主序格式存储在内存中,并由以下参数表示。
|
(integer) |
矩阵的行数。 |
|
(integer) |
矩阵的列数。 |
|
(integer) |
|
|
(pointer) |
指向包含矩阵元素的数据数组的指针。
假定为 |
3.2.2. 坐标格式 (COO)
m×n 稀疏矩阵 A 由以下参数以 COO 格式表示。
|
(integer) |
该矩阵中非零元素的数量。 |
|
(pointer) |
指向长度为 |
|
(pointer) |
指向长度为 |
|
(pointer) |
指向长度为 |
假定COO格式的稀疏矩阵以行主格式存储。 每个 COO 元素由行列对组成。 COO格式假定按行排序。 支持已排序和未排序的列索引。
3.2.3. 压缩稀疏行格式(CSR)
CSR格式与COO格式之间唯一的区别在于,CSR格式中包含行索引的数组是压缩的。
m×n 稀疏矩阵 A 由以下参数以 CSR 格式表示。
|
(integer) |
矩阵中非零元素的数量。 |
|
(pointer) |
指向长度为 |
|
(pointer) |
指向长度为 |
|
(pointer) |
指向长度为 |
稀疏矩阵以CSR格式存储时,假定其采用行优先的CSR格式存储。 对于稀疏矩阵,支持已排序和未排序的列索引。
3.2.4. 压缩稀疏列格式(CSC)
CSC格式与COO格式有两个不同之处:在CSC格式中,矩阵以列主序存储并且对包含列索引的数组进行了压缩。
一个大小为 m×n 的矩阵 A 由以下参数以 CSC 格式表示。
|
(integer) |
该矩阵中非零元素的数量。 |
|
(pointer) |
指向长度为 |
|
(pointer) |
指向长度为 |
|
(pointer) |
指向长度为 |
备注
以 CSC 格式表示的矩阵 A 与其以 CSC 格式表示的转置具有完全相同的内存布局(反之亦然)。
3.2.5. 块压缩稀疏行格式 (BSR)
CSR格式和BSR格式之间唯一的区别是存储元素的格式。
前者存储原始数据类型( single 、 double 、 mcComplex 和 mcDoubleComplex),而后者存储两维方块状的原始数据类型。
BSR格式有以下参数。
|
(integer) |
矩阵 |
|
(integer) |
矩阵 |
|
(integer) |
矩阵 |
|
(integer) |
矩阵中非零块的数量。 |
|
(pointer) |
指向保存矩阵 |
|
(pointer) |
指向长度为 |
|
(pointer) |
指向长度为 |
和CSR格式一样,BSR格式中的(行,列)索引按行主序存储。 索引数组首先按行索引排序,然后在同一行内按列索引排序。
3.2.6. 扩展块压缩稀疏行格式(BSRX)
BSRX格式与BSR格式相同,但数组 bsrRowPtrA 被拆分为两部分。
每行的第一个非零块仍由数组 bsrRowPtrA 指定,这与BSR格式相同,但每行的最后一个非零块的位置由数组 bsrEndPtrA 指定。
简而言之,BSRX格式类似于BSR格式的4维向量变体。
矩阵 A 由以下参数以 BSRX 格式表示。
|
(integer) |
矩阵 |
|
(integer) |
矩阵 |
|
(integer) |
矩阵 |
|
(integer) |
矩阵中非零块的数量。 |
|
(pointer) |
指向保存矩阵 |
|
(pointer) |
指向长度为 |
|
(pointer) |
指向长度为 |
|
(pointer) |
指向长度为 |