多个.NET进程的严格负载平衡

多个.NET进程的严格负载平衡,.net,windows,f#,hpc,.net,Windows,F#,Hpc,我有一个在WindowsServer2008SE和64个处理器上运行的多进程.NET(F#)科学模拟。模拟的每个时间步长从1.5秒振荡到2秒。由于每个进程必须等待其他进程,因此总体速度是最慢进程的速度(2秒*迭代次数)。因此,我需要尽可能减少过程的振荡 有没有办法强制一组进程具有完全相同的“计算时间”用于其计算?您是否可以并行化2秒序列,从而使模拟的多个“分支”并行进行 例如: 假设这是一个包含4个进程的模拟。流程1需要2秒钟,因此在流程1完成之前您无法完成 process1---------

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


有没有办法强制一组进程具有完全相同的“计算时间”用于其计算?

您是否可以并行化2秒序列,从而使模拟的多个“分支”并行进行

例如: 假设这是一个包含4个进程的模拟。流程1需要2秒钟,因此在流程1完成之前您无法完成


process1---------------------------------------------- (2 sec)
process2-------- (0.5 sec)
process3---- (0.25 sec)
process4---------------------------- (1 sec)
您有很多空闲时间,其中大多数进程都在等待进程1。

对于您正在尝试执行的工作,同时运行这些设备中的多个是否可行?如果是这样,那么您可以通过在其他模拟上工作来利用空闲内核,而这些模拟正在等待较长时间的运行过程完成。

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

按评论更新
您可以使用来将流程约束到特定的处理器。

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


关于这个问题,我最喜欢的论文是弗里戈和斯特伦彭写的。它们描述了一些迷人的技术,例如时空细分,它将大量并行计算(如您所描述的)转化为任意细粒度异步计算,从而使负载平衡变得轻松。

有没有办法在一个进程内使用多个线程而不是多个进程?
“计算时间“可用
是,仅当它在没有任何其他进程/服务的自定义操作系统上运行时才可用etcAlex Moore:我需要使用多个进程。安库:我有64个核。系统应该使用1个内核,其余的留给计算…变化是由于CPU时间步进还是由于计算强度本身的变化?一些时间步骤可能只需要更长的时间。好吧,出于我的测试目的,所有内核上的步骤和工作完全相同。最好的方法是使用1个处理器对1个进程。这是可能的吗?您可能能够将一个进程固定到处理器上,但这并不能解决一些处理器会比其他处理器先完成的问题,因为其他工作正在对它们进行(例如,操作系统本身),或者因为它们经历了更多的缓存未命中等。这不是我的意思。换句话说,我需要一个处理器一个进程或类似的。因此,我的所有进程都具有相同的“功率/速度”。ProcessorAffinity是最接近解决方案的,因此我将其标记为答案。但是我已经阅读了很多关于不要使用ProcessorAffinity的警告,所以我可能会坚持使用系统来决定最适合我的。