[英]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.