Optimization 改进MPI程序

Optimization 改进MPI程序,optimization,struct,mpi,Optimization,Struct,Mpi,我写了一个MPI程序,似乎运行正常,但我想知道性能如何。主线程需要执行10次或更多次MPI_发送,工作线程接收并发送数据10次或更多次。我想知道它是否会对性能造成影响,我是否可以在单个结构中传输所有内容,或者我可以从其他技术中受益 另一个普遍的问题是,一旦mpi程序或多或少起作用,最佳的优化技术是什么。通常情况下,发送一条大消息比发送10条小消息快。发送消息的时间成本通过考虑延迟(发送空消息所需的时间,由于函数调用的开销、网络延迟等而非零)和带宽(如果网络通信已经启动,则发送额外字节所需的时间)

我写了一个MPI程序,似乎运行正常,但我想知道性能如何。主线程需要执行10次或更多次MPI_发送,工作线程接收并发送数据10次或更多次。我想知道它是否会对性能造成影响,我是否可以在单个结构中传输所有内容,或者我可以从其他技术中受益


另一个普遍的问题是,一旦mpi程序或多或少起作用,最佳的优化技术是什么。

通常情况下,发送一条大消息比发送10条小消息快。发送消息的时间成本通过考虑延迟(发送空消息所需的时间,由于函数调用的开销、网络延迟等而非零)和带宽(如果网络通信已经启动,则发送额外字节所需的时间)进行了很好的建模。通过将消息捆绑到一条消息中,您只会产生一次延迟成本,这通常是一个胜利(尽管总是有可能出现不这样做的情况)。了解任何特定代码的最佳方法就是尝试。请注意,MPI数据类型允许您以非常强大的方式描述内存中数据的布局,以便您几乎可以直接将数据从内存复制到网络,而无需将其中间复制到某个缓冲区(所谓的数据“编组”)


至于关于MPI的更一般的优化问题——在不知道更多的情况下,我们所能做的就是给你一些建议,这些建议过于笼统,以至于没有多大用处。尽量减少需要进行的通信量;尽可能使用内置MPI工具(集体工具等),而不是实现自己的工具。

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


有关演示,请参阅此屏幕广播:

优化高度依赖于代码,关于优化的书籍非常多。试着用探查器检查较慢的部分,然后在这里发布它们的代码。谢谢,你能给我指一个好的mpi探查器吗?最好是开源的