Question

Je suis en cours d'exécution des trucs assez de processeur intensive sur mon PC, et remarquez assez étrange mon apparence d'utilisation du processeur. Mon PC est un quad-core i7-870, qui a soi-disant huit cœurs virtuels.
J'utilise la bibliothèque parallèle dans 4 .NET Tâche, alors attendez-vous tous les cœurs à être bien utilisés, mais je obtenir de l'information comme celui-ci de Process Monitor:

utilisation du processeur

Cores 6 et 8 se toucher à peine, et à part une brève rafale, 4 est pas non plus.
Est-ce que je devrais attendre?

Était-ce utile?

La solution

Pour la plupart, oui, je pense que cela semble raisonnable. Gardez à l'esprit que hyperthreading vraiment juste fakes deux noyaux. Chaque noyau physique est donnée à deux interfaces, il peut donc lire deux flux d'instructions en parallèle. Mais ils partagent toujours les mêmes unités d'exécution. Alors, quand un noyau HT est occupé, les unités d'exécution sont prises, et ainsi son noyau « double » sera en mesure de faire très peu de travail.

Cela semble être ce que vous voyez sur les deux premiers noyaux (le second en particulier marques très évident)

En dehors de cela, vous aurez presque jamais être en mesure d'obtenir une utilisation parfaite du processeur. Parfois, un noyau a juste décrochage en attente de la mémoire. Parfois, il est l'exécution d'une instruction non coûteuse en pipeline, bloquant efficacement les unités d'exécution sur ce noyau physique pour peut-être des dizaines ou des centaines même de cycles.

Et parfois, les dépendances entre instructions pourrait simplement signifier que vous ne le faites pas Vous quoi que ce soit pour un ou plusieurs noyaux à exécuter.

En dehors de cela, vous voyez 8 graphiques, et vous avez seulement 4 cœurs, donc oui, bien sûr hyperthreading travaille . ;)

Autres conseils

En bref

  1. oui il fonctionne (bien sûr)
  2. Profil it
  3. YMMV - hyperthreading est pas multi-carottage et en tant que telle dépend fortement du type de charge d'instructions et cache la saturation, etc. Ne sachant pas quoi que ce soit au sujet de votre code (sauf qu'il est C #, vraiment), vous pouvez chercher des collections de « petits des objets qui pourraient être transformés en System.Array droit de struct (un List<> générique utilisera également un tableau interne et optimiser pour les types d'éléments struct)

0,02 $

Cela dépend tout votre implémentation de l'algorithme. TPL utilisera bon nombre de cœurs en fonction de la dépendance des données dans votre algorithme

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top