2013-08-14 6 views
1

J'ai été incapable de trouver une bonne explication de la raison pour laquelle un exécutable multithread voudrait définir le ProcessorAffinity par thread. Pour moi, il semble que cela tente de remplacer le CLR/système d'exploitation; quelque chose que je ne pense pas être assez intelligent pour le faire. Pourquoi devrais-je participer à la définition de l'attribut ProcessorAffinity pour les threads sur un système multicœur?Pourquoi définir l'attribut ProcessorAffinity pour un thread?

+2

Mise en cache du processeur – Paparazzi

+1

Licence par processeur. – Steve

+1

Est-ce que quelqu'un a vu des nombres qui montrent que le paramètre ProcessorAffinity a globalement des avantages? –

Répondre

2

Si vous indiquez à un thread de s'exécuter avec une affinité non définie, il sera autorisé à s'exécuter sur n'importe quel core. Cela signifie cependant que quand un noyau est occupé, il va déplacer votre fil sur un noyau différent, cet arrêt et le mouvement possible est appelé Context Switch. Dans la plupart des cas, vous ne le remarquerez jamais, cependant, dans des cas comme les consoles de jeu, les changements de contexte peuvent être un processus étonnamment coûteux.

Dans ces cas, il pourrait être préférable de déplacer quelque chose comme la boucle audio et la boucle vidéo sur des cœurs "privés" où ils sont verrouillés sur ce noyau, et ne changeront pas, donnant des optimisations possibles.

1

Seuls des types d'applications très spécifiques bénéficient vraiment de l'utilisation de l'affinité manuelle, principalement des applications avec des processus parallèles à long terme. Je pourrais imaginer qu'il soit utilisé dans des scanners de virus, ou des applications mathématiques lourdes comme Seti @ Home.

Un autre avantage théorique est que le processeur peut utiliser son cache si vous avez de petits processus qui s'exécutent plusieurs fois. Mais encore une fois, en réalité, vous auriez besoin d'un type d'application vraiment spécifique pour faire la différence.

Je n'ai jamais eu le besoin de m'en préoccuper. Habituellement, le système d'exploitation sait le mieux.

0

Mise en cache du processeur.

Et peut l'utiliser pour étrangler.
Peut avoir un processus de priorité inférieure que vous ne voulez pas dominer.
Sur une machine à 4 processeurs, il est possible de la limiter à un processeur.
L'accélération peut également être effectuée avec la priorité de filetage.
Ne l'utiliserait que si le processus bénéficiait de la mise en cache.
Je l'aime parce que dans le gestionnaire de tâches, je peux le voir marteler un processeur.

Questions connexes