首页 >后端开发 >Python教程 >为什么导入 NumPy 后单核上的多处理会停止?

为什么导入 NumPy 后单核上的多处理会停止?

Patricia Arquette
Patricia Arquette原创
2024-10-29 18:19:57258浏览

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

为什么导入 NumPy 时多处理会在单核上停止

当尝试使用 joblib 并行化 CPU 密集型循环时,您可能会遇到所有工作进程都分配给同一核心的问题,导致没有性能提升。出现这种情况是由于某些 Python 模块(包括 NumPy)在导入时操纵核心关联性。

根本原因:

NumPy 链接到多线程 OpenBLAS 库,这会干扰核心关联性

解决方案:

要解决此问题,请使用以下命令重置任务亲和性:

<code class="python">os.system("taskset -p 0xff %d" % os.getpid())</code>

导入后放置此行出现问题的模块。这会强制进程在所有可用核心上运行。

替代解决方案:

  • 环境变量: 设置 OPENBLAS_MAIN_FREE(或 GOTOBLAS_MAIN_FREE) ) 环境变量在运行时设置为 1,以禁用 OpenBLAS 的 CPU 亲和力重置行为。
  • 构建时修改: 通过修改 Makefile.rule 以包含永久禁用 CPU 亲和力重置从源代码编译 OpenBLAS 时的行 NO_AFFINITY=1。

以上是为什么导入 NumPy 后单核上的多处理会停止?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn