Quais núcleos correspondem a cada "CPU" abaixo?
Supondo que temos os Núcleos 1, 2, 3 e 4, CPU4 e CPU5 representam o núcleo 3.
(Digamos) a CPU 6 e a CPU 7 abaixo representam um núcleo; o HT e o núcleo real?
Não há distinção entre os dois - ambos têm interfaces físicas de hardware para a CPU, a interface lógica é implementada em hardware (consulte a folha de dados do processador Intel Core, volume 1 para obter mais detalhes). Basicamente, cada núcleo tem duas unidades de execução separadas, mas compartilha alguns recursos comuns entre eles. É por isso que, em certos casos, o hyperthreading pode realmente reduzir o desempenho.
Se, por exemplo, a CPU 6 representa um núcleo real e a CPU 7 um núcleo HT, um encadeamento atribuído apenas a CPU7 terá apenas o que resta dos recursos de um núcleo real? (supondo que o núcleo esteja executando outras tarefas)
Veja acima. Um thread atribuído a ONLY CPU6 ou ONLY CPU7 será executado exatamente na mesma velocidade (assumindo que o thread faça o mesmo trabalho e os outros núcleos do processador estejam ociosos). O Windows conhece os processadores habilitados para HT e o agendador de processos leva essas coisas em consideração.
O hyperthread é gerenciado inteiramente dentro do processador, de modo que os threads sejam manipulados internamente? Em caso afirmativo, isso está no escopo da CPU ou no escopo principal? Exemplo: Se a CPU 6 e 7 representam um núcleo, não importa a que processo está atribuído, porque a CPU atribuirá recursos conforme apropriado a um encadeamento em execução?
Ambos. O hardware real em si não agenda em quais núcleos os programas devem ser executados; esse é o trabalho do sistema operacional. A própria CPU, no entanto, é responsável pelo compartilhamento de recursos entre as unidades de execução reais, e a Intel determina como você pode escrever código para torná-lo o mais eficiente possível.
Percebo que os processos single-threaded de execução longa são refletidos bastante nos núcleos, pelo menos de acordo com o gerenciador de tarefas. Isso significa que atribuir um processo a um único núcleo melhorará um pouco o desempenho (evitando alternâncias de contexto e invalidações de cache, etc.)? Nesse caso, posso saber que não estou atribuindo a "apenas um núcleo virtual"?
Esse é um comportamento normal e, não, atribuí-lo a um único núcleo não melhorará o desempenho. Dito isto, se por algum motivo você quiser garantir que um único processo seja executado apenas em um único núcleo físico, atribua-o a qualquer processador lógico.
A razão pela qual o processo "volta" é devido ao agendador do processo. Esse é um comportamento normal, e você provavelmente terá um desempenho reduzido ao limitar em quais núcleos o processo pode executar (independentemente de quantos threads ele tenha), já que o agendador de processos agora precisa trabalhar mais para fazer tudo funcionar com as restrições impostas. Sim, essa penalidade pode ser insignificante na maioria dos casos, mas a linha inferior é, a menos que você tenha um motivo para fazer isso, não !