web-dev-qa-db-fra.com

Impact de la performance de l'hyper-threading

Je viens de lire un article sur Heise Online (regardez la table, le reste est l'allemand) qui a prétendu que l'hyper-threading ralentit des programmes à filetage unique bien qu'ils n'utilisent pas le deuxième fil d'un coeur. C'est à dire. Si vous désactivez HT dans le BIOS, l'application à une seule filetage fonctionne légèrement plus rapidement.

Est-ce vrai ou est-ce une erreur de mesure? Quelqu'un a-t-il des sources sur des repères qui affirment la même chose?

6
Bonita Montero

Oui et ça devrait être évident. Lorsque vous activez HT vous annoncez deux fois plus de noyaux qu'il y en a.

Ceci est conçu pour laisser davantage de parallélisation sur la base que la plupart des programmes ne sont pas suffisamment multi-filetés. Toutefois, si vous êtes pleinement multi-threads un programme, vous surchargez des ressources et une perte de performance est juste en raison de la surcharge supplémentaire par fil. Cependant, il peut s'agir, avec une application que de réussir à utiliser 100% de CPU sur un nombre quelconque de cœurs et de processeurs, permettant à HT a entraîné une chute de performance d'environ 2 à 3%.

Maintenant, dans le cas d'un programme isolé à une seule-filetage, on dirait que cela n'aurait pas d'importance car le programme lui-même ne peut pas abuser des ressources, mais rappelez-vous que le système d'exploitation pense également qu'il existe des cœurs supplémentaires et qui peuvent surmonter des ressources. Même s'il y a toujours des cœurs non utilisés, on peut mesurer les frais généraux causés par le planificateur qui ne placent pas de manière optimale le fil et verrouillez-le à un seul véritable noyau.

Ces observations sont basées sur une décennie de développement de logiciels en temps réel. Il existe clairement une différence observable, bien qu'une très petite, lorsque l'on essaie de maximiser les performances d'un système.

2
Itai

Pas de points de repère, mais c'est probablement vrai, basé sur ce qui suit:

De l'article Wikipedia sur "Hyper-threading":

... toutefois, lors de la gestion de deux programmes qui nécessitent une attention approfondie du processeur, il peut en réalité l'évidence que l'un ou les deux programmes ralentit légèrement lorsque la technologie hyper-threading est allumée. Ceci est dû au système de replise du Pentium 4 attachant des ressources d'exécution précieuses, égalisation des ressources du processeur entre les deux programmes, qui ajoute une quantité variation de temps d'exécution.

C'est quelque chose qui ne s'applique pas lorsque SMT est désactivé - le système d'exploitation distribue ensuite des threads parmi les noyaux et non durs HardwareReads.

Les processeurs modernes Intel (et AMD) font " exécution spéculative " où ils vont réellement chercher et pré-exécuter des instructions avant le pointeur d'instructions actuel, d'avoir des résultats prêts lorsque l'exécution réelle est accrochée.

Des choses comme des branches et des interruptions non attendues font que le CPU jette sa spéculation et doit recommencer, et il semble que SMT introduit plus de situations où cela peut se produire. Pour les "tâches droites" qui ne branchent pas ou ne traitent pas de nombreuses conditions (c'est-à-dire des tâches GPU-ISH), il offre probablement un avantage.

0
LawrenceC

Lorsque vous avez activé HT, la CPU se sépare de deux processeurs logiques et les deux processeurs sont considérablement plus lentes que le noyau unique qu'elles provenaient, mais la puissance combinée est supérieure à 100%. Dans le Pentium 4 jours, vous pourriez diviser un noyau de la CPU en deux noyaux logiques d'environ 55% aussi vite. Avec le filetage hyper ajouté à l'architecture de base, il est devenu mieux que 55%.

Le problème est que le système d'exploitation a tendance à traiter les noyaux logiques comme cœurs physiques, une tâche de priorité élevée peut donc fonctionner à côté d'une tâche de priorité faible dans le même noyau de la CPU. Maintenant, les threads ou les tâches reçoivent une attention égale du processeur, même si elles ne devraient pas être dues à la différence de priorité. Lorsque vous exécutez un indice de référence, le système d'exploitation peut planifier des tâches prioritaires faibles dans les noyaux logiques et ralentir le programme de référence vers le bas. Bien sûr, lorsque des noyaux logiques deviennent inactifs, HT est efficacement désactivé et le noyau restant retourne à 100% de vitesse.

Imaginez un serveur occupé avec un économiseur d'écran intensif de CPU. L'économiseur d'écran s'allume et même s'il est fixé à la basse priorité, il finit par diviser un noyau de la CPU à deux parties de 65% aussi rapidement. Maintenant, le serveur comporte seulement 65% d'un noyau CPU disponible.

0
Alex Cannon