sha*_*oth 5 concurrency optimization performance multithreading
在其节能软件指南中,英特尔建议程序采用多线程设计,以提高能效.
我不明白.假设我有一个可以关闭未使用内核的四核处理器.假设我的代码完全可并行化(同步开销可以忽略不计).
如果我只使用一个核心,我将一个核心刻录一小时,如果我使用四个核心,我会烧掉四个核心15分钟 - 无论哪种核心小时数相同.储蓄在哪里?
我怀疑它与CPU利用率和功耗之间的非线性关系有关.因此,如果您可以在4个CPU上分配100%的CPU利用率,那么每个CPU的利用率将达到25% - 并且消耗量为12%.
当根据维基百科使用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
Run Code Online (Sandbox Code Playgroud)
现在我们可以将负载(L)与功耗相关联,我们可以看到在一个核心上给出所有内容的功耗特性:
p = C(1000 + 5L)^3
p = 1000000000 + 15000000L + 75000L^2 + 125L^3
Run Code Online (Sandbox Code Playgroud)
或者分布在4个核心上:
p = 4C(1000 + (5/4)L)^3
p = 4000000000 + 15000000L + 18750.4L^2 + 7.5L^3
Run Code Online (Sandbox Code Playgroud)
注意L ^ 2和L ^ 3前面的因子.