Предотвращение scipy от многопроцессорности - PullRequest
1 голос
/ 06 июня 2019

Я использую scipy для вычисления поворотов векторов. Следующий код является минимальным, который воспроизводит мою проблему. Это не обязательно правильно математически.

import numpy as np 
from scipy.linalg import expm

axis = np.array([5.0, 8.0, -2.0])
axis = axis/(np.sum(axis**2)**0.5)

theta = 0.001


for t in range(1000000):
    cx = np.cross(np.eye(3), axis*theta)
    M0 = expm(cx)
    cx = np.dot(M0, cx) 

print cx

Моя проблема в том, что выполнение этого кода занимает 300% моего процессора, то есть работает на 3 ядрах. Я полагаю, что это связано с функцией scipy.linalg.expm, потому что только функции numpy использовали только до 100%. У меня вопрос, как настроить scipy на использование только одного ядра?

Я не помню, чтобы когда-либо связывали его с какой-либо библиотекой linalg, но вот мои конфиги:

#numpy
numpy.__config__.show()
lapack_opt_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
blas_opt_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
openblas_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
blis_info:
  NOT AVAILABLE
openblas_lapack_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
lapack_mkl_info:
  NOT AVAILABLE
blas_mkl_info:
  NOT AVAILABLE


#scipy
scipy.__config__.show()
lapack_opt_info:
    libraries = ['openblas']
    library_dirs = ['/usr/local/lib']
    language = f77
blas_opt_info:
    libraries = ['openblas']
    library_dirs = ['/usr/local/lib']
    language = f77
openblas_info:
    libraries = ['openblas']
    library_dirs = ['/usr/local/lib']
    language = f77
openblas_lapack_info:
    libraries = ['openblas']
    library_dirs = ['/usr/local/lib']
    language = f77
blas_mkl_info:
  NOT AVAILABLE

1 Ответ

5 голосов
/ 06 июня 2019

Вероятно, это многопоточность на уровне C с помощью openblas, а не многопроцессорная обработка на уровне Python.Попробуйте установить переменную env OPENBLAS_NUM_THREADS = 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...