多线程程序如何更节能?

时间:2011-08-03 11:14:23

标签: multithreading optimization concurrency performance

在其Energy-Efficient Software Guidelines英特尔建议,程序采用多线程设计,以提高能效。

我不明白。假设我有一个可以关闭未使用内核的四核处理器。假设我的代码完全可并行化(同步开销可以忽略不计)。

如果我只使用一个核心,我将一个核心刻录一小时,如果我使用四个核心,我将四个核心刻录15分钟 - 两种核心小时相同。储蓄在哪里?

6 个答案:

答案 0 :(得分:7)

我怀疑它与CPU利用率和功耗之间的非线性关系有关。因此,如果您可以在4个CPU上分配100%的CPU利用率,则每个CPU的利用率将达到25% - 并且消耗量为12%。

当根据Wikipedia使用动态CPU缩放时,CPU的功耗为P = C(V^2)F,尤其如此。当CPU运行得更快时,它需要更高的电压 - 而'2的幂'变得至关重要。此外,电压将是F的函数(这意味着F可以求解为V)给出类似P = C(F^2)F的东西。因此,通过将负载分散到4个CPU(在该频率下以100%容量运行),可以降低相同工作的成本。

我们可以将F作为L(负载)的函数,在一个核心的100%(就像在你的操作系统中那样),所以:

F = 1000 + L/100 * 500 = 1000 + 5L
p = C((1000 + 5L)^2)(1000 + 5L) = C(1000 + 5L)^3

现在我们可以将负载(L)与功耗相关联,我们可以看到在一个核心上给出所有功耗的特性:

p = C(1000 + 5L)^3
p = 1000000000 + 15000000L + 75000L^2 + 125L^3

或分布在4个核心上:

p = 4C(1000 + (5/4)L)^3
p = 4000000000 + 15000000L + 18750.4L^2 + 7.5L^3

注意L ^ 2和L ^ 3前面的因素。

答案 1 :(得分:4)

在那一小时内,一个核心并不是你唯一能继续运行的东西。

答案 2 :(得分:3)

CPU是计算机的一部分。它有风扇,主板,硬盘,显卡,RAM等,让我们称之为BASE。如果您正在进行科学计算(即计算群集),那么您需要为许多计算机供电。如果你为100的BASE供电,为什么不允许那些BASES上有多个物理CPU,这样那些CPU可以共享BASE的资源,物理和逻辑。

现在INTEL的营销模糊可能还取决于这样的事实,即每个CPU晶圆都包含多个核心。为多个物理CPU供电不同于为具有多个内核的单个物理CPU供电。

因此,如果每单位功率完成的工作量是有问题的基准,那么现代CPU执行高度并行的任务,那么与上一代处理器相比,你可以获得更多的收益。因为不仅可以获得更多的内核/ CPU,而且还可以 通用 来获得可以占用多个CPU的BASE。

有人可能很容易断言,一个高端系统现在可以容纳8-16个单核CPU单核CPU的处理能力(假设在这个假设的情况下,在新系统和老一代的情况下)系统,每个核心具有相同的处理能力)。

答案 3 :(得分:2)

如果某个程序是多线程的,并不意味着它会使用更多内核。这只意味着同时处理更多任务,因此整个处理器时间更短。

答案 4 :(得分:2)

你用4个核心燃烧4倍的能量,但你也做了4倍的工作!如果如你所说的那样,同步可以忽略不计并且工作可以并行化,那么你将花费4倍的时间。

使用多个线程可以在您进行i / o等待时节省能源。一个线程可以等待,而其他线程可以执行其他计算;而不是让您的应用程序闲置。

答案 5 :(得分:2)

有三个原因,其中两个已被指出:

  1. 更长的总时间意味着其他(非CPU)组件需要运行更长时间,即使CPU的净计算保持不变
  2. 更多线程意味着同时完成更多事情(因为档位用于有用的东西),同样会减少整体实时。
  3. 在一个核心上运行相同计算的CPU功耗不同。英特尔CPU具有内置时钟提升功能,可用于单核用户(我忘记了它的营销术语)。时钟越高意味着功耗越大,热量就越不成比例,这也需要风扇更快地旋转。
  4. 总而言之,您使用CPU消耗更多功率,并且可以在更长时间内为CPU冷却更多功率,并且您也可以运行其他组件更长时间。

    作为第四个原因,人们可以声称(注意这只是一个假设!)英特尔CPU是超线程的,并且由于超线程核心共享一些资源,一次运行两个线程比运行一个线程两倍长度更有效