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
Patricia Arquetteoriginal
2024-10-29 18:19:57332parcourir

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>

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!

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