0

我有一个大型科学计算任务,可以很好地与 SMP 并行化,但粒度太细,无法通过显式消息传递轻松并行化。我想跨地址空间和物理机器并行化它。在以下条件下,创建一个可以在多台物理计算机上并行处理已经多线程代码的调度程序是否可行:

  1. 该代码已经是多线程的,并且可以在 SMP 配置上很好地扩展。
  2. 并非所有线程都在同一地址空间或同一物理机器上运行这一事实必须对程序透明,即使这在某些用例中会导致显着的性能损失。
  3. 您可以假设所涉及的所有物理机器都在运行二进制兼容的操作系统和 CPU 架构。
  4. 诸如锁和原子操作之类的东西可能很慢(需要处理网络延迟等等),但必须“正常工作”。

编辑:

  1. 我只关心吞吐量,而不关心延迟。
  2. 我正在使用 D 编程语言,我几乎可以肯定没有固定的解决方案。我对这在原则上是否可行比在特定的罐装解决方案中更感兴趣。
4

3 回答 3

0

我的第一个想法是使用Apache Hadoop。它提供分布式存储和分布式计算。您可以通过将文件用作锁来跨进程同步。

于 2010-05-24T15:36:10.510 回答
0

听起来您想要SCRAMNet 之类的东西,尽管这需要自定义硬件。我不知道是否有纯软件解决方案。此外,即使你让它工作了,你也可能会发现你的网络版本实际上比以前在单台机器上运行的速度要慢。您可能只需要硬着头皮重新设计您的应用程序。

于 2010-05-24T15:51:41.163 回答
0

由于您的第 2 点表明您可以忍受一些性能下降,您可能需要考虑一种混合方法:单个机器内的 SMP,机器之间的消息传递。我对 D 不熟悉,因此无法提供具体建议。此外,我还看到了对 OpenMP+MPI 混合方法的不同评价,但它可能适合您和您的应用程序。

编辑:您可能想在 Google 周围搜索“分区的全局地址空间”,这似乎非常准确地描述了您想要的方法。和以前一样,我对使用 D 没有任何建议。

于 2010-05-24T16:11:07.550 回答