Maison >développement back-end >Tutoriel Python >Pourquoi l'importation de Numpy limite-t-elle le multitraitement à un seul cœur ?

Pourquoi l'importation de Numpy limite-t-elle le multitraitement à un seul cœur ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-30 20:07:30260parcourir

Why Does Importing Numpy Limit Multiprocessing to a Single Core?

Impact de Numpy Import sur l'affectation de base multitraitement

Introduction :

Multiprocessing, une bibliothèque Python pour paralléliser les tâches, objectifs pour répartir le travail sur plusieurs cœurs. Cependant, les utilisateurs ont rencontré un problème où l'importation de Numpy interfère avec cette distribution, ce qui entraîne l'attribution de tous les processus de travail à un seul cœur.

Explication :

Lors de l'importation de Numpy , certains modules gourmands en CPU dans Numpy (par exemple, OpenBLAS) peuvent modifier l'affinité du cœur. Cette interférence attribue tous les processus de travail au même noyau, éliminant ainsi les avantages de la parallélisation du multitraitement.

Solution de contournement :

Pour résoudre ce problème, réinitialisez l'affinité des tâches à l'aide du code extrait : os.system("taskset -p 0xff %d" % os.getpid()). Cette commande oblige le système d'exploitation à répartir les processus de travail de manière égale sur tous les cœurs disponibles.

Considérations supplémentaires :

  • Il a été observé que cette approche n'avait aucun impact significatif sur les performances de Numpy, mais les effets peuvent varier en fonction des machines et des tâches spécifiques.

Solutions alternatives :

  • Définissez la variable d'environnement OPENBLAS_MAIN_FREE=1 avant d'exécuter le script.
  • Pendant la compilation, modifiez le fichier OpenBLAS Makefile.rule pour inclure NO_AFFINITY=1.

En appliquant ces solutions, le multitraitement peut répartir efficacement les processus de travail sur plusieurs cœurs, résoudre le problème initial du clustering de base et améliorer les performances de parallélisation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn