Por que alguns softwares não conseguem balancear a carga mesmo quando há vários núcleos?

0

Enquanto o VTune Analyzer estava sendo executado em um servidor blade com 8 núcleos, observei a porcentagem de uso da CPU usando mpstat -P ALL 1 .

O mpstat mostrou-me que o VTune estava ocupando 100% de um único núcleo, enquanto todos os outros núcleos estavam ociosos.

Por que isso acontece? O sistema operacional (RHEL Server 5.2) não deve distribuir automaticamente a carga pelos núcleos? O mesmo aconteceu quando tentei executar o MATLAB (mesmo depois de ativar o suporte a multithreading nas configurações do MATLAB).

p.s: sou um desenvolvedor. Não é um administrador de sistema. Então, é melhor perguntar aqui do que no serverfault.

    
por Nav 19.03.2011 / 08:27

1 resposta

3

O sistema operacional distribui threads nos núcleos.

Um processo consiste em um ou mais segmentos.

Um processo que tem apenas um segmento só pode ser executado em um núcleo. Um processo com 2 threads pode ser executado em 1 core ou 2 núcleos. Um processo com 500 threads pode ser executado em quantos núcleos você tiver (digamos 125 threads por núcleo para um quad core).

Então tudo depende do processo.

Isso só será executado em um núcleo:

for(i=0; i<1000; i++)
{
    do_something_intensive();
}

Considerando que isso é mais amigável ao núcleo:

pthread_create(pth1,&do_something_intensive,attr,&args);
pthread_create(pth1,&do_something_else_intensive,attr,&args);

Por exemplo.

    
por 19.03.2011 / 10:43