Я использовал numpy
от Anaconda для оценки большого умножения матриц (8192x8192
типа float32
), например: (в jupyter)
import numpy as np
a = np.empty((8192, 8192), 'f')
%timeit a @ a
numpy
строится против MKL
. Делая умножение (непрерывно), я нахожу, что загрузка процессора Python всегда составляет 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
Мне интересно, почему установка 4 потоков в MKL не работает и как заставить это работать. Я под Win7
, 64bit
. Мой процессор i5-2520M
, который должен иметь 4 ядра. Моя среда анаконды выглядит так: (сокращенно)
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