- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Gauss―Seidel迭代法求解线性方程组的并行化研究.doc
Gauss―Seidel迭代法求解线性方程组的并行化研究
【摘 要】Gauss-Seidel迭代法在工程计算中具有广泛应用。高维矩阵对线性方程组的求解效率提出了新的要求。本文提出了两种模式下的Gauss-Seidel并行计算方法,并对比了在不同矩阵维数下的加速效率,得到了具有较高加速比的并行迭代方法。
【关键词】Gauss-Seidel;迭代法;并行;MPI;矩阵运算
1 问题背景与提出
在实际工程应用中经常需要用到求解维数较高的线性代数方程组,对于线性代数方程组的求解方法可以分成两类:直接法和迭代法,其中直接法得到的是方程组的真解,其求解过程为通过有限步四则运算,常用的实现方式是Gauss消去方法和矩阵的三角分解方法,这种计算方式在求解过程中会产生大量的非零元素,存储量和计算量均比较大,因此常用于求解低阶、稠密线性方程组。对于高维线性方程组,可以采用并行运算的方式进一步提高计算效率,Gauss-Seidel迭代法具有收敛速度快、计算稳定性好等优点,是求解高维线性方程组的常用方法,因此本文将对Gauss-Seidel迭代法的并行化进行研究,期望获取较高的运行效率和加速比。
2 Gauss-Seidel迭代法的并行算法描述
任务分配模式一:连续等分矩阵法
在《并行算法的设计与分析》一书中给出了一种矩阵分配的算法,设矩阵的阶为N,采用m个线程进行计算,则将矩阵等分成m块,每一块分到的任务量为N/m,每一个线程计算完自己的分量之后立刻向其他的线程进行广播。
由于Gauss-Seidel迭代法中,对于右端项的计算和中间项的计算是不需要用到下一次迭代值的,因此在这一阶段各个线程工作量相同,同时完成,问题的关键在于首项的计算,顺序等分矩阵时,以四个线程为例,在计算左端项的时候,各个线程的工作次序如下图所示。其中不同的颜色代表不同线程的任务,每个线程依次计算分给自己的一个子块,每计算完一个分量后立刻沿上方箭头所指方向进行广播。
任务分配模式二:离散等分矩阵法
为了改进任务分配模式一中的缺陷,进一步提高计算的并行程度,同时保持任务的均衡性,笔者对模式一中的任务分配方式作出了一定程度的改进,设线程数为m,则将矩阵以每m行作为一个单位,顺序分配给m个线程,前一个线程完成自己的计算任务之后,立刻将计算结果广播给其余的m个线程,同时开始下一个矩阵块中自己应完成的任务,直到最后将自己所应完成的N/m个分量计算完毕。任务分配模式见左图,其中不同的颜色代表不同的线程的计算任务,每个块右端的箭头表示变量的广播方向。
这样划分任务,每个线程的工作量没有发生变化,但是第一个达到终点的线程和最后一个达到终点的线程的时间相差仅为m个分量的计算时间。假设矩阵的阶为10000,采用4个线程进行计算(m=4),那么第一个线程和最后一个线程到达终点的时间差为m=4个分量的计算时间。反观第一种任务分配模式,假设第一个线程计算完自己的N/m=10000/4=2500个分量,则需要再经过计算2500、5000、7500个分量的时间之后二、三、四号线程才能到达终点,并且随着矩阵阶的增大,这个时间差异还会继续增大。
根据上面的分析,在理论上模式二具有更优的时间性能。笔者也进行了实验,从实际操作上证明了模式二具有更优的时间性能。因此选择模式二作为并行化的基本算法,基本并行算法步骤可以描述如下:
(一)末项/中间项计算的并行化
(二)首项的并行计算
首项是下三角矩阵与本次迭代的结果相乘,因此不易实现并行化,但是借鉴并行计算中的流水线作业思想,可以采用步进和广播的方法进行并行化。假设核数为4,则首项的并行化可以设计如下:
2.2 基于MPI的多核并行算法的设计
采用任务分配模式二,采用MPI的并行算法可以描述如下:
int N:矩阵的阶数
int numProcs:用于计算的进程数量
int m:每个进程所分得的任务量,m=N/numProcs
int myID:标识本进程的进程号
int task:记录本次循环中本线程计算的未知量下标
double A[m][numProcs]:每个进程单独
保存属于自己的矩阵分块
double x_old[N]:double类型的N维数组,用于保存本次迭代分量的数值
double sum[N]:保存迭代分量计算过程中的累加结果;
double x_diff:相邻两次迭代运算中的误差,定义为:x_diff=(_1≤i≤N)|x_i^((k+1) )-x_i^((k) ) |
bool x_status[N]:标识每个迭代分量是否完成本次迭代
算法描述:
//进入并行域
文档评论(0)