zoukankan      html  css  js  c++  java
  • python 导入numpy 导致多进程绑定同一个CPU问题解决方法

    python 如果有导入numpy模块的import语句,会导致默认将多进程程序的每个进程都绑定到同一个CPU core上,

    失去了多进程在多核CPU上的性能优越性,这和CPU affinity(CPU亲和性)有关,解决办法:

    导入affinity包,执行:

    affinity.set_process_affinity_mask(0,2**multiprocessing.cpu_count()-1)

    以下是英文文档原文,供参考:

    Python refuses to use multiple cores – solution

    I was trying to get parallel Python to work and I noticed that if I run two Python scripts simultaneously – say, in two different terminals – they use the same core. Hence, I get no speedup from multiprocessing/parallel Python. After some searching around, I found out that in some circumstances importing numpy causes Python to stick all computations in one core. This is an issue with CPU affinity, and apparently it only happens for some mixtures of Numpy and BLAS libraries – other packages may cause the CPU affinity issue as well.

    There’s a package called affinity (Linux only AFAIK) that lets you set and get CPU affinity. Download it, run python setup.py install, and run this in Python or ipython:

    1
    2
    3
    4
    In [1]: import affinity
     
    In [2]: affinity.get_process_affinity_mask(0)
    Out[2]: 63

    This is good: 63 is a bitmask corresponding to 111111 – meaning all 6 cores are available to Python. Now running this, I get:

    1
    2
    3
    4
    In [4]: import numpy as np
     
    In [5]: affinity.get_process_affinity_mask(0)
    Out[5]: 1

    So now only one core is available to Python. The solution is simply to set the CPU affinity appropriately after import numpy, for instance:

    1
    2
    3
    4
    5
    import numpy as np
    import affinity
    import multiprocessing
     
    affinity.set_process_affinity_mask(0,2**multiprocessing.cpu_count()-1)
  • 相关阅读:
    【机器学习】关于判别模型和生成模型
    Delphi新手跟我学写CALL,附完整原程序
    QT事件研究的文章
    杂烩:QWidget、QGraphics、QtQuick
    Golang全接触
    学会使用git
    代码创建 WPF 旋转动画
    值得推荐的C/C++框架和库 very good
    可恶的QT隐式共享
    Notes on OpenSSL and Qt(ssl.pri,qsslocket_openssl_symbols.cpp)
  • 原文地址:https://www.cnblogs.com/Arborday/p/9858108.html
Copyright © 2011-2022 走看看