Je me demande quelle est l'accélération théorique des processeurs hyper-threadés. En supposant une parallélisation à 100% et une communication 0, deux CPU donneraient une accélération de 2. Pourquoi pas un CPU hyper-threadé?
la source
Je me demande quelle est l'accélération théorique des processeurs hyper-threadés. En supposant une parallélisation à 100% et une communication 0, deux CPU donneraient une accélération de 2. Pourquoi pas un CPU hyper-threadé?
Comme d’autres l’ont dit, cela dépend entièrement de la tâche.
Pour illustrer cela, examinons un point de repère réel:
Ceci a été pris de mon mémoire de maîtrise (non disponible en ligne pour le moment).
Cela montre l' accélération relative 1 des algorithmes de correspondance de chaînes (chaque couleur est un algorithme différent). Les algorithmes ont été exécutés sur deux processeurs quad-core Intel Xeon X5550 avec hyperthreading. En d'autres termes: il y avait un total de 8 cœurs, chacun pouvant exécuter deux threads matériels (= "hyperthreads"). Par conséquent, le test d'évaluation teste l'accélération avec jusqu'à 16 threads (qui est le nombre maximal de threads simultanés que cette configuration peut exécuter).
Deux des quatre algorithmes (bleu et gris) s'échelonnent de manière plus ou moins linéaire sur toute la plage. C'est-à-dire qu'il bénéficie de l'hyperthreading.
Deux autres algorithmes (en rouge et vert; choix malheureux pour les daltoniens) s'échelonnent linéairement jusqu'à 8 threads. Après cela, ils stagnent. Cela indique clairement que ces algorithmes ne bénéficient pas de l'hyperthreading.
La raison? Dans ce cas particulier, c'est la charge de mémoire; les deux premiers algorithmes nécessitent plus de mémoire pour le calcul et sont contraints par les performances du bus de mémoire principale. Cela signifie que lorsqu'un thread matériel attend de la mémoire, l'autre peut continuer son exécution. un cas d'utilisation privilégié pour les threads matériels.
Les autres algorithmes nécessitent moins de mémoire et n'ont pas besoin d'attendre le bus. Ils sont presque entièrement liés au calcul et n'utilisent que l'arithmétique entière (opérations sur les bits, en fait). Par conséquent, il n’ya pas de potentiel d’exécution parallèle ni d’avantage des pipelines d’instructions parallèles.
1 Un facteur d'accélération de 4 signifie que l'algorithme s'exécute quatre fois plus rapidement que s'il était exécuté avec un seul thread. Par définition, chaque algorithme exécuté sur un thread a un facteur d'accélération relatif de 1.
Le problème est que cela dépend de la tâche.
L'hyperthreading est essentiellement basé sur le principe que tous les processeurs modernes ont plus d'un problème d'exécution. Habituellement plus près d'une douzaine maintenant. Divisé en nombre entier, virgule flottante, SSE / MMX / Streaming (comme il est appelé aujourd'hui).
De plus, chaque unité a des vitesses différentes. Par exemple, une unité mathématique entière 3 cycles peut traiter quelque chose, mais une division en virgule flottante de 64 bits peut prendre 7 cycles. (Ce sont des nombres mythiques qui ne sont basés sur rien).
Une exécution hors service aide beaucoup à garder les différentes unités aussi complètes que possible.
Cependant, aucune tâche n’utilisera chaque unité d’exécution à chaque instant. Même la division des discussions ne peut aider complètement.
Ainsi, la théorie devient de faire croire qu’il existe un deuxième processeur, un autre thread pourrait s’exécuter, en utilisant les unités d’exécution disponibles non utilisées, par exemple votre transcodage audio, composé à 98% de matériel SSE / MMX, et les unités int et float étant totalement indépendantes. inactif, sauf pour certains trucs.
Pour moi, cela est plus logique dans un monde à un seul processeur, le fait de simuler un deuxième processeur permet aux threads de franchir plus facilement ce seuil avec un minimum de codage supplémentaire (le cas échéant) pour gérer ce faux processeur.
Dans le monde central 3/4/6/8, avec des processeurs au 6/8/12/16, est-ce que cela vous aide? Dunno. Autant? Dépend des tâches à accomplir.
Donc, pour répondre à vos questions, cela dépend des tâches de votre processus, des unités d’exécution qu’il utilise et, dans votre CPU, des unités d’exécution inactives / sous-utilisées et disponibles pour ce second faux processeur.
On dit que certaines «classes» de matériel informatique en tirent profit (vaguement génériquement). Mais il n'y a pas de règle absolue, et pour certaines classes, cela ralentit les choses.
la source
J'ai quelques preuves anecdotiques à ajouter à la réponse de geoffc dans la mesure où j'ai un processeur Core i7 (4 cœurs) avec hyperthreading et un peu joué avec le transcodage vidéo, tâche qui nécessite beaucoup de communication et de synchronisation mais qui en a assez parallélisme que vous pouvez effectivement charger complètement un système.
Mon expérience avec le nombre de processeurs affectés à la tâche utilisant généralement les 4 cœurs "supplémentaires" hyperthreadés équivaut à environ 1 CPU supplémentaire de puissance de traitement. Les 4 cœurs supplémentaires «hyperthreaded» ont ajouté environ la même puissance de traitement utilisable que 3 à 4 cœurs «réels».
Certes, ce n'est pas un test juste, car tous les threads d'encodage seraient probablement en concurrence pour les mêmes ressources dans les CPU, mais pour moi, cela montrait au moins une augmentation mineure de la puissance de traitement globale.
La seule façon réelle de déterminer si cela aide vraiment ou non est d'exécuter simultanément plusieurs tests de type Integer / Floating Point / SSE sur un système sur lequel l'hyperthreading est activé et désactivé, et de voir la quantité de puissance de traitement disponible dans un environnement contrôlé. environnement.
la source
Cela dépend beaucoup du processeur et de la charge de travail, comme d’autres l’ont dit.
Intel dit :
(Cela me semble un peu conservateur.)
Et il y a un autre document plus long (que je n'ai pas encore tout lu) avec plus de chiffres ici . Un point intéressant à retenir de ce document est que l'hyperthreading peut ralentir le processus pour certaines tâches.
L'architecture Bulldozer d'AMD pourrait être intéressante . Ils décrivent chaque noyau de manière efficace comme 1,5 noyau. Il s’agit en quelque sorte d’hyperthreading extrême ou de multicœurs non standard, en fonction de votre confiance en ses performances probables. Les chiffres de cet article suggèrent une accélération des commentaires comprise entre 0,5x et 1,5x.
Enfin, les performances dépendent également du système d'exploitation. Espérons que le système d’exploitation envoie les processus à de vrais CPU plutôt que les hyperthreads qui se font passer pour des CPU. Sinon, dans un système dual-core, vous pouvez avoir un processeur inactif et un coeur très occupé avec deux threads en cours d'exécution. Il semble que je me souvienne que cela s’est passé sous Windows 2000 bien que, bien entendu, tous les systèmes d’exploitation modernes en soient capables.
la source