2016-11-03 30 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(意思是沒有管道延遲),那麼你有一個理想的情況。 –

相關問題