簡體   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