如何使用NumPy + MKL避免这种四行内存泄漏?

cm_*_*cm_ 7 python memory-leaks numpy intel-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)
Run Code Online (Sandbox Code Playgroud)

每次操作时,使用的内存都会增加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']
Run Code Online (Sandbox Code Playgroud)

cm_*_*cm_ 8

这确实是一个NumPy错误,已经有几个月的历史了,这里已经讨论过 ; 它将在1.7.1中修复.修复是item_selection.c中这个漂亮的单行程序.添加此行并重新编译后,一切正常.