Requisito de energia da CPU multicore e balanceamento de carga

10

Estou interessado em balanceamento de carga para sistemas de CPU multicore. Se você usa 1 CPU com múltiplos núcleos, é mais eficiente em termos energéticos equilibrar a carga em vários núcleos ou tentar encher núcleos únicos e deixar outros ociosos.
A suposição básica é que a quantidade de trabalho que está sendo feito em ambos os casos é exatamente a mesma, no mesmo tempo. Então, é 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 1 núcleo com 100% de carga deve ser mais eficiente, mas como eu posso estar errado, eu estava procurando respostas sérias sobre esse problema (sem adivinhações).

    
por private_meta 03.08.2010 / 13:04

4 respostas

6

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

Na minha mesa, eu tenho uma dessas novas CPUs Core i7-980x com seis núcleos e 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. Essa CPU, assim como outras CPUs mais modernas, pode parcialmente desativar núcleos inativos, aumentando a economia de energia. Isso não é tão verdadeiro em modelos de CPU mais antigos.

Tenha em mente que o trabalho que você tem a fazer com um núcleo será necessariamente diferente do trabalho que você faz com vários núcleos. Se for possível distribuir a carga em vários núcleos, você descobrirá que muito tempo extra será gasto no único núcleo que executa switches de contexto caros e seu desempenho será prejudicado.

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

Ah, e mais uma coisa. A maioria das pessoas provavelmente citará 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 completar os trabalhos, a fim de chegar a um resultado confiável.

    
por 07.08.2010 / 16:14
4

Eu fiz alguns testes hoje usando este computador (Intel C2D T8100) e usando o SETI @ Home otimizado aplicativos do instalador do lunatics 0.36. Eu usei M $ Joulmeter para calcular o consumo de energia. Eu medi o tempo das árvores de consumo. Primeiro, deixo o BOINC tomar 100% de núcleos e 100% de tempo de CPU e deixá-lo rodar por uma hora. O processador estava consumindo 20W e os gráficos de tempo da CPU do gerenciador de tarefas estavam estáveis em 100%. O consumo médio de energia do meu computador foi de 45,05 W e aumentando e no momento eu parei o consumo de energia do teste foi de 46,18W.

No segundo teste, configurei o BOINC para obter 50% dos núcleos disponíveis e 100% do tempo de CPU e deixá-los rodar por uma hora. Consumo de energia da CPU variou entre 12W e 13W. O consumo médio foi de 42,72 W e subindo. No momento em que parei o teste, o consumo foi de 44W. Para fazer com que o gráfico de tempo da CPU para o núcleo segmentado seja linear, defino a afinidade do programa para um núcleo e a prioridade para alto. O gráfico para outro núcleo mostrou um pouco mais alto que o uso normal do tempo da CPU.

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 caindo. Gráficos de tempo da CPU são lidos como /\/\/\/\/\/\/\/\/\/\/\/\/\ . Os picos eram esperados devido ao tamanho das unidades de tempo usadas pelo BOINC.

Portanto, acredito que é mais eficiente usar dois núcleos em execução a meia carga do que executar um núcleo em carga total.

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

    
por 07.08.2010 / 15:50
0

A resposta à sua pergunta é dupla: se você estiver executando um código paralelamente altamente vetorizável, o balanceamento da carga em vários núcleos será sempre mais eficiente. Os núcleos funcionarão com cargas menores, liberando menos calor do que um único núcleo que é empurrado para o limite. Por outro lado, se o seu código não for paralelizável, executá-lo em vários núcleos será menos eficiente, devido ao número de erros 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 à sua execução em um único núcleo.

    
por 06.08.2010 / 17:40
0

Sua pergunta, conforme 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 acima de $ 1000 / mês para seus computadores, então pode valer a pena uma preocupação ou duas. Caso contrário, você não poderá economizar o suficiente para resolver o problema. Diversão para falar - mas se você tem um problema sério, a melhor resposta é: tente algumas coisas diferentes e veja o que funciona.

    
por 07.08.2010 / 17:06