2016-04-05 4 views
9

स्केल क्यों नहीं करती है मैं यादृच्छिक संख्याओं के एक साथ गुणा करने में पाइथन सूची समझ के विरुद्ध numpy बनाम सापेक्ष दक्षता की तुलना कर रहा हूं। (पायथन 3.4/स्पाइडर, विंडोज और उबंटू)।numpy की क्षमता

जैसा कि कोई अपेक्षा करता है, सबसे छोटे सरणी के लिए, numpy तेजी से एक सूची समझ को बेहतर बनाता है, और सरणी की लंबाई बढ़ाने के लिए आपको प्रदर्शन के लिए अपेक्षित सिग्मोइड वक्र मिलता है। लेकिन सिग्मोइड चिकनी से बहुत दूर है, जिसे मैं समझने में परेशान हूं।

जाहिर है कि छोटी सरणी लंबाई के लिए मात्रात्मक शोर की एक निश्चित राशि है, लेकिन मुझे अनपेक्षित रूप से शोर परिणाम मिल रहे हैं, खासकर विंडोज के तहत। आंकड़े विभिन्न सरणी लंबाई के 100 रनों का मतलब हैं, इसलिए किसी भी क्षणिक प्रभाव को सुलझाना चाहिए (इसलिए मैंने सोचा होगा)।

Performance characteristic

Numpy and Python list performance comparison 

नीचे आंकड़े सूची समझ के खिलाफ numpy का उपयोग कर लंबाई भिन्न सरणियों गुणा के अनुपात दिखा।

Array Length Windows  Ubuntu 
      1  0.2  0.4 
      2  2.0  0.6 
      5  1.0  0.5 
      10  3.0  1.0 
      20  0.3  0.8 
      50  3.5  1.9 
     100  3.5  1.9 
     200  10.0  3.0 
     500  4.6  6.0 
     1,000  13.6  6.9 
     2,000  9.2  8.2 
     5,000  14.6  10.4 
     10,000  12.1  11.1 
     20,000  12.9  11.6 
     50,000  13.4  11.4 
    100,000  13.4  12.0 
    200,000  12.8  12.4 
    500,000  13.0  12.3 
    1,000,000  13.3  12.4 
    2,000,000  13.6  12.0 
    5,000,000  13.6  11.9 

तो मुझे लगता है कि मेरे सवाल किसी को भी समझा सकता है यही वजह है कि परिणाम, विशेष रूप से Windows के तहत इतना शोर कर रहे हैं। मैंने कई बार परीक्षण चलाए हैं लेकिन परिणाम हमेशा एक जैसा दिखते हैं।

अद्यतन। रेब्लोकॉन मास्क के सुझाव पर मैंने हथियार संग्रह को अक्षम कर दिया है। जो कुछ हद तक विंडोज प्रदर्शन को सुचारू बनाता है, लेकिन वक्र अभी भी गड़बड़ कर रहे हैं।

Updated performance characteristic without garbage collection

Numpy and Python list performance comparison 
(Updated to remove garbage collection) 

Array Length Windows  Ubuntu 
      1  0.1  0.3 
      2  0.6  0.4 
      5  0.3  0.4 
      10  0.5  0.5 
      20  0.6  0.5 
      50  0.8  0.7 
     100  1.6  1.1 
     200  1.3  1.7 
     500  3.7  3.2 
     1,000  3.9  4.8 
     2,000  6.5  6.6 
     5,000  11.5  9.2 
     10,000  10.8  10.7 
     20,000  12.1  11.4 
     50,000  13.3  12.4 
    100,000  13.5  12.6 
    200,000  12.8  12.6 
    500,000  12.9  12.3 
    1,000,000  13.3  12.3 
    2,000,000  13.6  12.0 
    5,000,000  13.6  11.8 

अद्यतन

@ सिड के सुझाव पर, मैं इसे प्रत्येक मशीन पर एक सिंगल कोर पर चल रहा है के लिए प्रतिबंधित कर दिया है। वक्र थोड़ा चिकना (विशेष रूप से लिनक्स एक) हैं, लेकिन अभी भी इन्फ्लिक्शन और कुछ शोर के साथ, खासकर विंडोज के तहत।

(यह वास्तव में inflexions है कि मैं मूल रूप से, के बारे में पोस्ट करने के लिए के रूप में वे एक ही स्थानों में लगातार दिखाई जा रहा था था।)

Numpy and Python list performance comparison 
(Garbage collection disabled and running on 1 CPU) 

Array Length Windows  Ubuntu 
      1  0.3  0.3 
      2  0.0  0.4 
      5  0.5  0.4 
      10  0.6  0.5 
      20  0.3  0.5 
      50  0.9  0.7 
     100  1.0  1.1 
     200  2.8  1.7 
     500  3.7  3.3 
     1,000  3.3  4.7 
     2,000  6.5  6.7 
     5,000  11.0  9.6 
     10,000  11.0  11.1 
     20,000  12.7  11.8 
     50,000  12.9  12.8 
    100,000  14.3  13.0 
    200,000  12.6  13.1 
    500,000  12.6  12.6 
    1,000,000  13.0  12.6 
    2,000,000  13.4  12.4 
    5,000,000  13.6  12.2 

enter image description here

+0

कचरा संग्रह? हो सकता है कि आप इसे अपने परीक्षण चलाने के लिए अक्षम कर सकें? –

+0

यहां: http://stackoverflow.com/questions/20495946/why-disable-the-garbage-collector –

+1

@ReblochonMasque इसके लिए धन्यवाद। इसने वक्र की चिकनीता में काफी सुधार किया है, हालांकि अभी भी शोर की एक निश्चित राशि है। मैं अभी भी एन के उच्च मूल्यों के लिए भी वक्र में घुसपैठ कर रहा हूं, जो मुझे लगता है कि सिर्फ शोर है ... – TimGJ

उत्तर

3

कचरा कलेक्टर यह के थोक बताते हैं। शेष आपकी मशीन पर चल रहे अन्य कार्यक्रमों के आधार पर उतार चढ़ाव हो सकता है। अधिकांश चीज़ों को बंद करने और न्यूनतम न्यूनतम चलाने और इसका परीक्षण करने के बारे में कैसे। चूंकि आप डेटाटाइम का उपयोग कर रहे हैं (जो वास्तविक समय बीत चुका है) इसे किसी भी प्रोसेसर संदर्भ स्विच को ध्यान में रखना चाहिए।

आप यूनिक्स कॉल का उपयोग कर प्रोसेसर से चिपकने के दौरान इसे चलाने का भी प्रयास कर सकते हैं, जो इसे और अधिक आसान बनाने में मदद कर सकता है। Ubuntu पर यह इसलिए किया जा सकता है: https://askubuntu.com/a/483827

खिड़कियों प्रोसेसर आत्मीयता के लिए इस प्रकार सेट किया जा सकता: http://www.addictivetips.com/windows-tips/how-to-set-processor-affinity-to-an-application-in-windows/

+0

अधिकांश चीजें बंद हैं - मैंने बस परीक्षण चलाया है और दोनों सिस्टम अपने डिवाइस पर छोड़ दें। AFAIK इस तरह के महत्वपूर्ण (और लगातार) विसंगतियों के लिए खाते में कुछ भी नहीं चल रहा है, लेकिन obvisouly _something_ इसका कारण बन रहा है। – TimGJ

+0

क्या आप प्रोग्राम को एक सिंगल सीपीयू/कोर पर पिन करने का प्रयास कर सकते हैं और देख सकते हैं कि वह किराया कैसे? यह उबंटू पर करना आसान होना चाहिए: http: //askubuntu.com/a/483827 – Sid

+0

सुझाव के लिए बहुत धन्यवाद। इसके अनन्य परिवर्तनों के बावजूद इसके लिनक्स कार्यान्वयन वास्तव में अपेक्षाकृत सुचारू रूप से स्केलिंग कर रहा है। मैं एकल कोर चीज का प्रयास करूंगा, लेकिन मुझे नहीं पता कि यह विंडोज के तहत भी संभव है, जहां प्रदर्शन काफी हद तक शानदार है। – TimGJ

2

मेरी टिप्पणी से:

आमतौर पर कचरा संग्रहण बताते bnchmark प्रदर्शन परीक्षणों में शोर; परीक्षण चलाने के लिए इसे अक्षम करना संभव है, और कुछ स्थितियों के तहत, परिणामों को सुस्त कर देगा।

यहाँ कैसे और क्यों जीसी निष्क्रिय करने के लिए एक कड़ी है: Why disable the garbage collector?

जीसी के बाहर, यह हमेशा अपने सिस्टम पर चलने वाले प्रदर्शन को प्रभावित कर सकता अन्य प्रक्रियाओं (नेटवर्क कनेक्शन, प्रणाली बैकअप के रूप में मानक को चलाने के लिए मुश्किल है, आदि ... जो पृष्ठभूमि में स्वचालित और चुपचाप चल रहा हो सकता है); हो सकता है कि आप एक ताजा सिस्टम बूट के साथ पुनः प्रयास कर सकें, और यह देखने के लिए जितनी छोटी प्रक्रियाएं हो सकती हैं कि यह कैसे जाता है?

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