Which cores correspond to each "CPU" below?
Supondo que temos o Core 1, 2, 3 e 4, o CPU4 e o CPU5 representam o núcleo 3.
Does (say) CPU 6 and CPU 7 below represent one core; the HT and the real core?
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 (veja o Folha de dados do processador Intel Core, Volume 1 para mais detalhes). Basicamente, cada núcleo tem duas unidades de execução separadas, mas compartilha alguns recursos comuns entre elas. É por isso que, em certos casos, o hyperthreading pode reduzir o desempenho.
If, for example, CPU 6 represents a real core and CPU 7 an HT core, will a thread assigned just to just CPU7 get only the left over resources of a real core? (assuming the core is running other tasks)
Veja acima. Um encadeamento designado para SOMENTE CPU6 ou SOMENTE CPU7 será executado na mesma velocidade exata (supondo que o encadeamento faça o mesmo trabalho e os outros núcleos no processador fiquem inativos). O Windows sabe sobre processadores habilitados para HT, e o agendador de processos leva isso em consideração.
Is the hyperthreaded managed entirely within the processor such that threads are juggled internally? If so, is that at the CPU scope or the core scope? Example: If CPU 6 and 7 represent one core, does it not matter which a process is assigned to because the CPU will assign resources as appropriate to a running thread?
Ambos. O hardware em si não não agenda em quais núcleos executar programas, 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 tornar isso o mais eficiente possível.
I notice that long-running single-threaded processes are bounced around cores quite a bit, at least according to task manager. Does this mean that assigning a process to a single core will improve performance by a little bit (by avoiding context switches and cache invalidations, etc.)? If so, can I know I am not assigning to "just a virtual core"?
Esse é um comportamento normal e não, atribuí-lo a um único núcleo não melhora 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 um único processador lógico.
A razão pela qual o processo "gira em torno" é devido ao agendador de processos. Esse é um comportamento normal, e você provavelmente experimentará um desempenho reduzido limitando em que núcleos o processo pode ser executado (independentemente de quantos segmentos ele tenha), já que o agendador de processos agora precisa trabalhar mais para que tudo funcione com as restrições impostas. Sim, essa penalidade pode ser insignificante na maioria dos casos, mas o resultado final é a menos que você tenha uma razão para fazer isso, não !