Я анализирую время выполнения скриптов в Python и хочу отключить оптимизацию MKL / OpenBLAS. Как правильно сделать это в Windows?
У меня Windows 10 x64 с Python 3.6 и numpy 1.16.3, установленная через pip.
Я пытался установить системные переменные env в Windows (OPENBLAS_NUM_THREADS
, MKL_NUM_THREADS
, NUMEXPR_NUM_THREADS
, VECLIB_MAXIMUM_THREADS
) и в скрипте Python:
import os
os.environ["OMP_NUM_THREADS"] = "1"
os.environ["OPENBLAS_NUM_THREADS"] = "1"
os.environ["MKL_NUM_THREADS"] = "1"
os.environ["NUMEXPR_NUM_THREADS"] = "1"
os.environ["VECLIB_MAXIMUM_THREADS"] = "1"
но выполнение этого куска кода:
import numpy as np
N = 10**4
a = np.random.random((N, N))
b = a@a
по-прежнему использует больше потоков, чем один.
Мой np.__config__.show()
выглядит так:
blas_mkl_info:
NOT AVAILABLE
blis_info:
NOT AVAILABLE
openblas_info:
library_dirs = ['C:\\projects\\numpy-wheels\\numpy\\build\\openblas']
libraries = ['openblas']
language = f77
define_macros = [('HAVE_CBLAS', None)]
blas_opt_info:
library_dirs = ['C:\\projects\\numpy-wheels\\numpy\\build\\openblas']
libraries = ['openblas']
language = f77
define_macros = [('HAVE_CBLAS', None)]
lapack_mkl_info:
NOT AVAILABLE
openblas_lapack_info:
library_dirs = ['C:\\projects\\numpy-wheels\\numpy\\build\\openblas']
libraries = ['openblas']
language = f77
define_macros = [('HAVE_CBLAS', None)]
lapack_opt_info:
library_dirs = ['C:\\projects\\numpy-wheels\\numpy\\build\\openblas']
libraries = ['openblas']
language = f77
define_macros = [('HAVE_CBLAS', None)]
На моем ПК нет пути, подобного C:\\projects\\numpy-wheels\\numpy\\build\\openblas
, это должен быть путь от компьютера, на котором была скомпилирована библиотека.
Мой способ добиться исполнения в одном потоке - запустить скрипт из CMD следующим образом:
start /affinity 0x4 python script.py
но это не правильный способ управления оптимизацией математической библиотеки (и я не уверен, действительно ли эта команда ограничивает OpenBLAS).