Поддерживает ли scipy многопоточность для разреженного умножения матриц при использовании MKL BLAS?
===================================================================================================

Согласно документации МКЛ БЛАС »Все матрично-матричные операции (уровень 3) ориентированы как на плотную, так и на разреженную BLAS. " [http://software.intel.com/en-us/articles/parallelism-in-the-intel-math-kernel-library](https://software.intel.com/en-us/articles/parallelism-in-the-intel-math-kernel-library)

Я построил Сципи с MKL BLAS. Используя тестовый код ниже, я вижу ожидаемое многопоточное ускорение для плотного, но не разреженного, умножения матриц. Есть ли какие-либо изменения в Scipy для включения многопоточных разреженных операций?

 ответ - нет. Но вы можете создать свою собственную обертку вокруг подпрограмм разреженного умножения MKL. Вы спрашивали о умножении двух разреженных матриц. Ниже приведен код-обертка, который я использовал для умножения одной разреженной матрицы на плотный вектор, поэтому он не долженТяжело адаптироваться (см. справочник Intel MKL для mkl\_cspblas\_dcsrgemm). Кроме того, помните, как хранятся ваши scipy-массивы: по умолчанию это coo, но csr (или csc) может быть лучшим выбором. Я выбрал csr, но MKL поддерживает большинство типов (просто вызовите соответствующую процедуру).

Из того, что я мог сказать, обаs по умолчанию и MKL являются многопоточными. Путем изменения`OMP_NUM_THREADS` Я мог видеть разницу в производительности.

Чтобы использовать функцию ниже, если у вас есть последняя версия MKL, просто убедитесь, что у вас есть`LD_LIBRARY_PATHS` установить для включения соответствующих каталогов MKL. Для более старых версий вам нужно собрать несколько конкретных библиотек. Я получил информацию от[IntelMKL в питоне](https://software.intel.com/en-us/articles/using-intel-mkl-in-your-python-programs)