繁体   English   中英

Python 只使用一个核心

[英]Python only uses one core

我有一个 python 脚本,它处理带有来自 md4 文件的传感器数据的文件,并将它们绘制在图像中。 因此,我使用 libs asammdfmatplotlib - 它们依赖于numpy

在我开发脚本的 Windows 主计算机上,一切正常 - 使用了所有线程并且脚本的速度很好。 具有多个线程的 Windows cpu 视图 但是在脚本也应该运行以处理更多文件的其他设备上,脚本只使用一个内核和多个线程,而在 Ubuntu 16.04 上运行时使用自己编译的 python 3.7.0:

linux htop 只有一个内核和多个线程

我搜索了很多并尝试了所有建议的内容 - 其中一些对于 ubuntu 12 来说有点旧..:
https://shahhj.wordpress.com/2013/10/27/numpy-and-blas-no-problemo/
导入 scipy 会破坏 Python 中的多处理支持
为什么导入 numpy 后多处理只使用一个核心?

linux 机器是新安装的——只安装了 python3.7、pip3 和 python 库。 我什至下载了最新的 ubuntu 19.10 映像,其中预装了 python3.7.5。 我做了什么:

  • 试过 os.sched_setaffinity
  • 试过 os.system("taskset -p 0xff %d" % os.getpid())

pid 20534 的当前关联掩码:ff
pid 20534 的新关联掩码:ff

  • 安装了 ATLAS 并设置了替代方案,但这些似乎没有被采用..

在我的 Windows 机器上,我有:python 3.7.1 和>>> import numpy; numpy.show_config()的输出>>> import numpy; numpy.show_config() >>> import numpy; numpy.show_config()

blas_mkl_info:   NOT AVAILABLE blis_info:   NOT AVAILABLE openblas_info:
    library_dirs = ['C:\\projects\\numpy-wheels\\numpy\\build\\openblas']
    libraries = ['openblas']
    language = f77
    define_macros = [('HAVE_CBLAS', None)] blas_opt_info:
    library_dirs = ['C:\\projects\\numpy-wheels\\numpy\\build\\openblas']
    libraries = ['openblas']
    language = f77
    define_macros = [('HAVE_CBLAS', None)] lapack_mkl_info:   NOT AVAILABLE openblas_lapack_info:
    library_dirs = ['C:\\projects\\numpy-wheels\\numpy\\build\\openblas']
    libraries = ['openblas']
    language = f77
    define_macros = [('HAVE_CBLAS', None)] lapack_opt_info:
    library_dirs = ['C:\\projects\\numpy-wheels\\numpy\\build\\openblas']
    libraries = ['openblas']
    language = f77
    define_macros = [('HAVE_CBLAS', None)]

在我的 linux 机器上:python 3.7.0 和 numpy 配置:

blas_mkl_info:
  NOT AVAILABLE
blis_info:
  NOT AVAILABLE
openblas_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
blas_opt_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
lapack_mkl_info:
  NOT AVAILABLE
openblas_lapack_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
lapack_opt_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]

我的代码中没有任何多线程逻辑或类似的东西 - 所有多线程逻辑都是在我使用的库中处理的。 我希望有人能帮帮忙。 我觉得很奇怪,我在上面链接的问题这么多年后仍然有这种问题。

编辑:原因问题被删除:我在 bios 中检查了所有内核和超线程都已激活

asammdf 是完全单线程的。 在 Windows 机器上,您可能将 numpy 与 Intel mkl 库一起使用,因此这可能是 numpy 操作被矢量化的原因

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM