在其Energy-Efficient Software Guidelines英特尔建议,程序采用多线程设计,以提高能效。
我不明白。假设我有一个可以关闭未使用内核的四核处理器。假设我的代码完全可并行化(同步开销可以忽略不计)。
如果我只使用一个核心,我将一个核心刻录一小时,如果我使用四个核心,我将四个核心刻录15分钟 - 两种核心小时相同。储蓄在哪里?
答案 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)
有三个原因,其中两个已被指出:
总而言之,您使用CPU消耗更多功率,并且可以在更长时间内为CPU冷却更多功率,并且您也可以运行其他组件更长时间。
作为第四个原因,人们可以声称(注意这只是一个假设!)英特尔CPU是超线程的,并且由于超线程核心共享一些资源,一次运行两个线程比运行一个线程两倍长度更有效