繁体   English   中英

Anaconda MKL无法设置线程数

[英]Anaconda MKL can't set number of threads

我正在使用来自蟒蛇的numpy来基准测试大型矩阵乘法( float32类型的8192x8192 ),如下所示:(在jupyter中)

import numpy as np
a = np.empty((8192, 8192), 'f')
%timeit a @ a

numpy是针对MKL构建的。 当进行乘法运算(连续)时,我发现python的CPU使用率始终为50%。 我想知道为什么它不是100%(因为矩阵乘法应该自动按参数表示)。 因此,我四处搜寻,找到了两种方法来设置MKL使用的线程数。

一种方法是直接使用DLL:

from ctypes import CDLL
mkl = CDLL('../conda/pkgs/mkl-2019.0-118/Library/bin/mkl_rt.dll')
print(mkl.MKL_Set_Num_Threads(4))
print(mkl.MKL_Get_Max_Threads())

我相信给了我一些未知的错误代码,但未能设置:

-899695632
2

另一种方法是通过mkl-service包:

import mkl
print(mkl.set_num_threads(4))
print(mkl.get_max_threads())

这也没有成功。

None
2

我想知道为什么在MKL中设置4个线程会不断失败,以及如何使其正常工作。 我在64bit Win7下。 我的CPU是i5-2520M ,应该具有4核。 我的anaconda环境看起来像:(略)

mkl                       2019.0                      118
mkl-service               1.1.2            py36hb217b18_5
mkl_fft                   1.0.6            py36hdbbee80_0
mkl_random                1.0.1            py36h77b88f5_1
numpy                     1.15.3           py36ha559c80_0
numpy-base                1.15.3           py36h8128ebf_0
zeromq                    4.2.5                he025d50_1

请考虑以下文档: https : //software.intel.com/zh-cn/articles/intel-math-kernel-library-intel-mkl-intel-mkl-100-threading

关键变量是MKL_NUM_THREADS ,您可以将其设置为全局Windows变量。

我对此非常反对@roro。 之所以看到50%,是因为您没有使用超线程功能。 话虽这么说,请记住,计算速度有两个限制因素:CPU功率和! 内存访问带宽。 通常情况下,第二秒会将速度限制为CPU功率的70%,因为RAM /高速缓存无法将数据足够快地交付给算法。

正确实现并行性是HPC更具挑战性的部分。

暂无
暂无

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

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