8 threads logiques à 4 cœurs à un maximum de 4 fois plus vite en parallèle?
Je suis un logiciel d'analyse comparative qui exécute 4x plus rapide sur Intel 2670QM alors ma version de série à l'aide de tous les 8 de ma "logique" threads. J'aimerais que certains commentaires de la communauté sur ma perception de l'analyse comparative résultats.
Quand je suis à l'aide de 4 Fils sur 4 cœurs-je obtenir une vitesse de 4x, l'ensemble de l'algorithme est exécuté en parallèle. Cela semble logique, pour moi, depuis 'Amdhals la loi", prédit-il. Gestionnaire des tâches de Windows me dit que je suis en utilisant 50% de la CPU.
Cependant, si j'exécute le même logiciel sur tous les 8 threads, je reçois, une fois de plus, une vitesse de 4x et pas une vitesse de 8x.
Si j'ai bien compris ce correctement: mon CPU a 4 cœurs avec une Fréquence de 2.2 GHZ individuellement, mais la Fréquence est divisée en 1.1 GHZ lorsqu'il est appliqué à 8 'logique' de threads et de la même façon suivante pour le reste des composants tels que la mémoire cache? Si cela est vrai, alors pourquoi ne le gestionnaire des tâches de prétendre qu'à 50% de mon CPU est utilisé?
#define NumberOfFiles 8
...
char startLetter ='a';
#pragma omp parallel for shared(startLetter)
for(int f=0; f<NumberOfFiles; f++){
...
}
Je ne suis pas y compris le temps à l'aide de disk I/O. je suis seulement intéressé dans le temps un STL appel prend STL(tri) de ne pas le disque I/O.
threads == cores
. Vos résultats dépendra également de la capacité de vos algorithmes de traitement lié ou I/O bound. En bref, il n'est pas aussi simple que vous le pensez.Sur certains matériels, vous avez plusieurs instances de certaines unités de processeurs par thread, mais pas tous (par exemple, une seule FPU). En fonction du matériel, bien que le "fils" servira peu plus que de faire des changements de contexte entre un plus grand ensemble de processus exécutables beaucoup moins cher (vous n'avez pas à copier tout sur l'état de chaque interrupteur).
OriginalL'auteur Cisum inas | 2012-05-01
Vous devez vous connecter pour publier un commentaire.
Un i7-2670QM processeur 4 cœurs. Mais il peut s'exécuter à 8 threads en parallèle.
Cela signifie qu'il a seulement 4 unités de traitement (Cœurs) mais a l'appui en matériel informatique pour exécuter 8 threads en parallèle. Cela signifie qu'un maximum de quatre exécution des travaux sur les Cœurs, si l'un des emplois de décrochage en raison par exemple d'accès à la mémoire d'un autre thread peut très vite commencer à exécuter sur la gratuit de Base avec très peu de peine. Lire plus sur l'Hyper threading. En Réalité, il ya quelques-uns des scénarios où l'hyper threading donne un grand gain de performance. De plus les processeurs modernes gérer l'hyper threading mieux que les processeurs plus anciens.
Votre test a montré qu'il était lié de l'UC, c'est à dire Il y a peu de stands dans le pipeline qui aurait donné l'Hyper Threading un avantage. 50% de CPU est correct a les 4 cœurs sont le travail et le 4 ne sont pas à faire quoi que ce soit. Tour de l'hyper threading dans le BIOS et vous verrez à 100% de CPU.
Il pourrait être appelé "technologie intel hyper-threading" dans le BIOS. Vous ne savez pas si vous pouvez le changer sur le Dell 1702x (rien trouvé sur le site de Dell)
OriginalL'auteur Nys
C'est un résumé rapide de l'Hyperthreading/HyperTransport
Fil de commutation est lente, ayant pour arrêter l'exécution, de la copie d'un tas de valeurs dans la mémoire, de la copie d'un tas de valeurs de la mémoire dans l'UC, puis les choses commencent à aller de nouveau avec le nouveau fil.
C'est là que votre 4 cœurs virtuels venir. Vous disposez de 4 cœurs, qu'est-ce, mais ce que l'hyperthreading permet au PROCESSEUR de faire est d'avoir 2 fils sur un seul cœur.
1 seul thread peut s'exécuter à la fois, cependant, quand 1 thread doit cesser de faire un accès à la mémoire, l'accès au disque ou autre chose qui va prendre un certain temps, il peut passer dans l'autre thread et l'exécuter pour un peu. Sur les vieux processeurs, ils ont essentiellement eu un peu de sommeil en ce moment.
De sorte que votre quad core dispose de 4 cœurs, ce qui peut faire 1 chose à la fois, mais peut avoir un 2eme emploi en veille dès qu'ils doivent attendre sur une autre partie de l'ordinateur.
Si votre tâche est beaucoup de l'utilisation de la mémoire et beaucoup de l'utilisation du PROCESSEUR, vous devriez voir une légère diminution du temps d'exécution total, mais si vous y êtes presque entièrement en CPU, il sera préférable de coller avec seulement 4 threads
OriginalL'auteur Andrew Brock
L'élément d'information important de comprendre ici est la différence entre le physique et le fil logique.
Si vous avez 4 cœurs physiques sur votre CPU, cela signifie que vous avez les ressources physiques pour exécuter 4 distincte thread d'exécution en parallèle. Donc, si votre fils n'ont pas de contention de données, vous pouvez normalement de mesurer un x4 augmentation de la performance par rapport à la vitesse de la thread unique.
Je suis aussi en supposant que le système d'exploitation (ou de vous :)) définit l'affinité de thread correctement, de sorte que chaque thread est exécuté sur chaque noyau physique.
Lorsque vous activez HT (Hyper-Threading) sur votre PROCESSEUR, le core fréquence n'est pas modifiée. 🙂
Ce qui se passe, c'est que partie de la hw pipeline (à l'intérieur de la base et autour (non nominal, cache, etc)) est dupliqué, mais une partie est encore partagé entre les threads logiques.
C'est la raison pour laquelle vous ne mesurez pas un x8 augmentation de la performance. Dans mon expérience, en permettant à tous les noyaux logiques, vous pouvez obtenir un x1.5 - x1.7 amélioration de la performance par physique de base, selon le code, vous êtes en cours d'exécution, l'utilisation du cache (rappelez-vous que le cache L1 est partagé entre deux logiques carottes/1 physique de base, par exemple), le fil d'affinité, et ainsi de suite et ainsi de suite.
Espérons que cette aide.
Honnêtement, je ne suis pas, désolé. Il est très difficile de deviner ce genre d'amélioration parce que, comme je l'ai dit, il y a beaucoup de facteurs qui influent sur la performance finale. L'analyse comparative est toujours la meilleure approche. (mais assurez-vous de permettre à l'HT dans le BIOS comme Nys souvient)
OriginalL'auteur sergico
Certains nombres réels:
CPU-intensive tâche sur mon i7, (ajouter des numéros de 1-1000000000 dans un int var, 16 fois), en moyenne sur 8 épreuves:
Résumé, threads/tiques:
Noter que dans le 'l'aide de X threads ligne dans les rapports ci-dessous, X est plus grand que le nombre de threads disponibles pour accomplir les tâches - un thread soumet les tâches et l'attend sur un compte à rebours-loquet evnet pour leur achèvement - il aucun processus de la CPU des tâches lourdes et n'a pas utilisé de CPU.
J'imagine que oui, oui. Le lien "ajoutez-les numéros d'CPU-intensive tâche n'est pas sale beaucoup de cache, donc je suppose que ces chiffres sont un peu "artificielle".
OriginalL'auteur Martin James
HT est appelé SMT (Simultaneous MultiThreading) ou HTT (Technologie HyperThreading) dans la plupart des Bios. L'efficacité de HT dépend de la dite calculer-à-extraction du ratio qui est de savoir comment de nombreux en-core (ou registre/mémoire cache) les opérations de votre code avant de l'extrait à partir de ou les points de vente de la lenteur de la mémoire principale ou I/O mémoire. Pour le cache très efficace et le CPU codes de la HT donne presque pas de notable augmentation des performances. Pour plus lié à la mémoire des codes de l'HT peut vraiment bénéficier de l'exécution en raison de la soi-disant "temps de latence se cacher". C'est pourquoi la plupart des non-serveurs x86 Processeurs 4 (par exemple, IBM POWER7) à 8 (par exemple, UltraSPARC T4) matériel de threads par noyau. Ces Processeurs sont généralement utilisés dans la base de données transactionnelle et de systèmes de traitement où de nombreux concomitants liés à la mémoire demandes sont traitées à la fois.
Par le chemin, la Amdhal loi stipule que la limite supérieure de la parallèle speedup est un cours de la série fraction du code. Habituellement, la série fraction augmente avec le nombre d'éléments de traitement si il y a (probablement caché dans le moteur d'exécution) de la communication ou de l'autre de la synchronisation entre les threads, bien que, parfois, des effets de cache peut conduire à superlinear speedup et parfois cache bousiller peut réduire les performances de façon drastique.
OriginalL'auteur Hristo Iliev