Requisito de energia da CPU multicore e balanceamento de carga

10

Estou interessado no balanceamento de carga para sistemas de CPU multicore. Se você usa 1 CPU com vários núcleos, é mais eficiente em termos de energia equilibrar a carga em vários núcleos ou tentar preencher núcleos únicos e deixar os outros inativos.
A suposição básica é que a quantidade de trabalho que está sendo realizada nos dois casos é exatamente a mesma, ao mesmo tempo. Portanto, é mais eficiente usar 4 núcleos na mesma CPU com 25% de carga cada ou 1 núcleo com 100% de carga.
Eu diria que um núcleo com carga de 100% deve ser mais eficiente, mas como posso estar errado, eu estava procurando respostas sérias sobre esse problema (sem suposições).

private_meta
fonte
+1 pergunta realmente interessante! Aqui estão alguns links tomshardware.com/reviews/truth-pc-power-consumption.1707.html tomshardware.com/reviews/intel-cpu-power-consumption.1750.html, mas eles realmente não abordam sua pergunta. Eu tenho o C2D T8100 e um dia desses vou fazer alguns testes para ver qual tipo de carga gera mais calor.
precisa saber é o seguinte
4 núcleos a 25% definitivamente vão espalhar o calor melhor do que 1 núcleo a 100%.
Brian Knoblauch
Se a quantidade de trabalho for constante nos casos de uso, acumular toda a carga no mesmo núcleo fará com que ele tenha um desempenho menor - efetivamente demorando mais tempo e se debatendo. Você pode perder a economia instantânea de energia quando o mesmo trabalho exigir mais tempo para ser concluído. (+1, pensou questão provocando)
nik
A @Brian concordou que o uso de mais núcleos espalha o calor, mas gera a mesma quantidade de calor no total?
Kevin Panko
AMD anunciou CPUs que serão capazes de desligar núcleos não utilizados, allowin para executar os núcleos ativos em maior velocidade de relógio
b0fh

Respostas:

6

IMO esta questão é simplesmente irrespondível no caso geral.

Na minha mesa, tenho uma dessas novas CPUs habilitadas para Turbo Core i7-980x e 6 núcleos com TurboBoost. Se você carregar um único núcleo nesta máquina, ele aumentará a velocidade do clock desse núcleo, aumentando assim o consumo de energia da CPU, o que fará uma enorme diferença. Esta CPU, bem como outras CPUs mais modernas, pode retirar parcialmente energia de núcleos inativos, aumentando a economia de energia. Isso não é verdade em modelos de CPU mais antigos.

Lembre-se de que o trabalho que você deve fazer com um núcleo será necessariamente diferente do trabalho que você faz com vários núcleos. Se for possível espalhar a carga em vários núcleos, você descobrirá que muito tempo extra será gasto no único núcleo executando comutações de contexto caras, e seu desempenho será prejudicado.

Enfim, o problema tem muitas variáveis ​​para realmente responder. Pode-se continuar falando sobre os diferentes tipos de cargas, e qualquer pessoa que tentar fazer benchmark para obter uma resposta acabará (provavelmente inadvertidamente) fazendo comparações de maçãs com laranjas que não se aplicam a outros casos de uso.

Ah, e mais uma coisa. A maioria das pessoas provavelmente citará a eficiência em termos de poder . Você não quer cair nessa armadilha. Como o tempo para processar as cargas será necessariamente diferente, dependendo de como as cargas são balanceadas, você deve integrar o resultado ao longo do tempo para encontrar a quantidade líquida de energia usada para concluir os trabalhos, a fim de obter um resultado confiável.

David Markle
fonte
LOL Como você pôde dizer? Engenharia Hokie, querida!
precisa
É preciso conhecer um. Go Mizzou
hotei
Oh espere. Eu estava errado. Há um homem que poderia executar alguns benchmarks e nos dar uma resposta no caso geral: gizmodo.com/5598885/...
David Markle
4

Hoje fiz alguns testes usando este computador (Intel C2D T8100) e usando aplicativos SETI @ Home otimizados do instalador lunatics 0.36. Eu usei M $ Joulmeter para calcular o consumo de energia. Eu medi o tempo da árvore de consumo. Primeiro, deixei o BOINC usar 100% de núcleos e 100% de tempo de CPU e deixá-lo funcionar por uma hora. O processador consumia 20W e os gráficos de tempo da CPU do gerenciador de tarefas estavam fixos em 100%. O consumo médio de energia do meu computador estava em 45,05W e subia e, no momento em que parei, o consumo de energia em teste foi de 46,18W.

No segundo teste, configurei o BOINC para tomar 50% dos núcleos disponíveis e 100% do tempo da CPU e deixá-lo funcionar por uma hora. O consumo de energia da CPU variou entre 12W e 13W. O consumo médio foi de 42,72W e em alta. No momento em que parei o teste, o consumo era de 44W. Para que o gráfico de tempo da CPU para o núcleo direcionado seja plano, defino a afinidade do programa como um núcleo e a prioridade como alta. O gráfico para outro núcleo mostrou um uso de tempo da CPU um pouco maior que o normal.

Para o terceiro teste, configurei o BOINC para usar 100% dos núcleos disponíveis e 50% do tempo da CPU. O consumo de energia variou em grandes saltos entre 5W e 17W. O consumo médio de energia após uma hora de teste foi de 39,96 W e em queda. Os gráficos de tempo da CPU são armazenados em cache como /\/\/\/\/\/\/\/\/\/\/\/\/\. Picos eram esperados devido ao tamanho das unidades de tempo usadas pelo BOINC.

Portanto, acredito que é mais eficiente usar dois núcleos executando com meia carga do que executar um núcleo com carga total.

E sim, eu sei que, para um estudo adequado, são necessárias muito mais amostras, mas no momento não tenho computadores ou tempo suficientes para fazer estatísticas apropriadas.

AndrejaKo
fonte
1
Agora seria bom para encontrar um equivalente ao Joulemeter para outros sistemas operacionais, então eu poderia testar alguns dos equipamentos que eu tenho ...
private_meta
Algo está aqui para GNU / Linux laptops thinkwiki.org/wiki/How_to_measure_power_consumption
AndrejaKo
Aqui está outro link interessante: www.lesswatts.org/ e outro susegeek.com/general/… e outro publib.boulder.ibm.com/infocenter/lnxinfo/v3r0m0/… Aparentemente, as pessoas não acreditam nas leituras da ACPI e estão convencidas Como medidores externos são necessários, poucos desses links discutem como usar medidores externos. Não tenho 1337 o suficiente com outros sistemas operacionais para poder fornecer qualquer ajuda.
precisa saber é o seguinte
Obrigado. O problema com medidores externos é que eles medem todo o consumo de energia, não apenas a energia de processamento. Embora o consumo total de energia também seja importante (por exemplo, algoritmos usam extensivamente discos rígidos). Se as leituras ACPI não parece ser confiável, você teria que usar leituras externos para computadores Windows, bem como para ser capaz de compará-los: - /
private_meta
Mas as leituras da ACPI ainda são melhores do que nenhuma, certo? Além disso, usando testes que impactam mais a CPU, podemos estabelecer o consumo básico de energia e ver quanto isso aumenta com a carga. Dessa forma, podemos saber que a maior parte da mudança de consumo ocorreu devido à carga da CPU. Eu poderia fazer mais alguns testes mais tarde com um voltímetro e um amperímetro. Seria realmente interessante ver como as medidas da ACPI e as medidas reais do instrumento se comparam. Pena que essa comparação não possa ser generalizada.
AndrejaKo
0

A resposta para sua pergunta é dupla: se você estiver executando um código paralelo altamente vetorizável, o equilíbrio da carga em vários núcleos será sempre mais eficiente. Os núcleos serão executados com cargas mais baixas, liberando menos calor do que um único núcleo que é empurrado até seu limite. Por outro lado, se seu código não for paralelelizável, executá-lo em vários núcleos será menos eficiente, devido ao número de falhas de cache que ocorrerão devido a dependências no código. Isso ainda pode gerar menos calor, mas definitivamente levará mais tempo para concluir sua tarefa, em comparação com a execução em um único núcleo.

emish
fonte
1
Mas se você possui um código não-paralelizável, como vai encontrar mais de um núcleo?
precisa saber é o seguinte
Na sua opinião, 4 núcleos combinados a 25% geram menos calor (e produz mais perda de energia) do que 1 núcleo empurrado para 100%.
Private_meta
@AndrejaKo Se houver vários processos ou threads, é fácil espalhá-los pelos núcleos.
emish 7/08/10
0

Sua pergunta, como feita, tem muitas incógnitas. Você está perguntando sobre eficiência de tempo ou eficiência energética? Código não paralelo ou código paralelo? Trabalho único ou multitarefa média na área de trabalho? Se você tem uma conta de energia superior a US $ 1000 / mês para seus computadores, pode valer a pena uma ou duas preocupações. Caso contrário, você não poderá economizar o suficiente para fazer com que o problema seja resolvido. É divertido falar sobre isso - mas se você tiver um problema sério, a melhor resposta é: tente algumas coisas diferentes e veja o que funciona.

hotei
fonte