这不是关于MPI的特定技术编码方面的问题。我是MPI的新手,并不想让我自己以错误的方式使用库,因此在这里发布问题。
据我所知,MPI是一个在分布式内存模型上构建并行应用程序的环境。
我有一个与Infiniband互连的系统,其唯一目的是进行一些非常耗时的操作。我已经打破了算法并行执行,所以我真的只使用MPI通过Infiniband在多个节点之间传输数据(中间步骤的结果),我相信可以简单地使用OpenIB来做。
我是否以正确的方式使用MPI?还是我弯曲了系统的初衷?
答案 0 :(得分:5)
只需使用MPI_Send&算法中的MPI_Recv。随着算法的发展,您可以获得更多的经验等等,您可能会发现更多“高级”MPI功能,例如屏障和功能。集体沟通,如Gather,Reduce等。
答案 1 :(得分:4)
您需要使用的MPI构造越少越简单,更好 MPI与您的问题相匹配 - 您可以说大多数库和语言,作为实际问题和可疑的抽象问题。
是的,您可以编写原始的OpenIB调用来完成您的工作,但是当您需要迁移到以太网集群或大型共享内存计算机或下一个大型互连时,会发生什么? MPI是中间件,因此,它的一大卖点是你不必花时间编写网络级代码。
答案 2 :(得分:0)
在复杂性谱的另一端,不使用MPI的时间是当您的问题或解决方案技术提供足够的动力时MPI使用(最具体地说,它的过程模型)是一个障碍。像Charm++这样的系统(披露:我是Charm ++的开发人员)允许您根据更细粒度的单位进行问题分解,并且其运行时系统管理这些单元到处理器的分布以确保负载平衡,并保持跟踪他们在哪里适当地指导沟通。
另一个不常见的问题是动态数据访问模式,其中像全局数组或PGAS语言更容易编码。