Algorithm 有什么算法可以决定何时以及如何将计算拆分到多台机器上?

Algorithm 有什么算法可以决定何时以及如何将计算拆分到多台机器上?,algorithm,cloud,cluster-computing,Algorithm,Cloud,Cluster Computing,假设您有4个计算任务A、B、C、D。其中一些任务依赖于其他任务(在下面写为->)。例如,B->A意味着我必须先计算A,然后才能开始计算B 依赖关系如下面的树所示,因此D->B->A和C->A A |\ B C | D 如果我决定在一台机器上进行所有计算,总计算时间将为(假设每台机器只有一个内核/线程): 我还可以将它们分成两台机器: Machine1 Machine2 A A | | B C | D 在这

假设您有4个计算任务A、B、C、D。其中一些任务依赖于其他任务(在下面写为
->
)。例如,B
->
A意味着我必须先计算A,然后才能开始计算B

依赖关系如下面的树所示,因此D
->
B
->
A和C
->
A

A
|\
B C
|
D
如果我决定在一台机器上进行所有计算,总计算时间将为(假设每台机器只有一个内核/线程):

我还可以将它们分成两台机器:

Machine1      Machine2
A              A
|              |
B              C
|
D
在这种情况下,总时间将更短(我忽略了分解计算所涉及的开销):

请注意,在这种情况下,必须计算两次A,每台机器一次。因此,尽管我们的总时间较短,但我们浪费了计算资源

如果我们不与使用同一集群的其他用户竞争,那么拆分总是好的。因此,根据负载的不同,拆分可能是个好主意,也可能不是

我正在寻找两种算法:

  • 如何将计算拆分到多台机器上?这将意味着分析依赖树并找出独立的分支
  • 什么时候把计算分到几台机器上?我们需要考虑机器数量、当前负载、必须重复的计算(在上面的示例中为A)以及重复计算的成本。例如,在上面的例子中,A可能需要1秒或50秒。

  • 你不能在计算A之后进行拆分吗?@maraca所有的计算都是在网格上进行的,而不是在进行拆分的计算机上。所以目前你的提议是不可能实现的。这意味着向网格发送一条消息,将响应返回,并将其与用于以下计算的数据一起发送回网格。目前还不可行,但我肯定可以调查这一点。你不能在计算A后分割吗?@maraca所有的计算都是在网格上完成的,而不是在进行分割的计算机上。所以目前你的提议是不可能实现的。这意味着向网格发送一条消息,将响应返回,并将其与用于以下计算的数据一起发送回网格。目前还不可行,但我肯定可以调查此事。
    Machine1      Machine2
    A              A
    |              |
    B              C
    |
    D
    
    Total time = Max(t(A) + t(B) + t(D), t(A) + t(C))