【问题标题】:Any Good Patterns For Distributed Parallelism?分布式并行有什么好的模式吗?
【发布时间】:2011-02-14 14:00:34
【问题描述】:

我有一个 for 循环,我想与 PLINQ 的 Parallel.ForEach() 之类的东西并行化。

这里的关键是我调用来执行计算的 C++ 库显然不是线程安全的,因此,任何并行化此操作的计划都需要跨多个进程这样做。

我正在考虑使用 WCF 创建一个“分发器”进程,“客户端”和多个“计算器”都可以连接到该进程并在队列中添加/删除项目,然后“计算器”直接发送结果回到客户端,它可以在收到它们时更新 gui。这种架构可以让我将尽可能多的“计算器”在线上,就像我拥有的​​处理器一样,而且我认为它甚至可以在多台计算机上运行它们,从而创建一个潜在的处理能力农场,所有客户端都可以共享。

我只是想知道是否有人有这样做的经验,以及是否有现有的应用程序块或框架可以用来为我构建它。 PLINQ 在这个过程中完成它。有没有像 DPLINQ(分布式)之类的东西?

另外,如果不存在,有人想对我提出的架构发表意见吗?有什么明显的陷阱吗?有人认为它会起作用吗!?!?!?

【问题讨论】:

  • 您需要在进程之间传输的数据量有多大?从我读到的 WCF 使用相当慢的序列化程序。因此,如果您传输大量数据,那么共享内存可能是个好主意。
  • 在您为此投入太多时间之前,我会确保付出的努力是值得的。 PLINQ 很棒,因为它为您提供了“免费”的并行处理。
  • 我知道 PLINQ 很棒 - 但由于这个库不是线程安全的问题,我无法使用它。出去的对象并没有那么大,但是这个过程会创建一些大块的数据,也许是 40-50 个数组,每个数组有 500 个双精度数?我认为 NetTCP 序列化程序足够快来处理这个问题。

标签: c# parallel-processing distributed-computing plinq


【解决方案1】:

听起来您可能正在寻找Dryad。它现在是微软的一个研究项目,但他们确实有一个“学术版本”可用。我的理解是,在 2011 年底的某个时候,他们还在为 RTM 更好地生产它(可能与 Azure 进行某种集成)。Mary Jo Foley 对此here 进行了更多介绍。

【讨论】:

  • 哇——这正是我要找的。看起来我有一些阅读要做。
  • 嗯...显然 MPI 和 Dryad 都需要 Microsoft 的 HPC 服务器许可证。
  • 那是正确的......无论如何现在。就像我说的,你可以打赌你会在某个时候看到这成为 Azure PaaS 中的某种产品。
  • @skimania,MPICH 是一个可用于 Windows 的 MPI 守护进程实现:mcs.anl.gov/research/projects/mpich2
  • dryad 是 discontinued
【解决方案2】:

控制/调度分布式工作的长期标准是MPI。我只在 C++ 中使用过它,但存在多种语言的实现。一个快速的谷歌建议MPI.Net 可能是.Net 的一个很好的实现!

【讨论】:

  • 实际上,作为一个平台,这个 MPI 听起来比 Dryad 成熟得多,但我真的很喜欢端到端 MS 解决方案的想法,所以我会先追求一个。
猜你喜欢
  • 2010-09-16
  • 1970-01-01
  • 2023-03-12
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多