2015-04-20 16 views
27

Tôi có bộ mã vạch n được lưu trữ trong 3 x n ma trận z. Tôi tìm thấy sản phẩm bên ngoài bằng cách sử dụng np.einsum. Khi tôi hẹn giờ nó sử dụng:"Kết quả trung gian đang được lưu trong bộ nhớ cache" nghĩa là gì?

%timeit v=np.einsum('i...,j...->ij...',z,z) 

tôi đã có kết quả:

The slowest run took 7.23 times longer than the fastest. This could mean that an 
intermediate result is being cached 
100000 loops, best of 3: 2.9 µs per loop 

gì đang xảy ra ở đây và nó có thể tránh được? 3 tốt nhất là 2.9us, nhưng chậm nhất có lẽ điển hình hơn.

+4

Với mục đích thử nghiệm, hãy thử tăng kích thước 'n', điều này sẽ làm giảm phần' z' được lưu trong bộ nhớ cache của CPU và thông báo sẽ biến mất tại một số điểm –

Trả lời

24

Thông báo "kết quả trung gian đang được lưu vào bộ nhớ cache" chỉ là một dự đoán mù trong thông điệp được soạn trước được báo cáo bởi% timeit. Nó có thể hoặc có thể không đúng, và bạn không nên giả định nó là chính xác.

Cụ thể, một trong những lý do phổ biến nhất cho lần chạy đầu tiên chậm nhất là mảng nằm trong chỉ CPU cache sau lần chạy đầu tiên.

CPU tự động lưu vào bộ nhớ cache; bạn không thể tránh điều này, và bạn thực sự không muốn tránh nó. Tuy nhiên, tối ưu hóa các thuật toán để bộ nhớ cache CPU có thể hoạt động tối ưu là ngày nay một trong những nút cổ chai mà máy tính hiệu năng cao cần phải tính đến.

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