Só estou curioso para saber por que o agendador move constantemente um aplicativo entre CPUs, em vez de mantê-lo em um. Parece um pouco tolo ter 4 núcleos a 25% em vez de um a 100%.
Tem a ver com calor, ou é mais eficiente de alguma forma? Outros SOs fazem isso de maneira diferente?
Informações ou links para informações detalhadas seriam ótimas. (Não foi possível encontrar muito.)
Atualizar:
Por "espalhar", não quero dizer que ele seja executado em vários processadores de uma só vez, mas esteja sendo movido de um para outro várias vezes por segundo, fazendo com que o efeito pareça espalhado.
windows
performance
cpu
Macke
fonte
fonte
Respostas:
Eu acho
wierob
que descreveu o assunto razoavelmente bem.Aqui está um artigo mais antigo discutindo
processor affinity
configurações com um QX6800 de quatro núcleos .(o link aponta para a segunda página desse artigo).
Se você não força a afinidade do processo a um núcleo, perde desempenho ?
o próprio design do processador também considera essas coisas.
possui um cache de 8 MB
L3
compartilhado em seus 4 núcleos .Note-se que, embora você tenha optado por executar apenas esse processo de thread único no sistema, o próprio sistema operacional terá várias outras tarefas em execução que também precisam ser agendadas. O planejador equilibra toda essa atividade no conjunto de processadores disponíveis (ou núcleos).
No futuro, com a arquitetura Nehalem e o NUMA , os
processadores em vários soquetes também poderão lidar melhor com o thrash de acesso.
Aqui está uma rápida imagem de uma página da ArsTechnica no NUMA .
Se Nehalem e
i7
lhe interessar, tenho mais alguns links nesta resposta .fonte
O agendador apenas executa o próximo encadeamento que está pronto para execução em um núcleo / CPU "livre".
Você pode atribuir um processo a uma CPU específica através do gerenciador de tarefas do Windows.
Ter 4 núcleos a 25% significa que 4 threads são executados simultaneamente. Enquanto um núcleo em x% significa que apenas um segmento é executado. Portanto, o primeiro é mais eficiente em alguns casos.
Porém, durante sua execução, o cache da CPU é preenchido com dados acessados pelo encadeamento. Portanto, se o encadeamento for executado em outra CPU, ocorrerá mais falhas de cache, que são caras, pois os dados não estão no cache dessa CPU.
O que o seu tópico faz? Se o encadeamento "dormir" por um período muito curto, o núcleo em que foi executado anteriormente poderá ser ocupado por outra ameaça e, portanto, seu encadeamento será executado no próximo núcleo disponível. O que acontece se você especificar apenas um núcleo para ser usado pelo seu processo (por exemplo, um gerenciador de tarefas)?
fonte
Não é. Um thread pode ser executado apenas em um processador. No entanto, alguns processos têm vários threads, que podem ser espalhados.
O raciocínio, acredite ou não, nunca considerou como é. O sistema tenta espalhar threads porque não tem como saber quando alguém irá disparar.
fonte
O sistema operacional migra o encadeamento pelos núcleos da CPU (rapidamente, várias vezes por segundo). É mais eficiente executá-lo no mesmo núcleo o tempo todo. Isso pode ser imposto pelo item de menu de contexto "Definir afinidade" no Gerenciador de tarefas.
Observe que geralmente (uso doméstico típico) a diferença está no intervalo de poucas porcentagens.
Os "4 núcleos cada um com 25% de uso" significam, como o Gerenciador de Tarefas mostra o uso médio, que cada núcleo foi totalmente utilizado um quarto de tempo e liberou o restante do tempo.
A descrição é para Windows, mas também é semelhante em outros sistemas operacionais.
fonte
Se alguém ainda está lendo isso, eu também notei isso e realizei alguns testes para ver se não é apenas um acaso. Acontece que não é! Acredito que espalhar um único thread por todos os núcleos seja mais eficiente por vários motivos:
Além disso, devido às duas observações acima, acredito que o Turbo Boost e a IDA são ineficazes. Eles podem ser úteis em sistemas operacionais mais antigos, mas o Linux e o Windows 7 espalham tudo por todos os núcleos com bastante eficiência. Portanto, um Core 2 Quad q9100 a 2,26 GHz quase (sempre há exceções :-) sempre será mais rápido que um Core 2 Duo X9100 a 3,06 GHz, e raramente o vi usar o IDA (basicamente o antecessor do Turbo boost, aumenta a frequência em um ou dois núcleos apenas para aplicativos de thread único).
fonte