2013-03-03 7 views
7

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'] 
+1

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

+1

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

+0

Dzięki, przesłałem ten numer do numpy bug trackera. Zamknę to pytanie, gdy tylko otrzymam pozytywną odpowiedź. –

Odpowiedz

8

Jest to rzeczywiście bug NumPy, który jest znany od kilku miesięcy i zostało omówione here; zostanie to ustalone w 1.7.1. Poprawka to this nice one-liner in item_selection.c. Po dodaniu tej linii i ponownym skompilowaniu wszystko działa dobrze.

Powiązane problemy