伪造单个地址空间
我有一个大型科学计算任务,它可以与 SMP 很好地并行化,但粒度太细,无法通过显式消息传递轻松并行化。我想跨地址空间和物理机器并行化它。在以下条件下,创建一个跨多台物理计算机并行化已经多线程代码的调度程序是否可行:
- 代码已经是多线程的,并且可以在 SMP 配置上很好地扩展。
- 事实上,并非所有线程都在同一地址空间或同一物理机器上运行,这一事实对于程序来说必须是透明的,即使这在某些用例中会带来显着的性能损失。
- 您可以假设所有涉及的物理机都运行二进制兼容的操作系统和 CPU 架构。
- 像锁和原子操作这样的事情可能很慢(需要处理网络延迟等),但必须“正常工作”。
编辑:
- 我只关心吞吐量,而不关心延迟。
- 我正在使用 D 编程语言,并且我几乎可以肯定没有现成的解决方案。我更感兴趣的是这在原则上是否可行,而不是特定的罐装解决方案。
I have a large scientific computing task that parallelizes very well with SMP, but at too fine grained a level to be easily parallelized via explicit message passing. I'd like to parallelize it across address spaces and physical machines. Is it feasible to create a scheduler that would parallelize already multithreaded code across multiple physical computers under the following conditions:
- The code is already multithreaded and can scale pretty well on SMP configurations.
- The fact that not all of the threads are running in the same address space or on the same physical machine must be transparent to the program, even if this comes at a significant performance penalty in some use cases.
- You may assume that all of the physical machines involved are running operating systems and CPU architectures that are binary compatible.
- Things like locks and atomic operations may be slow (having network latency to deal with and all) but must "just work".
Edits:
- I only care about throughput, not latency.
- I'm using the D programming language, and I'm almost sure there's no canned solution. I'm more interested in whether this is feasible in principle than in a particular canned solution.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我的第一个想法是使用 Apache Hadoop。它提供分布式存储和分布式计算。您可以使用文件作为锁来跨进程同步。
My first thought is to use Apache Hadoop. It provides distributed storage and distributed computing. You can synchronize across processes by using files as locks.
听起来你想要类似 SCRAMNet 的东西,尽管这需要定制硬件。不知道有没有纯软件的解决方案。此外,即使您让它正常工作,您也可能会发现您的网络版本实际上比以前在单台计算机上运行时运行得慢。您可能只需要硬着头皮重新设计您的应用程序。
It sounds like you want something like SCRAMNet, although that requires custom hardware. I don't know if there is a software-only solution. Also, it's likely that even if you got it working, you'd find your networked version was actually running slower than when it was previously on a single machine. You may just have to bite the bullet and re-design your app.
由于您的第 2 点表明您可以忍受一些性能下降,因此您可能需要考虑一种混合方法:单个计算机内的 SMP、计算机之间的消息传递。我对D不太熟悉,所以无法提供具体建议。此外,我还看到了对 OpenMP+MPI 混合方法的褒贬不一的评论,但它可能适合您和您的应用程序。
编辑:您可能想搜索“分区全局地址空间”,这似乎非常准确地描述了您想要的方法。和以前一样,我不建议使用 D 来实现此目的。
Since your point 2 suggests that you can live with some performance degradation you might want to consider a hybrid approach: SMP within individual machines, message-passing between machines. I'm not familiar with D so can offer no specific advice. Further I've seen mixed reviews of the hybrid approach for OpenMP+MPI, but it might suit you and your application.
EDIT: You might want to Google around for 'partitioned global address space' which seems to describe your desired approach quite accurately. As before, I have no advice on using D for this.