Python仅使用一个内核

时间:2020-01-09 15:57:56

标签: python python-3.x linux numpy

我有一个python脚本,该脚本处理带有md4文件中的传感器数据的文件并将其绘制在图像中。 因此,我使用的是库 asammdf matplotlib -它们具有对 numpy 的依赖性。

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

linux htop only one core with many threads

我进行了很多搜索并尝试了所有建议的内容-其中一些版本对于ubuntu 12来说有些旧。.::
https://shahhj.wordpress.com/2013/10/27/numpy-and-blas-no-problemo/
Importing scipy breaks multiprocessing support in Python
Why does multiprocessing use only a single core after I import 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()

的输出
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中检查了所有内核和超线程已激活

1 个答案:

答案 0 :(得分:0)

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