6-14 SGIMPI的优化与调整

张晓霞

  随着所里串行程序向并行化的转变,为帮助用户更好地理解、优化MPI并行编程,特研究SGIMPI的优化和调整。

  总的说来,SGIMPI进行了优化。(1) 应用程序的优化:主要是对MPI库中某些点对点通信、聚合通信、NUMA分配及单边操作的优化,由MPI库自动实现,不需要用户的干预。要使该优化生效,必须使用建议的MPI函数。(2) 运行时间的优化:主要是通过使用环境变量来调整MPI库的性能,如使用MPI的统计数据来调整一个MPI程序的运行时间环境如重试次数;使用传统的单拷贝优化或使用XPMEM的单拷贝优化或使用XPMEM驱动和BTE的单拷贝来显著优化对带宽敏感的应用程序(说明:对于一个简单的带宽测试(只包含两个进程和非常长的消息),传统的单拷贝优化有大约60%的改善(单位MB/s);相对于传统的单拷贝优化,在一台机器上使用XPMEM消除了传统方式的某些约束,性能也只有5%的损失;使用传统单拷贝优化中同样的带宽测试程序,使用BTE比传统的单拷贝可额外获得20%以上的改善(MB/s)。通过环境变量控制应用程序的NUMA分配。

  由此,提出几点优化技巧。(1) 避免使用特定的MPI结构:SGI只优化了一些点对点、聚合通信函数,那些没有经过优化的函数如MPI-BsendMPI-SsendMPI-Issend应避免在程序的关键部位出现;MPI-PackMPI_Unpack对于将PVM代码输出到MPI很有用,但他们本质上加倍了发送和接收方要拷贝的数据量。最好重新构造你的数据或使用MPI自定义数据类型;使用(MPI-ANY-SOURCE, MPI-ANY-TAG)要搜索多个消息队列,在进程数少时,影响不大;进程数增加时,成本快速增加。(2) 减少运行时间的变化:优化消息传递程序的一个常见问题是保证执行时间的真实性,下面一些技巧可以减小运行时间的变化:不要过载系统,过载会使系统为获取资源而进行不必要的等待,无法获得最佳的性能;使用cpuset或环境变量MPI_DSM_CPULIST在应用程序间分配CPU和内存;使用批作业处理系统如LSFPBS等来避免过载和拙劣的NUMA分配。(3) 使用MPI统计数据。(4)使用SGI的其它工具或第三方工具来获取其它性能数据,SGI提供的两个常见描述工具为Speedshopperfex

  由上可知,SGIMPI的实现,已进行了很大的优化和调整。随着MPI并行程序的开发和应用,了解这些优化和调整,必定会给用户带来帮助。

go-back.gif (221 bytes)