《并行计算的编程模型》一1.10 MPI开发心得

简介: 本节书摘来华章计算机《并行计算的编程模型》一书中的第1章 ,第1.10节, [(美)帕万·巴拉吉(Pavan Balaji)编著;张云泉等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.10 MPI开发心得

与其他的编程方法一样,MPI编程需要了解MPI特性,只有掌握MPI编程方法的优点和缺点,才能编写高效的MPI程序。对MPI最重要的认识是MPI属于一种函数库。MPI操作需要至少调用一个或多个MPI函数,针对特别少量的数据传输,MPI编程方法的效率可能不是最高的。因此,若使用MPI编程,在每次数据通信中需传输尽可能多的数据,从而提高通信效率。
MPI支持用户构建自己的软件库。相对于在程序中调用MPI函数,利用MPI在程序中实现自定义接口的方法更好。很多应用程序采用自定义接口的方法,从而程序代码显得更加整洁。很多重要的计算库和框架均采用自定义接口的方法,如PETSc [26,229]和Trilinos [137]。在上述函数库中,很少直接调用MPI函数,即使出现MPI函数调用,一般只出现在用户代码中。
内存访问局部性对计算性能有较大影响。MPI程序基于进程运行,可帮助用户维护内存数据的局部性。该特性既是MPI的优势,有时也会成为劣势。优势在于要求用户实现数据局部性,从而提高程序运行效率。劣势在于用户必须实现内存数据局部性要求。在内存访问上实现数据局部性,尤其在缓存和主要内部存储器间,对开发高效率的并行程序非常重要。
并行程序运行性能和结果往往与期待的不同,因此采用相关工具对性能和结果进行测试是非常必要的。MPI调试接口可为程序调试和性能测试提供帮助,协助开发人员分析MPI程序[23,72,145,300]。用户也可利用MPI调试接口,分析程序性能,设计高效率的并行程序。
在使用MPI过程中,存在一些使用心得,如下所示:
(1)认真检查和使用内存缓冲区。(参考安全程序设计讨论。)
(2)避免不必要的同步操作。避免在数据通信过程中使用不必要的同步操作,例如在非阻塞式通信方式中采用等待多个非阻塞式通信操作完成的函数(例如,MPI_Waitall)。
(3)在数据通信量从少量增加到中等规模时(数据通信量大小取决于网络、CPU和MPI实现方式),建议使用连续的MPI通信,从而减少MPI通信过程中的开销。
(4)在MPI程序中,尽量采用通过MPI构造的数据类型,减少非连续数据的内存移动操作,提高MPI程序运行效率。
(5)在I/O访问中,尽量采用聚合I/O。但在采用聚合I/O过程中,需要注意文件系统限制(例如,一些文件系统不支持数据块边界对齐)。
(6)MPI_Barrier函数对程序性能有较大影响,不建议采用。在文献[252]中,提供一种自动检测不必要同步操作的方法。除非一些特殊情况,MPI_Barrier函数通常在MPI程序中很少使用,若经常使用MPI_Barrier函数则将极大影响程序性能,是一种不正确的MPI编程方法。

相关文章
|
1月前
|
缓存 并行计算 算法
MPI并行计算的基本介绍和使用
MPI并行计算的基本介绍和使用
107 1
|
分布式计算 资源调度 并行计算
并行计算框架MapReduce编程模型
思想:分而治之 map:对每一部分进行处理 reduce :汇总map结果 map是MapReduce最核心的。 mapreduce编程模型 一种分布式计算模型,解决海量数据计算问题 MapReduce把整个并行计算的过程抽象到两个函数,map和reduce函数。
1490 0
|
并行计算 C语言 C++
《并行计算的编程模型》一1.2 MPI基础
本节书摘来华章计算机《并行计算的编程模型》一书中的第1章 ,第1.2节, [(美)帕万·巴拉吉(Pavan Balaji)编著;张云泉等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
2096 0
|
并行计算 索引
《并行计算的编程模型》一2.3.1 开始和结束
本节书摘来华章计算机《并行计算的编程模型》一书中的第2章 ,第2.3.1节, [(美)帕万·巴拉吉(Pavan Balaji)编著;张云泉等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1069 0
|
并行计算 算法 API
《并行计算的编程模型》一导读
对于正在编程的程序员,编程模型可被看作一台虚拟机,并可通过编程语言和函数库实现。如果某个编程模型成为计算机科学研究中的热点,需要具有以下特性:高效性(易于描述各种抽象算法)、移植性(兼容各种硬件计算平台)、高性能(高效均衡地利用硬件平台的计算能力)、通用性(广泛地描述各种算法)。
3335 0
|
并行计算
《并行计算的编程模型》一1.3 点对点通信
本节书摘来华章计算机《并行计算的编程模型》一书中的第1章 ,第1.3节, [(美)帕万·巴拉吉(Pavan Balaji)编著;张云泉等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1308 0
|
并行计算
《并行计算的编程模型》一1.11 总结
本节书摘来华章计算机《并行计算的编程模型》一书中的第1章 ,第1.11节, [(美)帕万·巴拉吉(Pavan Balaji)编著;张云泉等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1028 0
|
并行计算
《并行计算的编程模型》一1.8 并行I/O
本节书摘来华章计算机《并行计算的编程模型》一书中的第1章 ,第1.8节, [(美)帕万·巴拉吉(Pavan Balaji)编著;张云泉等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1940 0
|
并行计算 API
《并行计算的编程模型》一2.5.1 GASNet工具
本节书摘来华章计算机《并行计算的编程模型》一书中的第2章 ,第2.5.1节, [(美)帕万·巴拉吉(Pavan Balaji)编著;张云泉等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
981 0
|
并行计算 安全
《并行计算的编程模型》一1.9 其他特性
本节书摘来华章计算机《并行计算的编程模型》一书中的第1章 ,第1.9节, [(美)帕万·巴拉吉(Pavan Balaji)编著;张云泉等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1433 0