Question

J'utilise une simulation écrite en Python / Numpy / Cython. Étant donné que j'ai besoin de faire une moyenne sur de nombreux exécutions de simulation, j'utilise le module de multiprocessement pour exécuter toutes les exécutions de simulation individuelles par lots.

Au bureau, j'ai un poste de travail i7-920 avec ht. À la maison, j'ai un i5-560 sans. J'ai pensé que je pouvais exécuter deux fois plus d'instances de la simulation dans chaque lot du bureau et avoir réduit mon temps de fonctionnement en deux. Étonnamment, le temps d'exécution de chaque instance individuelle a été doublé par rapport au moment où il faut mon poste de travail à domicile. Le fait que cela prenne 3 instances de simulation en parallèle à la maison prendrait, disons 8 minutes, tandis que l'exécution de 6 instances au bureau prennent environ 15 minutes. En utilisant 'cat / proc / cpuinfo' J'ai vérifié 'Silets' = 8 et 'CPU CORES' = 4, donc HT est activé.

Je ne suis au courant d'aucune loi sur la "conservation de l'exécution totale" (bien que du point de vue scientifique, cela puisse être très intéressant :)), et sauter quelqu'un ici pourrait éclairer cette énigme.

Était-ce utile?

La solution

Peut-être que les commutateurs de contexte produisent plus de frais généraux, causés par 6 massivement Calcul des processus et seulement 4 cœurs réels. Si les processus sont en concurrence pour les châtiments CPU, ils peuvent utiliser inefficace les caches CPU.

Si vous n'activez que 4 au lieu de 6 Core, quel est le résultat?

Autres conseils

L'hyperthreading peut être bon pour certains types de charge de travail. Les calculs numériques intenses n'en font pas partie - lorsque vous voulez faire un chiffre, vous feriez mieux de désactiver l'hyperthreading. Ce que Hyperthreading en donne un est un "commutateur de contexte gratuit" entre les tâches, mais le CPU n'a que tant d'unités d'exécution.

Dans ce cas, cela peut aggraver les choses, car le système d'exploitation ne peut pas savoir quels processus fonctionnent sur des cœurs séparés (où ils obtiendraient des performances complètes), et lesquelles sont sur le même noyau, juste sur différents "hyperthreads".

(En fait, je parie que le noyau Linux peut fournir un moyen pour que l'un soit un bon contrôle à ce sujet, mais le module multiprocesseur de Python lancera simplement des processus supplémentaires qui utiliseront l'allocation de ressources par défaut).

Bottomline: éteignez HT si vous le pouvez - au moins vous utiliserez pleinement les 4 cœurs.

Les autres vous ont à peu près donné un aperçu du problème, je veux juste contribuer en reliant cet article qui explique un peu plus sur le fonctionnement de HT et quelles sont les implications pour les performances d'un programme multithread: http://software.intel.com/en-us/articles/performance-insights-to-intel-hyper-threading-technology/

Avec mon poste de travail HP (16 cœurs / CPU, l'utilisation de l'hyper-threading s'accompagne de 32 processeurs), de la transformation de l'hyper-threading sur un python même cassé lorsque j'exécute la simulation numérique, le code d'erreur est 0x000005 Cela m'a perplexe jusqu'à ce que je devienne HT Off, et la simulation fonctionne bien! Peut-être pourriez-vous vérifier et comparer l'exécution pour les deux HT est allumée et désactivée

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