मेरे पास सी में एक बहुप्रचारित विलय प्रोग्रामिंग प्रोग्राम है, और 0, 1, 2, या 4 थ्रेड के साथ बेंचमार्क परीक्षण के लिए एक प्रोग्राम है। मैंने कई परीक्षण करने और परिणामों को कुल करने के लिए पायथन में एक कार्यक्रम भी लिखा।सी प्रोग्राम तेज है क्योंकि पाइथन सबप्रोसेस
अजीब बात यह है कि जब मैं पाइथन चलाता हूं, तो परीक्षण हमेशा आधे समय में चलता है जब मैं उन्हें सीधे खोल में चलाता हूं।
$ ./mergetest 4000000 4194819 140810581084
0 threads: 1.483485s wall; 1.476092s user; 0.004001s sys
1 threads: 1.489206s wall; 1.488093s user; 0.000000s sys
2 threads: 0.854119s wall; 1.608100s user; 0.008000s sys
4 threads: 0.673286s wall; 2.224139s user; 0.024002s sys
अजगर स्क्रिप्ट का उपयोग करना::
उदाहरण के लिए, जब मैं सॉर्ट करने के लिए 4 लाख पूर्णांकों के साथ अपने आप में परीक्षण कार्यक्रम चलाने (पिछले दो तर्क बीज और मापांक पैदा पूर्णांकों के लिए कर रहे हैं)
$ ./mergedata.py 1 4000000
Average runtime for 1 runs with 4000000 items each:
0 threads: 0.677512s wall; 0.664041s user; 0.016001s sys
1 threads: 0.709118s wall; 0.704044s user; 0.004001s sys
2 threads: 0.414058s wall; 0.752047s user; 0.028001s sys
4 threads: 0.373708s wall; 1.24008s user; 0.024002s sys
इससे कोई फर्क नहीं पड़ता कि मैं कितना सॉर्ट कर रहा हूं, या कितनी बार इसे चलाता हूं। पायथन प्रोग्राम सबप्रोसेस मॉड्यूल के साथ परीक्षक को कॉल करता है, फिर आउटपुट को पार करता है और जोड़ता है। कोई विचार क्यों ऐसा होगा? क्या पाइथन किसी भी तरह निष्पादन को अनुकूलित कर रहा है? या जब मैं इसे सीधे चलाता हूं तो मुझे कुछ धीमा कर देता है कि मुझे पता नहीं है?
कोड: https://gist.github.com/2650009
क्या आप हमें पाइथन कोड दिखा सकते हैं? – NPE
... और सी कोड भी। या कम से कम github या इसी तरह के कोड के लिए एक सूचक प्रदान करते हैं। –
क्या ऐसा इसलिए है क्योंकि खोल से निष्पादन कार्यक्रम को कंसोल पर प्रिंटिंग की असमान मात्रा में खर्च करने का कारण बन रहा है? 'Stdout' को'/dev/null' पर रीडायरेक्ट करने का प्रयास करें और देखें कि क्या स्थिति बदलती है या नहीं। –