有什么算法可以决定何时以及如何将计算分成几台机器?

时间:2016-07-30 12:11:19

标签: algorithm cloud cluster-computing

假设你有4个计算任务A,B,C,D。有些依赖(以下写成->)作为先决条件。例如。 B -> A意味着我必须首先计算A才能开始计算B.

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

A
|\
B C
|
D

如果我决定在一台机器上进行所有计算,总计算时间将是(假设每台机器只有一个核心/线程):

Total time = t(A) + t(B) + t(C) + t(D)

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

Machine1      Machine2
A              A
|              |
B              C
|
D

在这种情况下,总时间会更短(我忽略了拆分计算所涉及的开销):

Total time = Max(t(A) + t(B) + t(D), t(A) + t(C))

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

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

我正在寻找两种算法:

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

0 个答案:

没有答案