改进MPI计划

时间:2011-02-16 15:30:04

标签: optimization struct mpi

我写了一个似乎运行良好的MPI程序,但我对性能感到疑惑。主线程需要执行10次或更多次MPI_Send,并且工作人员接收数据10次或更多次并发送它。我想知道它是否会给性能带来损失,我是否可以将所有内容转移到单一结构中,或者我可以从中受益于其他技术。

其他一般性问题,一旦mpi程序或多或少地起作用,什么是最好的优化技术。

2 个答案:

答案 0 :(得分:2)

通常情况下,发送1条大邮件比发送10条小邮件要快。通过考虑延迟(发送空消息需要多长时间,由于函数调用的开销,网络延迟等而非零)和带宽(多少),可以很好地模拟发送消息的时间成本。在网络通信已经开始的情况下发送额外字节所需的时间更长。通过将消息捆绑到一条消息中,您只会产生一次延迟成本,这通常是一种胜利(尽管总是可以提出不是这样的情况)。了解任何特定代码的最佳方法就是尝试。请注意,MPI数据类型允许您以非常强大的方式在内存中描述数据布局,以便您可以将其几乎直接从内存中传输到网络,而无需将中间副本放入某个缓冲区(所谓的“编组”)数据)。

关于MPI的更一般的优化问题 - 我们不知道更多,我们所能做的就是给你一些通用的建议,以便不是非常有用。尽量减少需要完成的通信量;尽可能使用内置的MPI工具(集体等)而不是实现自己的工具。

答案 1 :(得分:0)

完全理解MPI应用程序性能的一种方法是在SimGrid平台模拟器中运行它。提供的工具和模型足以获得中端应用程序的实时时序预测(例如,几十万行C或Fortran),它可以与适应的可视化工具相关联,可以帮助您完全了解正在发生的事情在您的应用程序中,以及您必须考虑的实际性能权衡。

有关演示,请参阅此截屏视频:https://www.youtube.com/watch?v=NOxFOR_t3xI