【问题标题】:Techniques Small-scale Distributed Computing技术 小规模分布式计算
【发布时间】:2011-06-09 18:28:54
【问题描述】:

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

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

然而,sockets 编程很少是令人愉快的,而且很难做到正确(决定协议等)。因此,我决定查看 MPI,它看起来不错,但我不确定当您想要将 CPU + GPU 包含在组合中时它的效果如何,或者我的服务器规定的“工作单元”是否适合。(确定哪个的过程要采样的问题空间区域非常重要,因此需要有感知的主进程来协调事物。)

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

【问题讨论】:

  • mpi 是事实上的标准。

标签: mpi distributed-computing


【解决方案1】:

您的描述有点含糊,但使用 MPI 听起来确实可行。添加 GPU 并不重要,因为 MPI 并不关心除了 MPI 调用本身之外运行的代码是什么(例如,我曾经写过一个使用 Qt 进行可视化和线程化的 MPI 应用程序)。

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

【讨论】:

  • 在带有 MPI 的通信器中启动不同的程序没有问题。对于 OpenMPI,请参阅 open-mpi.org/faq/?category=running#mpmd-run ; MPICH2 有类似的语法。我要补充一点,MPI 确实是为集群内的可靠网络设计的,而不是分布式计算。如果您的其中一台计算机关闭或网络故障,它将无法很好地响应。除此之外,它应该可以工作 - 这种使用 MPI 进行并行化的“混合”方法在 HPC 中经常使用。
  • 指向你,我不知道这一点。只是出于好奇,这是所有 MPI 实现都必须具备的标准功能吗?
猜你喜欢
  • 2012-04-26
  • 2011-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多