Quali core corrispondono a ciascuna "CPU" di seguito?
Supponendo che abbiamo Core 1, 2, 3 e 4, CPU4 e CPU5 rappresentano il core 3.
(Diciamo) CPU 6 e CPU 7 sotto rappresentano un core; l'HT e il vero core?
Non c'è distinzione tra i due: entrambi hanno interfacce hardware fisiche con la CPU, l'interfaccia logica è implementata nell'hardware (consultare la scheda tecnica del processore Intel Core, Volume 1 per maggiori dettagli). Fondamentalmente, ogni core ha due unità di esecuzione separate, ma condivide alcune risorse comuni tra loro. Questo è il motivo per cui in alcuni casi l'hyperthreading può effettivamente ridurre le prestazioni.
Se, ad esempio, CPU 6 rappresenta un core reale e CPU 7 un core HT, un thread assegnato solo a CPU7 otterrà solo le risorse rimanenti di un core reale? (supponendo che il core stia eseguendo altre attività)
Vedi sopra. Un thread assegnato a SOLO CPU6 o SOLO CPU7 verrà eseguito alla stessa velocità esatta (supponendo che il thread faccia lo stesso lavoro e che gli altri core nel processore siano inattivi). Windows conosce i processori abilitati per HT e lo scheduler dei processi tiene conto di questi aspetti.
L'hyperthread è gestito interamente all'interno del processore in modo tale che i thread siano manipolati internamente? In tal caso, è nell'ambito della CPU o dell'ambito principale? Esempio: se le CPU 6 e 7 rappresentano un core, non importa a quale processo è assegnato perché la CPU assegnerà le risorse appropriate a un thread in esecuzione?
Tutti e due. L'hardware vero e proprio non pianifica su quali core eseguire i programmi, questo è il lavoro del sistema operativo. La CPU stessa, tuttavia, è responsabile della condivisione delle risorse tra le unità di esecuzione effettive e Intel impone come è possibile scrivere codice per renderlo il più efficiente possibile.
Ho notato che i processi a thread singolo di lunga durata vengono rimbalzati un po 'attorno ai core, almeno secondo il task manager. Questo significa che l'assegnazione di un processo a un singolo core migliorerà leggermente le prestazioni (evitando cambi di contesto e invalidazioni della cache, ecc.)? In tal caso, posso sapere che non sto assegnando a "solo un core virtuale"?
Questo è un comportamento normale e no, assegnarlo a un singolo core non migliorerà le prestazioni. Detto questo, se per qualche motivo vuoi assicurarti che un singolo processo sia eseguito solo su un singolo core fisico, assegnalo a qualsiasi singolo processore logico.
Il motivo per cui il processo "rimbalza" è dovuto all'utilità di pianificazione del processo. Questo è un comportamento normale e molto probabilmente sperimenterai prestazioni ridotte limitando su quali core può essere eseguito il processo (indipendentemente da quanti thread ha), poiché lo scheduler del processo ora deve lavorare di più per far funzionare tutto con le restrizioni imposte. Sì, questa penalità può essere trascurabile nella maggior parte dei casi, ma la linea di fondo è a meno che tu non abbia un motivo per farlo, non farlo !