我有一个执行蒙特卡罗模拟的程序。目前我已针对OpenMP和OpenCL编写了该程序的版本,并希望了解在LAN上的计算机之间分配工作负载的最佳方法。
我的第一个想法是编写一个基于套接字的客户端/服务器应用程序,服务器将把工作单元分开发送给客户端,然后客户端完成它们并发回结果。为了利用具有快速CPU和GPU的系统,我可以在系统上运行多个客户端程序实例(-omp和-ocl可执行文件)。
然而,套接字编程很少令人愉快,并且很难做到正确(决定协议等)。因此我决定看一下看起来不错的MPI,虽然我不确定当你想要将CPU + GPU加入到混合中时它的效果如何,或者我的服务器规定的“工作单位”的适用程度如何。(确定哪个过程)要采样的问题空间的区域是非平凡的,因此需要有感知的主进程来协调事物。)
因此,我有兴趣知道在我遇到类似的情况下是否还有其他选择或其他选择。
答案 0 :(得分:1)
你的描述有点模糊,但它对MPI来说肯定是可行的。 GPU的添加无关紧要,因为MPI并不关心MPI调用本身的代码(我曾经编写过一个使用Qt进行可视化和线程处理的MPI应用程序)。
我能看到的最大的警告是,MPI程序由一个程序的多个实例组成:如果您的OpenMP和OpenCL解决方案是单独的应用程序,那么您不能只生成两个并且将它们全部一起运行。但是,您可以编写一个简单的包装器应用程序,例如,使用OpenMP解决方案生成一个线程,使用OpenCL解决方案生成另一个线程。使用MPI运行此包装应用程序将获得所需的结果,但当然通信可能会有点棘手(在线程之间共享通信器信息等)。