2015-04-20 6 views
27

मैं में 3 x n मैट्रिक्स z संग्रहीत n वैक्टर का एक सेट है। मुझे np.einsum का उपयोग कर बाहरी उत्पाद मिलता है।"मध्यवर्ती परिणाम कैश किया जा रहा है" क्या मतलब है?

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

मैं परिणाम मिला:: जब मैं इसे का उपयोग समय समाप्त हो गया

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 

यहाँ क्या हो रहा है और यह बचा जा सकता है? सबसे अच्छा 3 2.9us है, लेकिन सबसे धीमा शायद अधिक विशिष्ट है।

+4

परीक्षण प्रयोजनों के लिए, को बढ़ाने के लिए आकार 'n', यह' z' के अंश जो अपने CPU के कैश में संग्रहीत किया जाता है कम हो जाएगा कोशिश करते हैं और संदेश कुछ बिंदु पर गायब हो जाना चाहिए –

उत्तर

24

संदेश "मध्यवर्ती परिणाम कैश्ड किया जा रहा है" सिर्फ% timeit द्वारा रिपोर्ट बंद संदेश में एक अंधे अनुमान है। यह सच हो सकता है या नहीं भी हो सकता है, और आपको यह नहीं मानना ​​चाहिए कि यह सही है।

विशेष रूप से, सबसे पहले चलाने के सबसे सामान्य कारणों में से एक यह है कि सरणी CPU cache में केवल पहले रन के बाद है।

सीपीयू कैश स्वचालित रूप से बातें; आप इससे बच नहीं सकते हैं, और आप वास्तव में इससे बचना नहीं चाहते हैं। हालांकि, एल्गोरिदम को अनुकूलित करना ताकि सीपीयू कैश बेहतर तरीके से काम कर सकें, आजकल उन बाधाओं में से एक है जो उच्च-प्रदर्शन कंप्यूटिंग को ध्यान में रखना आवश्यक है।

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