7

次の単純な 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']
4

1 に答える 1

8

これは確かに NumPy のバグであり、数か月前から知られており、ここで議論されています。1.7.1 で修正される予定です。修正は、 item_selection.c のこの素敵なワンライナーです。この行を追加して再コンパイルすると、すべて正常に動作します。

于 2013-03-04T00:28:24.357 に答える