下一节:CRS矩阵-向量乘积 上一级:矩阵向量与矩阵矩阵乘法 上一节:BLAS(基础线性代数子程序)

稀疏BLAS

秉承密集BLAS的精神,BLAS技术论坛正在努力建立一个稀疏BLAS的标准。 稀疏BLAS接口针对非结构化稀疏矩阵的计算例程。 稀疏BLAS同样包含三个级别的操作,与密集情况类似。然而,仅规定了密集BLAS的一小部分:

第一级:稀疏点积、向量更新及收集/分散;
第二级:稀疏矩阵-向量乘法和三角形求解;
第三级:稀疏矩阵-密集矩阵乘法和多右侧三角形求解。

这些是大多数迭代算法中用于求解稀疏线性方程组和特征系统的基础操作。 第二级和第三级稀疏BLAS接口支持九种稀疏矩阵存储格式。这九种格式分为两类:如压缩行等点项格式和如块压缩行等块项格式。在块项格式中,稀疏结构表示为一系列小密集块。注意,这九种格式包括了在§10.1中调查的一些格式,除了JDS和SKS。

稀疏BLAS的接口设计与密集BLAS有根本的不同。 由于没有单一的“最佳”存储格式适用于任何稀疏矩阵操作,第二级和第三级稀疏BLAS的稀疏矩阵参数不使用特定存储格式。相反,为这些例程定义了一个通用接口,其中稀疏矩阵参数是一个表示矩阵的句柄(整数)。在调用稀疏BLAS例程之前,需要调用创建例程从九种格式之一创建稀疏矩阵句柄。调用稀疏BLAS例程后,需要调用清理例程释放与矩阵句柄相关的资源。这种基于句柄的方法允许独立于稀疏矩阵存储使用稀疏BLAS。内部表示依赖于实现,可以选择以获得最佳性能。

由于矩阵-向量乘积通常占迭代方法中大部分时间, 多个研究工作尝试优化其性能[438,439,240,239]。 在矩阵-向量乘法中,每个矩阵项仅参与一次操作,但每个向量项可能参与多次操作。优化的主要目标是减少源向量在不同内存级别之间的移动量。优化技术包括矩阵重排序、缓存阻塞和寄存器阻塞。最近开发的工具箱SPARSITY采用了所有这些技术[240,239]。根据矩阵结构,作者在单处理器上观察到高达三倍的加速。SPARSITY还包含根据矩阵和机器特性自动选择最佳块大小的机制。

在前面讨论的许多迭代方法中,都需要矩阵及其转置与向量的乘积;即,给定输入向量x,我们希望计算乘积

y=Ax\qquad\text{和}\qquad y=A^Tx.
在接下来的两小节中,我们将介绍§10.1中存储格式的算法,CRS。



小节

下一节:CRS矩阵-向量乘积 上一级:矩阵向量与矩阵矩阵乘法 上一节:BLAS(基础线性代数子程序)
Susan Blackford 2000-11-20