Maison > développement back-end > Tutoriel Python > Pourquoi le multitraitement se bloque-t-il sur un seul cœur lorsque NumPy est importé ?

Pourquoi le multitraitement se bloque-t-il sur un seul cœur lorsque NumPy est importé ?

Patricia Arquette
Libérer: 2024-10-29 18:19:57
original
252 Les gens l'ont consulté

Why Does Multiprocessing Stall on a Single Core When NumPy Is Imported?

Pourquoi le multitraitement se bloque sur un seul cœur lorsque NumPy est importé

Lorsque vous essayez de paralléliser une boucle gourmande en CPU à l'aide de joblib, vous pouvez rencontrer un problème où tous les processus de travail sont affectés au même noyau, ce qui n'entraîne aucun gain de performances. Cela se produit en raison de certains modules Python, y compris NumPy, qui manipulent l'affinité de base lors de l'importation.

Cause fondamentale :

Liens NumPy vers les bibliothèques OpenBLAS multithread, ce qui interfère avec l'affinité de base paramètres.

Solution :

Pour résoudre ce problème, réinitialisez l'affinité de la tâche à l'aide de la commande suivante :

<code class="python">os.system("taskset -p 0xff %d" % os.getpid())</code>
Copier après la connexion

Placez cette ligne après l'importation le module où le problème se pose. Cela force le processus à s'exécuter sur tous les cœurs disponibles.

Solutions alternatives :

  • Variable d'environnement : Définissez OPENBLAS_MAIN_FREE (ou GOTOBLAS_MAIN_FREE ) variable d'environnement sur 1 au moment de l'exécution pour désactiver le comportement de réinitialisation de l'affinité du processeur d'OpenBLAS.
  • Modification au moment de la construction : Désactivez la réinitialisation de l'affinité du processeur de manière permanente en modifiant le Makefile.rule pour inclure la ligne NO_AFFINITY=1 lors de la compilation d'OpenBLAS à partir des sources.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal