Anaconda MKL无法设置线程数

时间:2018-11-02 08:21:04

标签: python numpy anaconda intel-mkl

我正在使用蟒蛇的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

1 个答案:

答案 0 :(得分:-1)

请考虑以下文档: https://stackoverflow.com/a/50834600/1673320

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

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

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