2013-03-03 27 views
7

Mã bốn dòng đơn giản sau đây tạo ra một rò rỉ bộ nhớ trong Python 2.6.6/1.7.0 NumPy/MKL 10.3.6 thiết lập:Làm thế nào để tránh rò rỉ bộ nhớ bốn dòng này với NumPy + MKL?

import numpy as np 

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

Với mỗi hoạt động, bộ nhớ sử dụng phát triển bởi kích thước của ma trận 10x10. Tuy nhiên, không có hành vi như vậy khi tôi sử dụng một thiết lập NumPy 1.4.1/ATLAS.

Tôi đã đọc về MKL không nhất thiết phải giải phóng bộ nhớ tự động, vì vậy tôi đoán đây là lý do cho sự bùng nổ. Có một cách đơn giản để sửa đổi NumPy (trước hoặc sau khi biên dịch), như vậy mà bốn lót sẽ làm việc tốt?

Sản lượng 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

Điều đó chắc chắn trông giống như một lỗi trong vũng nước. Có lẽ bạn sẽ có nhiều may mắn hơn khi trình theo dõi lỗi của họ hoặc cố gắng numpy 1.8? – entropy

+1

thú vị là hiệu ứng vẫn xảy ra với 'gc.collect' trong vòng lặp ([gc - garbage collection] (http://docs.python.org/2/library/gc.html)) trỏ đến một lỗi sumpy. Có thể đáng để nâng cao trình theo dõi vấn đề của họ? – danodonovan

+0

Cảm ơn, tôi đã gửi vấn đề này tới trình theo dõi lỗi. Tôi sẽ đóng câu hỏi này ngay sau khi tôi nhận được một câu trả lời tích cực ở đó. –

Trả lời

8

Đây thực sự là một lỗi NumPy, đã được biết đến với một số tháng và đã được thảo luận here; nó sẽ được sửa trong 1.7.1. Bản sửa lỗi là this nice one-liner in item_selection.c. Sau khi thêm dòng này và biên dịch lại, mọi thứ hoạt động tốt.

Các vấn đề liên quan