2011-02-16 60 views
0

我写了一个似乎运行正常的MPI程序,但我想知道性能。主线程需要执行10次或更多次MPI_Send,并且工作者接收数据10次或更多次并发送它。我想知道它是否会带来性能损失,以及我是否可以将所有内容都转换为单一结构,或者我可以从中受益。改进MPI程序

其他一般问题,一旦mpi程序或多或少地工作,什么是最佳优化技术。

+0

优化高度依赖于代码,在优化书籍是巨大的。尝试使用分析器检查较慢的部分,然后在这里发布他们的代码。 – BlackBear 2011-02-16 16:03:35

回答

2

通常情况下,发送1个大消息比发送10个小消息要快。发送消息的时间成本通过考虑延迟(发送空的消息需要多长时间(因为函数调用的开销,网络延迟等而非零)和带宽(多少考虑到网络通信已经开始,发送额外的字节所需的时间越长)。通过将消息捆绑到一条消息中,您只需花费一次延迟成本,这通常是一个胜利(尽管总是可能提出不是的情况)。了解任何特定代码的最好方法是简单地尝试。请注意,MPI数据类型允许您以非常强大的方式来描述数据在内存中的布局,以便您可以将其直接从内存中提取到网络,而无需在某个缓冲区中执行中间复制(所谓的“编组”数据)。

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

0

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

对于演示,请参阅本截屏:https://www.youtube.com/watch?v=NOxFOR_t3xI