7

我有一个在 Windows Server 2008 SE 和 64 个处理器上运行的多进程 .NET (F#) 科学模拟。模拟的每个时间步长从 1.5 秒到 2 秒振荡。由于每个进程都必须等待其他进程,因此总体速度是最慢进程的速度(2 秒 * 迭代次数)。因此,我需要尽可能地减少过程的振荡。

有什么方法可以强制一组进程具有完全相同的“计算时间”可用于其计算?

4

3 回答 3

1

您是否可以并行化 2 秒系列,以便您有多个并行发生的模拟“分支”?

示例:假设这是 1 个具有 4 个进程的模拟。过程 1 需要 2 秒,因此在过程 1 完成之前您无法完成。


process1---------------------------------------------- (2 sec)
process2-------- (0.5 sec)
process3---- (0.25 sec)
process4---------------------------- (1 sec)

您在那里有很多空闲时间,您的大多数进程都在等待进程 1。
对于您正在尝试做的工作,同时运行多个这些集合是否可行?如果是这样,那么您可以通过处理其他模拟来利用您的空闲内核,同时它们正在等待您的较长运行过程完成。

于 2011-11-01T14:01:03.630 回答
1

我不知道您如何要求操作系统尝试更公平地安排您的进程,但我知道有很多关于避免您正在使用的架构的技术的研究,因为这种最低公分母效应是一个主要的实践中的瓶颈。

我最喜欢的关于这个主题的论文是Frigo 和 Strumpen的多线程缓存遗忘算法的缓存复杂性。他们描述了令人着迷的技术,例如时空细分,可以将您描述的批量并行计算转变为任意细粒度的异步计算,从而轻松实现负载平衡。

于 2011-11-01T15:57:36.087 回答
0

我不确定我是否 100% 了解您想要做什么。但是对于进程间同步,您可以使用命名EventWaitHandleSemaphore.

每条评论更新

您可以使用ProcessorAffinity将进程限制到特定的处理器。

于 2011-11-01T14:19:54.860 回答