2016-11-03 78 views
0

作为一个思想实验,我想最大限度地提高CPU的功耗。 (即效率最低的CPU使用率)。显然这是一个特定处理器,但我希望有一些准则适用于所有处理器。如何最大限度地提高CPU的功耗?

简单的解决方案可能是产卵一堆运行一个简单的循环,它的线程:

static int count = 0; 
while(true) 
{ 
    ++count; 
} 

但这些不会必然用最耗电的指令,或访问内存,或许多寄存器,或者打高速缓存,它会在每个周期执行一些事情。

想法?

+1

不知道当你要求别人为你做思想时,这是如何算作一个*想法实验* –

+0

我猜你可以叉炸弹和忙碌循环? – PhotometricStereo

回答

0
  1. 电源的主要消费者是处理器本身。处理器的省电功能基于处理器关闭其部分功能的能力。因此,您希望始终保持所有处理器都处于忙碌状态。你的繁忙循环是好的,但你想保持它的可用内核数量减少1(操作系统一般运行在那一个上,并且你想避免任务交换,因为这会导致处理器减速并等待内存操作)。
  2. 在您的循环中,执行注册以注册向量操作。内存操作需要时间并且比处理器耗电少。
  3. 如果可以正确使用超线程,即每个内核有多个硬件线程,则可以提高处理器的利用率。

忘掉外围设备和内存。与处理器相比,它们的功耗很小。而且它们的使用速度很慢,这意味着处理器在等待时可能会进入静止状态(功耗较低)。

使处理器功耗最大化与优化CPU绑定应用程序的执行基本相同。看看那些想要让自己的处理器看起来像切片面包以来最棒的公司设计的基准。 (需要我提及谁我说?)

+0

不同意“忘记记忆”。如果你做得对,你应该能够保持L1和L2高速缓存的繁忙,而不会减慢CPU的速度,这并不是可以忽略不计的大门。 – sh1

+0

你可能是对的。我认为L1的潜伏期约为7个周期,L2为约15个周期。目前核心的优异CPI可能<.25(意思是每个周期4次)。所以如果你能保持低CPI,使用矢量化,并且练习L1和L2(意思是没有管道延迟),那么你有一个理想的情况。 –

相关问题