2013-03-03 10 views
7

Aşağıdaki basit dört satırlı kod benim Python bir bellek sızıntısı üreten 2.6.6/NumPy 1.7.0 setup/MKL 10.3.6: Her bir operasyon ileNumPy + MKL ile bu dört satırlık bellek sızıntısı nasıl önlenir?

import numpy as np 

t = np.random.rand(10,10) 
while True: 
    t = t/np.trace(t) 

, kullanılan bellek büyüklüğüne göre büyür 10x10 matris. Ancak, bir NumPy 1.4.1/ATLAS kurulumunu kullandığımda böyle bir davranış yoktur.

ben ille otomatik bellek boşaltma değil MKL okudum, bu yüzden bu blowup nedeni sanırım. NumPy'yi (derlemeden önce veya sonra) değiştirmenin basit bir yolu var mıdır, öyle ki bu dört liner iyi çalışır mı? np.show_config() arasında

Çıkış

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

. Belki de onların hata izleyicisine veya sadakatli 1.8'i denemeye daha fazla şansınız olur mu? – entropy

+1

ilginci etkisi hala döngü içinde 'gc.collect' ile olur ([gc - çöp toplama] (http://docs.python.org/2/library/gc.html)) bir numpy hatadan işaret. Belki sorun takipçileri üzerinde yükselmeye değer mi? – danodonovan

+0

Teşekkürler, bu sorunu numpy hata izleyicisine gönderdim. Orada olumlu bir cevap alır almaz bu soruyu kapatacağım. –

cevap

8

Bu, gerçekten de bazı ay için bilinmektedir ve here tartışılan bir NumPy böcek, olduğu; 1.7.1'de düzeltilecektir. Düzeltme, this nice one-liner in item_selection.c. Bu satırı ekledikten ve yeniden derledikten sonra her şey iyi çalışıyor. Kesinlikle Numpy bir hata gibi görünüyor