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).
cpu-usage
power-consumption
private_meta
fonte
fonte
Respostas:
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.
fonte
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.
fonte
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.
fonte
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.
fonte