CUsparse ch3 Cusparse索引及其数据格式
来源:互联网 发布:虚拟炒股软件 编辑:程序博客网 时间:2024/06/04 19:55
水平有限,仅供参考。
参考文档:http://docs.nvidia.com/cuda/cusparse/index.html#axzz49iopDHZG
Cusparse 库支持稠密和稀疏矩阵,以及稠密和稀疏向量格式。
3.1 索引基本格式
该库支持0和1索引,指标基通过cusparseIndexBase_t 类型来选择,作为一个独立参数或作为矩阵描述符 cusparseMatDescr_t 类型中的字段传递。
3.2 向量格式
本节说明稠密向量和稀疏向量。
3.2.1稠密格式
稠密向量由一个以为的数组表示,该数组在内存中线性存储。例如以下7×1的稠密向量。
[1.0 0.0 0.0 2.0 3.0 0.0 4.0]
3.2.2稀疏格式
稀疏向量由两个数组表示。
Ø 数值数组 同等稠密格式的非零值。
Ø 整数索引数组 对应同等稠密格式中非零值的位置。
例如,上一节中的向量可以存储为以下稀疏格式
Ø 0索引
[1.0 2.0 3.0 4.0]
[0 3 4 6]
Ø 1索引
[1.0 2.0 3.0 4.0]
[1 4 5 7]
两种格式中,上面一行都是数据数组而下面一行是索引数组,假设索引按升序给出并且每个索引最多只出现一次。
3.3 矩阵格式
本节讨论稠密矩阵和几种稀疏矩阵格式。
3.3.1 稠密格式
矩阵以列主元格式存储,并由以下参数表示:
m
整数
矩阵的行数
n
整数
矩阵的列数
ldx
整数
X的主维度,>=m,如果ldx>m,则X是内存中一大矩阵的子矩阵
x
指针
指向包含矩阵元素的数据数组。它假设,有足够的存储空间分配给X,而且 cuSPARSE 库函数可以访问子矩阵之外的值,但不会覆盖它们。
比如,1索引格式的m×n阶稠密矩阵X如下:
在内存中存储为以下格式:
Tips 该格式和NVIDIA CUDA cuBLAS库中使用的数据类型一样。
3.3.2 坐标格式(COO)
COO格式的稀疏矩阵A由以下参数表示
nnz
整数
矩阵中非零元素的个数
cooValA
指针
指向长度为nnz的包含行主要格式的 A 的所有非零值的数据数组。
cooRowIndA
指针
指向包含行索引的数组 cooValA 中的相应元素的长度非整数数组。
cooColIndA
指针
指向包含列索引的数组 cooValA 中的相应元素的长度非整数数组。
COO格式的稀疏矩阵假定存储在行主要格式︰ 索引数组首先按行索引排序,然后在同一行内压缩的列索引。每一对行索引和列索引只出现一次。例如,如下矩阵A
0索引的COO格式为:
1索引的COO格式为:
3.3.3 压缩稀疏行格式(CSR)
CSR格式和COO的唯一区别是行索引是压缩格式的。
描述参数表
nnz
整数
矩阵中非零元素的个数
csrValA
指针
指向长度为nnz的包含行主要格式的 A 的所有非零值的数据数组。
csrRowPtrA
指针
指向长度为m+1的整数数组,前m个元素是每行第一个非零元素在csrValA中的索引,最后一个元素为 nnz+csrRowPtrA(0)(0索引则为0或1索引为1)
cooColPtrA
指针
指向包含列索引的数组 cooValA 中的相应元素的长度非整数数组。
0索引
1索引
3.3.4 压缩稀疏列格式(CSC)
同上,列指标压缩
0索引的COO格式为:
1索引的COO格式为:
3.3.5 Ellpack-Itpack 格式(ELL)
m×n的稀疏矩阵A中,每行最多非零元素数为k,则用两个m×k的稠密矩阵来存储A,第一个表示非零元素,第二个表示非零元素对应的列索引。对于无值的元素,前一矩阵中用0表示,索引矩阵中用-1表示。
例如,前面蹂躏了好几遍的稀疏矩阵A
存储为ELL格式的稀疏矩阵有k=3:
因此数据阵
0索引格式的索引阵
1索引格式的索引阵
ELL格式并不能直接使用,而是经常用于存储下一节中混合模式的稀疏矩阵的整齐部分。
3.3.6 混合格式(HYB)
整齐的用ELL格式存,不整齐的用COO存。使用时需要转换。这个有鸟用?
3.3.7 块压缩稀疏行格式(BSR)
和CSR的区别是CSR存储原始数据,二BSR存储一个原始数据的二维方块。
上参数表:
blockDim
整数
块大小
mb
整数
块行数
nb
整数
块列数
nnzb
整数
非0块个数
bsrValA
指针
指向nnzb*blockDim^2维的数据数组,包含A中所有非零元素,以行主元或列主元格式存储。
bsrRowPtrA
指针
指向长度为mb+1的整数数组,包含bsrValA和bsrColIndA中所有元素,前mb个元素中i为第i个块行中第一个非零块的块列索引,最后一个值为nnzb+bsrRowPtrA(0), bsrRowPtrA(0)和前面的CSR和CSC一样,是0或者1
bsrColIndA
指针
指向长度nnzb的整数数组,包含对应bsrValA中对应块的列索引。
还是矩阵A
如果块大小是2
那么mb=2
nb=3
(除完之后向上取整?可能是吧,反正文档里给的公式我看不太懂),如果有不满的块,则用0填充。
于是,各参数如下:
0索引
BsrValA=[A00 A01 A10 A11 A12]
bsrRowPtrA=[0 2 5]
bsrColIndA[0 1 0 1 2]
列主元
bsrValA=[1 0 4 2 0 3 0 0 50 0 0 0 9 7 0 8 6 0 0]
行主元
bsrValA=[1 4 0 2 0 0 3 0 50 0 0 0 7 9 0 8 0 6 0]
11索引
BsrValA=[A11 A12 A21 A22 A23]
bsrRowPtrA=[1 3 6]
bsrColIndA[1 2 1 2 3]
列主元
bsrValA=[1 0 4 2 0 3 0 0 5 0 0 0 0 9 7 0 86 0 0]
行主元
bsrValA=[1 4 0 2 0 0 3 0 5 0 0 0 0 7 9 0 80 6 0]
3.3.8 扩展BSR格式
只是把bsrRowPtrA拆成两部分
[0 2 5]
拆成了[0 2] [2 5]
没看太懂。
公式下次更新,复制粘贴有点问题。有时间传图片。
水平有限,仅供参考。
参考文档:http://docs.nvidia.com/cuda/cusparse/index.html#axzz49iopDHZG
水平有限,仅供参考。
参考文档:http://docs.nvidia.com/cuda/cusparse/index.html#axzz49iopDHZG
- CUsparse ch3 Cusparse索引及其数据格式
- CUSPARSE 第三章 CUSPARAE索引和数据格式
- CuSparse 第一章
- CUSparse 第二章 使用CUSPARSE API
- cusparse的使用
- CUsparse ch1 引言
- CUsparse ch2 使用cusparse应用程序编程接口(API)
- LIBSVM数据格式及其使用
- RIFF及其WAVE数据格式
- ArcGIS中常见数据格式及其转换
- 离散数学及其应用——ch3 基础:算法、整数和矩阵
- 索引及其优缺点
- 索引及其用途
- 索引类型及其区别
- mysql索引及其优化
- 数据库索引及其使用
- CH3: 列表
- DPDK-CH3
- 安卓中为了获取context的方法和区别(getContext,getActivity,this,mainActivity.this等)
- java数据结构举例-幻方实现
- Java中过滤出字母、数字和中文的正则表达式
- Linux Ubantu安全模式修改root密码
- urlencode
- CUsparse ch3 Cusparse索引及其数据格式
- OC textField键盘弹起事件
- 五指cms筛选功能的实现
- CocoaPods报错:The dependency `AFNetworking ` is not used in any concrete target
- 第15周-阅读程序(5)
- Linux下oracle数据库连接问题
- 关于分布式一致性的探究
- spark组件之graphx函数方法(一)
- 搞了将近一个月的AS400,现在又转回Android~