Does a CPU consume less power when it is idle?
Qualquer CPU moderna: sim. E o antigo 6502 a 980KHz ou similar daquela época provavelmente não o faria. Sempre atraía mais ou menos a mesma corrente com a mesma voltagem e, se não tivesse nada a fazer, entrava em espera. Essencialmente, sempre foi ocupado, mesmo que apenas fazendo isso: 1. 'Eu tenho algum trabalho?' 2. 'não, então vamos voltar ao ponto 1'
No entanto, as velocidades mencionadas (800MHz e 4.0GHz) apontam para uma configuração moderna. Como o termo speedstep, que eu mais me lembro dos primeiros CPU's intel em laptops.
O trabalho em uma CPU geralmente segue esse padrão:
- O contador de instruções em um núcleo é lido, aumentado em um.
- Uma instrução é lida daquele lugar.
- essa instrução é decodificada (se necessário) e executada.
- Normalmente voltamos ao início.
Isso significa que a CPU está sempre ocupada fazendo as coisas. Fazer as coisas significa mudanças de estado nos transistores, o que consome energia. Velocidades mais altas significam mais mudanças e, portanto, mais energia usada.
Agora, se pudermos parar a CPU inteira usando a instrução HTL quando ela não tiver nada para fazer, então não atrairia (ou significativamente menos) poder. Isso significa que você não ganha nada por ter uma CPU mais rápida fazendo as mesmas operações em menos tempo.
Por exemplo
- CPU lenta demorando 20 segundos para um trabalho, atraindo 35 watts o tempo todo.
- CPU rápida fazendo o mesmo trabalho em 10 segundos, mas precisando de 70 Watt durante esse tempo.
A energia usada (somente CPU) seria a mesma nos dois casos.
Há um porém, a CPU mais rápida geralmente quer uma voltagem mais alta para poder mudá-la com mais rapidez. Isso significa que ele pode consumir a mesma corrente, mas a energia usada é aumentada.
Assim, faz sentido reduzir a frequência da CPU ( e a tensão) quando ela tiver períodos significativos sem tarefas produtivas.
Para responder a esta parte:
If I were to disable speedstepping, and let my clock run at 4.0GHz all the time; Is there a difference in power consumption when CPU cycles are spent in an application vs in idle cycles?
Sim, seria. Se a velocidade do clock for sempre 4.0GHz, a voltagem sempre deve ser suficiente para a operação nessa velocidade. Sem voltagens baixas, sem energia economizada.
Quanto ao speedstep:
Primeiro, ouvi falar disso em torno da era do Pentium Mobile (P-2, P3's, Pentium Mobiles, CPU's ...). As plataformas Windows / Intel daquela época eram fornecidas com algo chamado speedstep, permitindo que o SO baixasse a velocidade ou o seu CPU e diminuísse a voltagem fornecida à nossa CPU.
Hoje em dia, mais desta funcionalidade está no hardware ou com a ajuda da ACPI, e a CPU não está apenas reduzida em velocidade, mas pode ser colocada em um dos vários estados com menor consumo de energia (estados C). Alguns deles simplesmente interrompem a execução de instruções, alguns desligam parte do chip. Essa parte é muito mais complexa, já que desligar um núcleo inteiro, liberando seu cache antes disso e desligar sua interface de memória também leva tempo (e energia). Idem para trazer de volta on-line. Agendadores modernos fazem uma dança complexa com vários núcleos, velocidade de núcleos, orçamentos de aquecimento e estados de energia. Eles não fazem isso porque fazer um chip mais complexo é divertido. Eles fazem isso porque podem aumentar temporariamente a velocidade (turbo boost) e economizar energia.
Desativar tudo isso e sempre rodar na mesma velocidade nega essas vantagens. Só é sensato fazer quando você for empurrar o chip para seus limites (por exemplo, quando overclocking), uma vez que causa menos flutuações de energia.