Poniższy prosty kod cztery linia produkuje przeciek pamięci w moim Python 2.6.6/NumPy 1.7.0/MKL 10.3.6 Konfiguracja:Jak uniknąć tego czteroprzewodowego wycieku pamięci za pomocą NumPy + MKL?
import numpy as np
t = np.random.rand(10,10)
while True:
t = t/np.trace(t)
Przy każdej operacji wybranej pamięci rośnie o wielkości matryca 10x10. Jednak nie ma takiego zachowania, gdy używam konfiguracji NumPy 1.4.1/ATLAS.
Czytałem o MKL niekoniecznie automatycznie zwalniając pamięć, więc domyślam się, że to jest powód wybuchu. Czy istnieje prosty sposób modyfikowania NumPy (przed lub po kompilacji), tak, że ten czteroliniowy będzie działał dobrze?
Wyjście 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']
To zdecydowanie wygląda jak błąd w numpy. Może będziesz miał więcej szczęścia zgłaszając się do swojego narzędzia do śledzenia błędów lub próbując numpy 1.8? – entropy
Co ciekawe, efekt nadal występuje z 'gc.collect' w pętli ([gc - garbage collection] (http://docs.python.org/2/library/gc.html)) wskazującym na numpy błąd. Może warto porozmawiać o ich problemie? – danodonovan
Dzięki, przesłałem ten numer do numpy bug trackera. Zamknę to pytanie, gdy tylko otrzymam pozytywną odpowiedź. –