伪造单个地址空间

时间:2010-05-24 15:28:20

标签: performance multithreading message-passing parallel-processing

我有一个很大的科学计算任务,可以很好地与SMP并行化,但是通过明确的消息传递可以很容易地并行化。我想在地址空间和物理机器上并行化。在以下条件下创建可在多台物理计算机上并行化多线程代码的调度程序是否可行:

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

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

听起来你想要像SCRAMNet这样的东西,虽然这需要自定义硬件。我不知道是否有纯软件解决方案。此外,即使你运行它,你也可能会发现你的联网版本实际上比以前在一台机器上运行的速度慢。您可能只需要咬紧牙关并重新设计您的应用程序。

答案 2 :(得分:0)

由于您的观点2表明您可能会遇到性能下降,因此您可能需要考虑混合方法:单个计算机内的SMP,计算机之间的消息传递。我不熟悉D所以不能提供具体的建议。此外,我看到了针对OpenMP + MPI的混合方法的混合评论,但它可能适合您和您的应用程序。

编辑:您可能希望谷歌周围的“分区全球地址空间”,它似乎非常准确地描述了您想要的方法。和以前一样,我没有为此使用D的建议。