如何避免NumPy+MKL的四行内存泄漏?
以下这段简单的四行代码在我的 Python 2.6.6 / NumPy 1.7.0 / MKL 10.3.6 环境中会导致内存泄漏:
import numpy as np
t = np.random.rand(10,10)
while True:
t = t / np.trace(t)
每次运行这个代码,使用的内存都会增加一个 10x10 矩阵的大小。不过,当我使用 NumPy 1.4.1/ATLAS 环境时,就没有这种情况。
我听说 MKL 不一定会自动释放内存,所以我猜这就是内存不断增加的原因。有没有简单的方法可以修改 NumPy(在编译之前或之后),让这段四行代码正常工作呢?
np.show_config() 的输出结果:
numpy 1.7.0
lapack_opt_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['$MKLPATH/lib/intel64']
define_macros = [('SCIPY_MKL_H', None)]
include_dirs = ['$MKLPATH/include']
blas_opt_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['$MKLPATH/lib/intel64']
define_macros = [('SCIPY_MKL_H', None)]
include_dirs = ['$MKLPATH/include']
lapack_mkl_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['$MKLPATH/lib/intel64']
define_macros = [('SCIPY_MKL_H', None)]
include_dirs = ['$MKLPATH/include']
blas_mkl_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['$MKLPATH/lib/intel64']
define_macros = [('SCIPY_MKL_H', None)]
include_dirs = ['$MKLPATH/include']
mkl_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['$MKLPATH/lib/intel64']
define_macros = [('SCIPY_MKL_H', None)]
include_dirs = ['$MKLPATH/include']