本章描述 Sparse BLAS Level 1, 从Intel®MKL版本2.1开始,包含在Intel®Math内核库中的BLAS Level 1扩展。Sparse BLAS Level 1是一组例程和函数,它们对以压缩形式存储的稀疏向量执行许多常见的向量操作.
稀疏向量是指那些大部分元素为零的向量。为了充分利用矢量的稀疏性,专门实现了Sparse BLAS例程和函数。这使您可以在计算机时间和内存上获得巨大的节省。若nz为非零向量元个数,则稀疏BLAS操作所花费的计算机时间为O(nz).
压缩稀疏向量. 设a为存储在数组中的向量,假设a的非零元素仅为:
a[k1], a[k2], a[k3] . . . a[knz],
其中nz是a中非零元素的总数.
在Sparse BLAS, 这个向量可以用两个数组(x(值)和indx)以压缩形式表示
(指数)。每个数组都有nz元素:
x[0]=a[k1], x[1]=a[k2], . . . x[nz-1]= a[knz],
indx[0]=k1, indx[1]=k2, . . . indx[nz-1]= knz.
因此,稀疏向量完全由三元组(nz, x, indx)确定。如果向Sparse BLAS传递一个负的或零的nz值,子例程不会修改任何数组或变量.
全储存向量. Sparse BLAS 例程还可以使用完全存储在单个数组(全存储向量)中的向量参数。如果y是一个全存储向量,那么它的元素必须连续存储:y[0]中的第一个元素,y[1]中的第二个元素,以此类推。这对应于BLAS级别1中的incy = 1增量。没有增加价值为全储存向量作为参数传递给稀疏巴拉斯的例程或功能.
BLAS类似,Sparse BLAS子程序的名称有前缀,确定涉及的数据类型:s和d为单精度和双精度实数;c、z分别为单、双精度复数.
如果一个Sparse BLAS例程是一个“密集”例程的扩展,子程序名是通过附加后缀i(表示索引)到相应的“密集”子程序的名字形成的。例如Sparse BLAS常规saxpyi对应BLAS常规saxpy,和Sparse BLAS功能cdotci对应BLAS cdotc函数.
Sparse BLAS 函数库与数据类型
Routine/ Function
数据类型
描述
cblas_?axpyi
s, d, c, z
标量向量积加向量
cblas_?doti
s, d
点积
cblas_?dotci
c, z
共轭的复点积
cblas_?dotui
c, z
复点积无共轭
cblas_?gthr
s, d, c, z
收集全存储稀疏向量到压缩形式nz, x, indx
cblas_?gthrz
s, d, c, z
将全存储稀疏向量收集成压缩形式,并将零分配给在全存储向量中收集到的元素
cblas_?roti
s, d
Givens 旋转
cblas_?sctr
s, d, c, z
将矢量从压缩形式分散到全存储形式