我正在使用蟒蛇的numpy
来对大型矩阵乘法(类型为8192x8192
的{{1}})进行基准测试,如下所示:(在jupyter中)
float32
import numpy as np
a = np.empty((8192, 8192), 'f')
%timeit a @ a
是针对numpy
构建的。当进行乘法运算(连续)时,我发现python的CPU使用率始终为50%。我想知道为什么它不是100%(因为矩阵乘法应该自动按参数表示)。因此,我四处搜寻,并找到两种方法来设置MKL
使用的线程数。
一种方法是直接使用DLL:
MKL
我相信这给了我一些未知的错误代码,但设置失败:
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())
我想知道为什么在MKL中设置4个线程会不断失败,以及如何使其正常工作。我在None
2
,Win7
下。我的CPU是64bit
,应该有4个核心。我的anaconda环境看起来像:(缩写)
i5-2520M
答案 0 :(得分:-1)
请考虑以下文档: https://stackoverflow.com/a/50834600/1673320
键变量是MKL_NUM_THREADS
,可以将其设置为全局Windows变量。
对此我非常不同意@roro。之所以看到50%,是因为您没有使用超线程功能。话虽这么说,请记住,计算速度有两个限制因素:CPU功率和!内存访问带宽。通常情况下,第二秒会将速度限制为CPU功率的70%,因为RAM /高速缓存无法将数据足够快地交付给算法。
正确执行并行性是HPC更具挑战性的部分。