I have numpy linked with mkl and I was doing matrix multiplication on sparse matrices and it seemed to be very slow. For example for matrix A of size (100000, 1000) , sparsity density = 0.1 and dtype=numpy.float64, I have timeit A.T.dot(A) giving me 5.24s but if I convert A to dense matrix and then do multiplication, I get ~650ms. Does blas operation does not kick in for sparse matrices? Also I have observerd that my cpu usage shows only one core in use while doing sparse multiplication but uses multiple cores for dense case.
My numpy.show_config() has following configuration :
lapack_opt_info:
libraries = ['mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'iomp5', 'pthread']
library_dirs = ['/home/user/miniconda2/envs/sketch/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/home/user/miniconda2/envs/sketch/include']
blas_opt_info:
libraries = ['mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'iomp5', 'pthread']
library_dirs = ['/home/user/miniconda2/envs/sketch/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/home/user/miniconda2/envs/sketch/include']
openblas_lapack_info:
NOT AVAILABLE
lapack_mkl_info:
libraries = ['mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'iomp5', 'pthread']
library_dirs = ['/home/user/miniconda2/envs/sketch/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/home/user/miniconda2/envs/sketch/include']
blas_mkl_info:
libraries = ['mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'iomp5', 'pthread']
library_dirs = ['/home/user/miniconda2/envs/sketch/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/home/user/miniconda2/envs/sketch/include']
Any thoughts on how I can make numpy's performance improve on sparse matrices. Thanks.