我知道这可能看起来像一个荒谬的问题,但我必须定期在计算服务器上运行工作,我与部门中的其他人分享,当我开始10个工作时,我真的希望它只需要10个核心而不是更多; 我不关心每次运行一个核心需要多长时间:我只是不希望它侵占其他人的领域,这需要我重新安排工作等等.我只想拥有10个实心核心,就是这样.
更具体地说,我在Redhat上使用Enthought 7.3-1,它基于Python 2.7.3和numpy 1.6.1,但问题更为笼统.我一直在谷歌搜索这个问题的某种答案几个小时无济于事,所以如果有人知道numpy的转换可以关闭多线程,请告诉我.
看来我的numpy库正在使用4个线程,而设置OMP_NUM_THREADS=1并没有阻止它.
numpy.show_config() 给我这些结果:
atlas_threads_info:
libraries = ['lapack', 'ptf77blas', 'ptcblas', 'atlas']
library_dirs = ['/usr/lib64/atlas']
define_macros = [('ATLAS_INFO', '"\\"3.8.4\\""')]
language = f77
include_dirs = ['/usr/include']
blas_opt_info:
libraries = ['ptf77blas', 'ptcblas', 'atlas']
library_dirs = ['/usr/lib64/atlas']
define_macros = [('ATLAS_INFO', '"\\"3.8.4\\""')]
language = c
include_dirs = ['/usr/include']
atlas_blas_threads_info:
libraries = ['ptf77blas', 'ptcblas', 'atlas']
library_dirs = ['/usr/lib64/atlas']
define_macros = [('ATLAS_INFO', '"\\"3.8.4\\""')]
language = c
include_dirs = ['/usr/include']
openblas_info:
NOT AVAILABLE
lapack_opt_info:
libraries = ['lapack', 'ptf77blas', 'ptcblas', 'atlas']
library_dirs = ['/usr/lib64/atlas']
define_macros = [('ATLAS_INFO', '"\\"3.8.4\\""')] …Run Code Online (Sandbox Code Playgroud) 我对于在代码的并行部分中指定线程数的方法感到很困惑.我知道我可以用:
#pragma omp parallel for num_threads(NB_OF_THREADS)到目前为止我收集的前两个是等价的.但是第三个呢?有人可以提供更详细的差异说明,我无法在互联网上找到有关1/2和3之间差异的任何信息.
我使用multiprocessing.Pool.imap在Windows 7上使用Python 2.7并行运行许多独立作业.使用默认设置,我的总CPU使用率固定为100%,由Windows任务管理器测量.这使得我的代码在后台运行时无法执行任何其他工作.
我已经尝试将进程数限制为CPU数减1,如如何限制Python使用的处理器数量中所述:
pool = Pool(processes=max(multiprocessing.cpu_count()-1, 1)
for p in pool.imap(func, iterable):
...
Run Code Online (Sandbox Code Playgroud)
这确实减少了正在运行的进程总数.但是,每个过程只需要更多的周期来弥补它.所以我的总CPU使用率仍然固定为100%.
有没有办法直接限制总CPU使用率 - 不仅仅是进程数量 - 或者失败,是否有任何解决方法?
我正在使用sklearn模块的混合子模块用于高斯混合模型...当我在多核系统上运行我的代码时,它使用多个核,即使我在代码中没有要求它.这是默认行为吗?更重要的是,我该如何禁用它?
谢谢