2013-03-03 5 views
7

निम्नलिखित सरल चार पंक्ति कोड मेरी पायथन में एक स्मृति रिसाव का उत्पादन 2.6.6/NumPy 1.7.0/MKL 10.3.6 सेटअप:NumPy + MKL के साथ इस चार-पंक्ति मेमोरी रिसाव से कैसे बचें?

import numpy as np 

t = np.random.rand(10,10) 
while True: 
    t = t/np.trace(t) 
प्रत्येक ऑपरेशन के साथ

, प्रयुक्त स्मृति के आकार से बढ़ता है एक 10x10 मैट्रिक्स। हालांकि, जब मैं NumPy 1.4.1/ATLAS सेटअप का उपयोग करता हूं तो ऐसा कोई व्यवहार नहीं होता है।

मैंने एमकेएल के बारे में पढ़ा है जो आवश्यक रूप से स्मृति को स्वचालित रूप से मुक्त नहीं करता है, इसलिए मुझे लगता है कि यह ब्लाउप का कारण है। क्या 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'] 
+1

यह निश्चित रूप से numpy में एक बग की तरह दिखता है। हो सकता है कि आप अपने बग ट्रैकर को सबमिट करने या numpy 1.8 की कोशिश कर रहे अधिक भाग्यशाली होगा? – entropy

+1

रोचक रूप से प्रभाव अभी भी लूप ('जीसी - कचरा संग्रह] (http://docs.python.org/2/library/gc.html) में' gc.collect' 'के साथ होता है) एक numpy बग को इंगित करता है। शायद उनके मुद्दे ट्रैकर पर उठाने लायक है? – danodonovan

+0

धन्यवाद, मैंने इस मुद्दे को numpy बग ट्रैकर में सबमिट कर दिया है। जैसे ही मुझे सकारात्मक जवाब मिलता है, मैं इस प्रश्न को बंद कर दूंगा। –

उत्तर

8

यह वास्तव में एक NumPy बग, जो कुछ महीनों के लिए जाना जाता रहा है और here चर्चा की गई है, इसे 1.7.1 में तय किया जाएगा। फिक्स this nice one-liner in item_selection.c है। इस लाइन को जोड़ने और recompiling जोड़ने के बाद, सब कुछ ठीक काम करता है।

संबंधित मुद्दे