我写了一个MPI程序,看起来运行得很好,但我想知道性能。主线程需要执行10次或更多次MPI_Send,工作线程接收数据10次或更多次并发送数据。我想知道它是否会带来性能损失,我是否可以在单个结构中传输所有内容,或者我可以从哪种其他技术中受益。
其他一般性问题,一旦mpi程序或多或少地起作用,什么是最好的优化技术。
发布于 2011-02-17 01:01:06
通常情况下,发送1条大消息比发送10条小消息更快。发送消息的时间成本通过考虑延迟(发送空消息需要多长时间,由于函数调用的开销、网络等待时间等而为非零)和带宽(在给定网络通信已经开始的情况下发送额外字节需要多长时间)来很好地建模。通过将消息捆绑到一个消息中,您只会产生一次延迟成本,这通常是一种胜利(尽管总有可能出现不是这样的情况)。了解任何特定代码的最好方法是简单地尝试。请注意,MPI数据类型允许您以非常强大的方式描述数据在内存中的布局,因此您几乎可以直接将其从内存传输到网络,而不必将其中间复制到某个缓冲区中(所谓的“编组”数据)。
至于关于MPI的更一般的优化问题--在不了解更多的情况下,我们所能做的就是给你一些建议,这些建议太普遍了,以至于不是很有用。尽量减少需要完成的通信量;只要有可能,使用内置的MPI工具(集合等),而不是实现自己的工具。
发布于 2014-06-05 20:06:39
要完全了解MPI应用程序的性能,一种方法是在SimGrid平台模拟器中运行它。提供的工具和模型足以获得中端应用程序(例如,几万行C或Fortran)的实际时间预测,并且可以与经过调整的可视化工具相关联,这些工具可以帮助您充分了解应用程序中正在发生的事情,以及您必须考虑的实际性能权衡。
有关演示,请参阅此截屏视频:https://www.youtube.com/watch?v=NOxFOR_t3xI
https://stackoverflow.com/questions/5018360
复制相似问题