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']
Đ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
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
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 ở đó. –