大规模稀疏矩阵PARD解方法介绍

高性能计算

13

大规模稀疏矩阵PARDISO求解方法介绍

于  超

  英特尔亚太研发中心    上海    200241    chao.yu@intel.com

摘要:

大规模稀疏矩阵的求解是高性能计算中的一个常见问题。本文介绍了用直接法(Direct Sparse Solver)求解矩阵的一些问题以及使用IntelMKL PARDISO接口求解稀疏矩阵的方法。

1. 引言

大规模稀疏方程的求解是工程计算中常见的问题, 一些典型应用包括有限元求解, 积分方程,求矩阵特征值,最优化问题等。这些问题要求稀疏方程的求解方法具有如下一些特性:(1)求解方法性能较高。稀疏矩阵维数相对较大,对求解性能要求高;(2)高效的矩阵存储方法存储稀疏矩阵与中间计算结果;(3)求解过程具有稳定性,特别对一些病态的矩阵能够得到正确结果。

PARDISO[3]是在共享内存机器上实现的稀疏矩阵的求解方法,对于一些大规模的计算问题, PARDISO的算法表现了非常好的计算效率与并行性。一些数值测试表明,随着计算节点数目增加, PARDISO具有接近线性的加速比例[3]。下面我们结合Intel MKL函数库PARDISO 的接口,介绍直接法来求解矩阵的PARDISO方法。

但是对于稀疏矩阵来说,在求解的过程中会遇到两个问题:非零元素填入(Fill-in)与矩阵行列的重排(Reordering)。我们用一个具体的例子来说明这个问题: 

假设有如下的稀疏矩阵方程:Ax = b。A 为对称正定稀疏矩阵:

A(*) 说明A中相应的元素0. 矩阵A是一个绝大多数元素都为零的稀疏矩阵. 其相应的LU分解(对称正定矩阵,称为Cholesky分解)为 A = LL T :

2. Direct Sparse Solver 的求解方法

用直接方法来求解矩阵,一个最基本的方法是将矩阵分解为上下三角矩阵。也就是说,对于线性方程: 

从分解的结果中,我们可以看出,尽管矩阵 A 为稀疏矩阵,但是其分解后上下三角矩阵L却有较多的非零元素.。这样,如果直接计算L来求解方程,我们实际会与稠密矩阵相似的计算复杂度与数据存储量。 

如果矩阵A中的某一零元素,对其分解后,矩阵 L相应位置产生非零元素。我们称之为非零元素填入(Fill-in)。从计算的角度,一种有效的方法是我们去遍历A非零元素,同时尽量减少分解后矩阵L中非零

Ax = b 

我们需要找到一个下三角的矩阵L与上三角的矩阵U(通常称为LU分解), 使得

A = LU    ->     LUx=b  

这样,我们只需两步求解上下三角矩阵来求解原有方程: 

1. 求解  Ly = b.2. 求解 Ux = y.

求解 Ly = b 或 Ux = y 可以用简单的正向与反向的方法求解上下三角矩阵。

少量非零元素。

在实际计算中,一种常用的方式就是对A的行与列进行交换。我们可以用一个交换矩阵 P 来表示矩阵的行列的交换。例如,在上面的例子中,我们如果交换矩阵A的第一行与第五行以及第一列与第五列,得到矩阵 B = 

解方程,这样方程求解包括如下求解步骤:

1. 求交换矩阵P: B = PAPT2. 分解矩阵    B = LU3. 求解 Ly = Pb4. 求解 Uz = y5. 计算 X = PTz

3. PARDISO 求解方法

PARDISO求解过程

PARDISO为Basel大学提供的一个稀疏矩阵接口。 Intel Math Kernel Library提供优化版本。根据如

B仅仅是A交换行列后得到的矩阵,因此B与A有相同的非零元素,但是,我们对矩阵B进行分解得到 B = LL T : 

上讨论的求解稀疏矩阵的方法,PARDISO对应求解过程包括如下步骤:

1. 矩阵重排与符号分解(Reordering and Symbolic Factorization):PARDISO Solver根据不同的矩阵类型,计算不同类型的行列交换矩阵P与对角矩阵D,对A矩阵进行交换重排。新得到的矩阵括尽量少的非零元素。

2. 矩阵LU 分解: 对

可以看出。B分解后的L矩阵的非零元素比A分解后的矩阵要少很多,也就说,B分解的非零元素填入要比A少很多。进而矩阵B的存储与计算的复杂度要比A分解要明显减少。所以一个高效稀疏矩阵的求解首先须找出一个或多个交换矩阵

,P能够减少非零元素填

入。

如上的方法是基于一个对称的正定矩阵。对于一般化稀疏矩阵,我们有类似的工作。首先用交换矩阵P对原有A进行交换,然后进行LU分解,后再求

 进行 LU 分解。

3. 方程求解与迭代:根据LU分解的结果,求解方程,如果对结果的精度有进一步要求,使用迭代法进一步提高解精度。

4. 迭代结束,释放计算过程的内存。

除PARDISO外,Intel MKL 还提供一个较为容易使用的Direct Sparse Solver(DSS)的接口。

矩阵类型

PARDISO函数的接口对多种的矩阵类型提供支持,包括了实、复数、对称或不对称的矩阵。具体可以如图1所示:

分解后会包

图1  PARDISO支持的矩阵类型

高性能计算

15

矩阵存储

目前,稀疏矩阵存在多种存储格式。PARDISO接口中使用以行为主的存储方法。该方法以行为单位存储每个非零数据。对于一个稀疏矩阵A,PARDISO对矩阵的存储包括了三个数组:

• • • 

values – 矩阵A的实数或复数非零数据. A的非columns - values 中每个元素所在矩阵的列. rowindex– 给出每一行的元素在value 中的位置. 

零数据通过下面columns与rowindex映射到values 数组中. 

性能数据

一些数值测试表明,PARDISO是目前最快的线性稀疏矩阵的求解方法之一[2]。下图2给出PARDISO与其他稀疏矩阵求解法的性能比较。图中数据是对一些较大测试矩阵,其他求解法时间与PARDISO的时间比(其他求解器的求解时间/ PARSDISO求解的时间)。有关这方面的更多数据,

可参见文[2]的测试。 

图2  PARDISO与其他求解器的性能对比

4. 小结

本文讨论了一个广为使用的稀疏矩阵的求解接口PARDISO。Intel  MKL 函数提供了高效的PARDISO求解方法实现,此外,Intel MKL 函数库中还包括其他高性能的优化函数,如向量与矩阵运算的BLAS、

LAPACK函数。多维傅立叶变换函数,向量数学函数(VML)以及随机数生产函数等等。进一步的内容可从如下网站获得:http://www.intel.com/software/products/MKL

参考文献

[1] Intel Math Kernel Library: http://www.intel.com/software/products/MKL

[2] N I M Gould, Y Hu. J A Scott. Complete results from a numerical evaluation of sparse direct solvers for the solution of large, sparse, symmetric linear systems of equations. http://www.numerical.rl.ac.uk/reports/reports.shtml[3] Software PARDISO:  http://www.computational.unibas.ch/cs/scicomp/software/pardiso/

高性能计算

13

大规模稀疏矩阵PARDISO求解方法介绍

于  超

  英特尔亚太研发中心    上海    200241    chao.yu@intel.com

摘要:

大规模稀疏矩阵的求解是高性能计算中的一个常见问题。本文介绍了用直接法(Direct Sparse Solver)求解矩阵的一些问题以及使用IntelMKL PARDISO接口求解稀疏矩阵的方法。

1. 引言

大规模稀疏方程的求解是工程计算中常见的问题, 一些典型应用包括有限元求解, 积分方程,求矩阵特征值,最优化问题等。这些问题要求稀疏方程的求解方法具有如下一些特性:(1)求解方法性能较高。稀疏矩阵维数相对较大,对求解性能要求高;(2)高效的矩阵存储方法存储稀疏矩阵与中间计算结果;(3)求解过程具有稳定性,特别对一些病态的矩阵能够得到正确结果。

PARDISO[3]是在共享内存机器上实现的稀疏矩阵的求解方法,对于一些大规模的计算问题, PARDISO的算法表现了非常好的计算效率与并行性。一些数值测试表明,随着计算节点数目增加, PARDISO具有接近线性的加速比例[3]。下面我们结合Intel MKL函数库PARDISO 的接口,介绍直接法来求解矩阵的PARDISO方法。

但是对于稀疏矩阵来说,在求解的过程中会遇到两个问题:非零元素填入(Fill-in)与矩阵行列的重排(Reordering)。我们用一个具体的例子来说明这个问题: 

假设有如下的稀疏矩阵方程:Ax = b。A 为对称正定稀疏矩阵:

A(*) 说明A中相应的元素0. 矩阵A是一个绝大多数元素都为零的稀疏矩阵. 其相应的LU分解(对称正定矩阵,称为Cholesky分解)为 A = LL T :

2. Direct Sparse Solver 的求解方法

用直接方法来求解矩阵,一个最基本的方法是将矩阵分解为上下三角矩阵。也就是说,对于线性方程: 

从分解的结果中,我们可以看出,尽管矩阵 A 为稀疏矩阵,但是其分解后上下三角矩阵L却有较多的非零元素.。这样,如果直接计算L来求解方程,我们实际会与稠密矩阵相似的计算复杂度与数据存储量。 

如果矩阵A中的某一零元素,对其分解后,矩阵 L相应位置产生非零元素。我们称之为非零元素填入(Fill-in)。从计算的角度,一种有效的方法是我们去遍历A非零元素,同时尽量减少分解后矩阵L中非零

Ax = b 

我们需要找到一个下三角的矩阵L与上三角的矩阵U(通常称为LU分解), 使得

A = LU    ->     LUx=b  

这样,我们只需两步求解上下三角矩阵来求解原有方程: 

1. 求解  Ly = b.2. 求解 Ux = y.

求解 Ly = b 或 Ux = y 可以用简单的正向与反向的方法求解上下三角矩阵。

少量非零元素。

在实际计算中,一种常用的方式就是对A的行与列进行交换。我们可以用一个交换矩阵 P 来表示矩阵的行列的交换。例如,在上面的例子中,我们如果交换矩阵A的第一行与第五行以及第一列与第五列,得到矩阵 B = 

解方程,这样方程求解包括如下求解步骤:

1. 求交换矩阵P: B = PAPT2. 分解矩阵    B = LU3. 求解 Ly = Pb4. 求解 Uz = y5. 计算 X = PTz

3. PARDISO 求解方法

PARDISO求解过程

PARDISO为Basel大学提供的一个稀疏矩阵接口。 Intel Math Kernel Library提供优化版本。根据如

B仅仅是A交换行列后得到的矩阵,因此B与A有相同的非零元素,但是,我们对矩阵B进行分解得到 B = LL T : 

上讨论的求解稀疏矩阵的方法,PARDISO对应求解过程包括如下步骤:

1. 矩阵重排与符号分解(Reordering and Symbolic Factorization):PARDISO Solver根据不同的矩阵类型,计算不同类型的行列交换矩阵P与对角矩阵D,对A矩阵进行交换重排。新得到的矩阵括尽量少的非零元素。

2. 矩阵LU 分解: 对

可以看出。B分解后的L矩阵的非零元素比A分解后的矩阵要少很多,也就说,B分解的非零元素填入要比A少很多。进而矩阵B的存储与计算的复杂度要比A分解要明显减少。所以一个高效稀疏矩阵的求解首先须找出一个或多个交换矩阵

,P能够减少非零元素填

入。

如上的方法是基于一个对称的正定矩阵。对于一般化稀疏矩阵,我们有类似的工作。首先用交换矩阵P对原有A进行交换,然后进行LU分解,后再求

 进行 LU 分解。

3. 方程求解与迭代:根据LU分解的结果,求解方程,如果对结果的精度有进一步要求,使用迭代法进一步提高解精度。

4. 迭代结束,释放计算过程的内存。

除PARDISO外,Intel MKL 还提供一个较为容易使用的Direct Sparse Solver(DSS)的接口。

矩阵类型

PARDISO函数的接口对多种的矩阵类型提供支持,包括了实、复数、对称或不对称的矩阵。具体可以如图1所示:

分解后会包

图1  PARDISO支持的矩阵类型

高性能计算

15

矩阵存储

目前,稀疏矩阵存在多种存储格式。PARDISO接口中使用以行为主的存储方法。该方法以行为单位存储每个非零数据。对于一个稀疏矩阵A,PARDISO对矩阵的存储包括了三个数组:

• • • 

values – 矩阵A的实数或复数非零数据. A的非columns - values 中每个元素所在矩阵的列. rowindex– 给出每一行的元素在value 中的位置. 

零数据通过下面columns与rowindex映射到values 数组中. 

性能数据

一些数值测试表明,PARDISO是目前最快的线性稀疏矩阵的求解方法之一[2]。下图2给出PARDISO与其他稀疏矩阵求解法的性能比较。图中数据是对一些较大测试矩阵,其他求解法时间与PARDISO的时间比(其他求解器的求解时间/ PARSDISO求解的时间)。有关这方面的更多数据,

可参见文[2]的测试。 

图2  PARDISO与其他求解器的性能对比

4. 小结

本文讨论了一个广为使用的稀疏矩阵的求解接口PARDISO。Intel  MKL 函数提供了高效的PARDISO求解方法实现,此外,Intel MKL 函数库中还包括其他高性能的优化函数,如向量与矩阵运算的BLAS、

LAPACK函数。多维傅立叶变换函数,向量数学函数(VML)以及随机数生产函数等等。进一步的内容可从如下网站获得:http://www.intel.com/software/products/MKL

参考文献

[1] Intel Math Kernel Library: http://www.intel.com/software/products/MKL

[2] N I M Gould, Y Hu. J A Scott. Complete results from a numerical evaluation of sparse direct solvers for the solution of large, sparse, symmetric linear systems of equations. http://www.numerical.rl.ac.uk/reports/reports.shtml[3] Software PARDISO:  http://www.computational.unibas.ch/cs/scicomp/software/pardiso/


相关文章

  • 压缩感知技术综述
  • 压缩感知技术综述 摘要:信号采样是模拟的物理世界通向数字的信息世界之必备手段.多年来,指导信号采样的理论基础一直是著名的Nyquist 采样定理,但其产生的大量数据造成了存储空间的浪费.压缩感知(Compressed Sensing )提出 ...查看


  • 关于压缩感知的20篇论文点评
  • 压缩传感不是万能的, 虽然它是信号和图像处理领域最热门的研究对象 但是它不可能解决所有问题 就像中科院李老师的话: "压缩感知根植于数学理论,它给目前国内浮躁的学术环境提了一个警钟!因为只有很好地钻研它的基本理论和方法,才能将其有 ...查看


  • 贪婪算法与压缩感知理论
  • 第37卷第12期2011年12月 自动化学报 ACTA AUTOMATICA SINICA Vol. 37, No. 12December, 2011 贪婪算法与压缩感知理论 方红1 杨海蓉2 摘要贪婪算法以其重建速度快.重建方法实现简便的 ...查看


  • 潮流计算的相关问题2011
  • §4.5牛顿-拉夫逊法计算潮流有关问题 1. ΔX 2. 3. 多值解 对于非线性方程组,解的可能性有: •有实际意义的解 •有解,但在实际中无意义 (PV 节点或平衡节点的无功功率超过允许值,平衡节点的有功功率超过允许值:节点的电压过高或 ...查看


  • 蛋白质相互作用网络的几种聚类方法综述
  • 国 防 科 技 大 学 学 报 第31卷第4期 JOURNALOFNATIONALUNIVERSITYOFDEFENSETECHNOLOGY 文章编号:1001-2486(2009)04-0081-06Vol.31No.42009 蛋白质相 ...查看


  • 压缩感知磁共振成像技术综述
  • -158-http://www.cjomp.com 压缩感知磁共振成像技术综述 王水花,张煜东 南京师范大学计算机科学与技术学院,江苏南京210023 [摘 要]目的:综述近年来压缩感知磁共振成像技术的研究进展.方法:磁共振成像是目前临床医 ...查看


  • 灵敏度方法在电力系统分析与控制中的应用综述
  • 第35卷第15期2007年8月1日 继电器Vbl.35No.15 RELAY Aug.1,2007 灵敏度方法在电力系统分析与控制中的应用综述 苗峰显1,郭志忠1'2 (1.哈尔滨工业大学电气学院,黑龙江哈尔滨150001: 2.许继电力科 ...查看


  • 一种改进的稀疏子空间聚类算法_欧阳佩佩
  • 2014年8月 第27卷第3期 青岛大学学报(自然科学版) )OURNALOFINGDAOUNIVERSITY(NaturalScienceEditionJ Q ol.27No.3V Au.2014 g ()文章编号:10000603720 ...查看


  • 数据结构----稀疏矩阵运算器课程设计
  • 内蒙古科技大学 数据结构课程设计说明书 题 目:稀疏矩阵运算器设计 学生姓名: 学 号: 专 业:计算机科学与技术 班 级:计09-1班 指导教师:刘 月 峰 2011 年 6 月 24 日 稀疏矩阵运算器设计 摘 要 摘要:设计一稀疏矩阵 ...查看


热门内容