- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一种基于MPI的分布式共轭梯度算法 Presented by ZhuangLi Outline 共轭梯度法 How To Improve Register Cache Blocking Optimizations Parallel Optimizations SIMDization MPI Optimizations Data Decomposition 算法总结 矩阵-向量乘实验 实验总结 下一步工作 共轭梯度法 数学上,共轭梯度法是求解特定线性系统的数值解的方法,其中的系数矩阵为对称和正定的实数阵。 共轭梯度法是一个迭代方法,所以它适用于稀疏矩阵系统,因为这些系统对于类似乔莱斯基(QR)分解这样的直接方法计算量太大了。 这类系统在数值求解偏微分方程时相当常见 具体应用 共轭梯度法主要用于求解下列线性系统 : 其中矩阵 是对称正定实系数矩阵。 非对称阵可以通过左乘转置矩阵构造出对称阵 ,该项操作会加大条件数。 基本流程 经过一些简化,可以得到下列求解 的算法 一些观察的结果 迭代过程中存在大量的矩阵与向量乘的操作 对于传统的矩阵-向量乘法,其计算复杂度为O(nm),其中n,m为A矩阵的维度。 结论:矩阵-向量乘是本算法的计算热点,也是进行性能优化的切入点。 How To Improve 矩阵-向量乘的性能优化,可以由四方面入手: 1. 数据结构的优化(Register Cache Blocking Optimizations) 2.单结点的并行优化(Parallel Optimizations SIMDization) 3.分布式的并行优化(MPI Optimizations) 4.分块大小的预调优处理(Data Decomposition) 传统的数据结构 传统的对于矩阵数据的主要记录方式分作两类: 一类是列出矩阵的所有元素,以数据表的形式存储。 另一类则是仅仅存储矩阵中的非零元素,将之标记为r,c,v的三元组,其中表示r该元素的行号,c表示该元素的列号,v表示该元素的值。 Register Cache Blocking Optimizations Register Cache Blocking Optimizations利用BSCR进行实现。 BSCR,全称Blocked Compressed Sparse Row,是一种高度压缩的分块存储结构。 该结构对第二类记录方式进行了有效的改进,大大降低了存储的冗余度,使用了四个不同意义的向量row,block,col,val,有效保存了原矩阵的信息,并保持了对矩阵中划分块的控制,从而便于计算量在各个结点上的相关部署。 结构 设分块阵大小为X*Y,原矩阵大小为M*N。 row向量累计原矩阵自顶向下每X行内的分块数,从而可以通过[ row(i), row(i + 1) )就能够表示出第[i*X, ( i + 1 )* X)行内分块号的区间,从而通过row向量支配block向量。 block向量根据类似的原理记录每个块内的非0元素区间,每X个block元素记录一个块的结构,其中每2个相邻元素构成一个区间来表示块中某一行的元素编码区间。 col与val向量一一对应了非0元素的列号与值,在每个block区间内依次记录。 总结 Register Cache Blocking Optimizations带来的性能提升: 1.节省了大量的空间存储 2.块内元素分布连续,在矩阵-向量乘中可以通过设定分块的列维度的大小,使得进行乘法的向量中元素与分块中元素保持在cache中,提高cache命中率,减少CPU二次访存所带来的开销。 3.稀疏存储法使得复杂度由O(nm)-O(E) 其中n,m分别为原矩阵的维度,E为稀疏阵中非0元素的个数。 Parallel Optimizations SIMDization Parallel Optimizations采用POSIX Threads 进行实现。 POSIX Threads 是Threads的POSIX标准,定义了创建和操纵线程的一套API。 实现 POSIX 线程标准的库常被称作 Pthreads,一般用于 Unix-like POSIX 系统,如 Linux、 Solaris,但是 Microsoft Windows上的实现也存在,例如, pthreads-w32。 SIMDization即单指令多数据流优化,可以利用Intel SSE指令或Pipe技术实现。 SSE(Streaming SIMD Extensions)是英特尔在AMD的3D Now!发布一年之后,在其计算机芯片Pentium III中引入的指令集,
文档评论(0)