次の単純な 4 行のコードは、私の 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 が自動的にメモリを解放するとは限らないことについて読んだことがあるので、これが爆発の原因だと思います。この 4 行が正常に動作するように、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']