Mpi 小型分布式计算技术

Mpi 小型分布式计算技术,mpi,distributed-computing,Mpi,Distributed Computing,我有一个执行蒙特卡罗模拟的程序。目前,我已经编写了针对OpenMP和OpenCL的程序版本,希望了解在局域网上的计算机之间分配工作负载的最佳方法 我的第一个想法是编写一个基于套接字的客户机/服务器应用程序,服务器将划分工作单元发送给客户机,客户机将完成这些工作单元,并将结果发送回。为了利用具有快速CPU和GPU的系统,我可以在一个系统上运行多个客户端程序实例(a-omp和a-ocl可执行文件) 然而,sockets编程很少令人愉快,而且很难正确进行(决定协议等)。因此,我决定看看MPI,它看起来

我有一个执行蒙特卡罗模拟的程序。目前,我已经编写了针对OpenMP和OpenCL的程序版本,希望了解在局域网上的计算机之间分配工作负载的最佳方法

我的第一个想法是编写一个基于套接字的客户机/服务器应用程序,服务器将划分工作单元发送给客户机,客户机将完成这些工作单元,并将结果发送回。为了利用具有快速CPU和GPU的系统,我可以在一个系统上运行多个客户端程序实例(a-omp和a-ocl可执行文件)

然而,sockets编程很少令人愉快,而且很难正确进行(决定协议等)。因此,我决定看看MPI,它看起来不错,尽管我不确定当您想要将CPU+GPU包括在混合中时它的工作情况如何,或者我的服务器指定的“工作单元”适合于多大程度。(确定问题空间的哪些区域进行采样的过程非常重要,因此需要有知觉的主过程来协调事情。)


因此,我很想知道我是否还有其他选择,或者其他人在类似情况下决定了什么。

您的描述有点模糊,但这听上去确实适用于MPI。添加GPU应该无关紧要,因为MPI本身并不关心除了MPI调用之外运行的代码(例如,我曾经编写过一个MPI应用程序,它使用Qt进行可视化和线程化)


我所能看到的最大的警告是,MPI程序由一个程序的多个实例组成:如果您的OpenMP和OpenCL解决方案是独立的应用程序,那么您不能同时生成两个应用程序并让它们一起运行。但是,您可以编写一个简单的包装器应用程序,例如,使用OpenMP解决方案生成一个线程,使用OpenCL解决方案生成另一个线程。使用MPI运行此包装器应用程序将获得所需的结果,但当然,通信可能会变得有点棘手(在线程之间共享通信器信息等)。

MPI实际上是标准的。使用MPI在通信器中启动不同的程序没有问题。有关OpenMPI,请参阅;MPICH2具有类似的语法。我要补充的是,MPI实际上是为集群内的可靠网络而设计的,而不是为分布式计算而设计的;如果您的一台计算机被关闭或网络故障,它将不会有很好的响应。除此之外,它应该可以工作——这种“混合”的并行化方法w/MPI在HPC中经常使用。出于好奇,这是所有MPI实现都必须具备的标准特性吗?