Quels cœurs correspondent à chaque "CPU" ci-dessous?
En supposant que nous avons Core 1, 2, 3 et 4, CPU4 et CPU5 représentent le noyau 3.
Est-ce que (disons) le CPU 6 et le CPU 7 ci-dessous représentent un cœur; le HT et le vrai noyau?
Il n'y a pas de distinction entre les deux - ils ont tous deux des interfaces matérielles physiques avec le processeur, l'interface logique est implémentée dans le matériel (voir la fiche technique du processeur Intel Core, volume 1 pour plus de détails). Fondamentalement, chaque cœur possède deux unités d'exécution distinctes, mais il partage certaines ressources communes entre elles. C'est pourquoi, dans certains cas, l'hyperthreading peut en fait réduire les performances.
Si, par exemple, le CPU 6 représente un vrai noyau et le CPU 7 un noyau HT, un thread assigné juste au CPU7 ne recevra-t-il que les ressources restantes d'un vrai noyau? (en supposant que le noyau exécute d'autres tâches)
Voir au dessus. Un thread assigné à ONLY CPU6 ou ONLY CPU7 s'exécutera exactement à la même vitesse (en supposant que le thread fait le même travail et que les autres cœurs du processeur sont inactifs). Windows connaît les processeurs compatibles HT et le planificateur de processus prend ces éléments en compte.
L'hyperthreaded est-il géré entièrement dans le processeur de sorte que les threads soient jonglés en interne? Si c'est le cas, est-ce au niveau du processeur ou du cœur? Exemple: si les CPU 6 et 7 représentent un cœur, peu importe à quel processus est affecté car le CPU attribuera les ressources appropriées à un thread en cours d'exécution?
Tous les deux. Le matériel lui-même ne planifie pas les cœurs sur lesquels exécuter les programmes, c'est le travail du système d'exploitation. Le CPU lui-même, cependant, est responsable du partage des ressources entre les unités d'exécution réelles, et Intel dicte comment vous pouvez écrire du code pour rendre cela aussi efficace que possible.
Je remarque que les processus monothreads de longue durée sont assez souvent renvoyés autour des cœurs, du moins selon le gestionnaire de tâches. Cela signifie-t-il que l'attribution d'un processus à un seul cœur améliorera légèrement les performances (en évitant les changements de contexte et les invalidations de cache, etc.)? Si oui, puis-je savoir que je n'attribue pas "juste un noyau virtuel"?
C'est un comportement normal et non, l'affecter à un seul cœur n'améliorera pas les performances. Cela étant dit, si pour une raison quelconque vous voulez vous assurer qu'un seul processus est exécuté uniquement sur un seul cœur physique, affectez-le à n'importe quel processeur logique.
La raison pour laquelle le processus "rebondit" est due au planificateur de processus. Il s'agit d'un comportement normal et vous constaterez très probablement une baisse des performances en limitant les cœurs sur lesquels le processus peut s'exécuter (quel que soit le nombre de threads qu'il possède), car le planificateur de processus doit maintenant travailler plus fort pour que tout fonctionne avec les restrictions imposées. Oui, cette pénalité peut être négligeable dans la plupart des cas, mais l'essentiel est que si vous avez une raison de le faire, ne le faites pas !