【问题标题】:Faking a Single Address Space伪造单个地址空间
【发布时间】:2011-02-23 07:04:17
【问题描述】:

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

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

编辑:

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

【问题讨论】:

  • 请详细说明:操作系统、环境、编程语言等。可以容忍多少延迟?
  • 问题标题对我来说是“分布式共享内存”,而第 2 点说没有共享地址空间,即“分布式内存”。你需要共享内存吗?如果是,第 2 点是否要求线程了解环境?

标签: performance multithreading message-passing parallel-processing


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2016-06-19
        • 2011-02-08
        • 2011-07-08
        • 2012-09-20
        • 2019-11-06
        • 2015-08-13
        • 2011-01-30
        • 2012-08-16
        • 2015-02-09
        相关资源
        最近更新 更多