2009-09-30 11 views
5

मैं या तो पफफज़ी (पायथन) या एफएफएलएल (सी ++) पुस्तकालयों के आधार पर एक अस्पष्ट तर्क नियंत्रक को लागू करने पर विचार कर रहा हूं।लागत के लायक पायथन का प्रदर्शन?

मैं अजगर के साथ काम करना पसंद करूंगा लेकिन यह सुनिश्चित नहीं है कि प्रदर्शन एम्बेडेड वातावरण में स्वीकार्य होगा (या तो एआरएम या एम्बेडेड x86 प्रो ~ 64 एमबी रैम दोनों)।

मुख्य चिंता यह है कि प्रतिक्रिया समय जितना तेज़ हो सके (5hz + की अद्यतन दर आदर्श होगी> 2 हर्ट्ज आवश्यक है)। सिस्टम एक आरएस 232 बंदरगाह से एकाधिक (शायद 5) सेंसर से पढ़ा जाएगा और अस्पष्ट मूल्यांकन के परिणामों के आधार पर 2/3 आउटपुट प्रदान करेगा।

क्या मुझे चिंतित होना चाहिए कि इस कार्य के लिए पायथन बहुत धीमा होगा?

+5

मैं आपके विशिष्ट प्लेटफ़ॉर्म पर एक साधारण प्रोटोटाइप के साथ परीक्षण का सुझाव देता हूं। –

+0

5 हर्ट्ज बिल्कुल तेज प्रतिक्रिया समय नहीं है यदि आपको डिवाइस के साथ किसी भी मानव संपर्क की आवश्यकता है। –

उत्तर

35

सामान्य रूप से, आपको प्रदर्शन पर जुनून नहीं करना चाहिए जब तक कि आपने वास्तव में यह समस्या नहीं देखी है। चूंकि हम आपके ऐप के ब्योरे को नहीं जानते हैं, इसलिए हम यह नहीं कह सकते कि यह पाइथन में लागू होने पर कैसा प्रदर्शन करेगा। और चूंकि आपने इसे अभी तक लागू नहीं किया है, न ही आप कर सकते हैं।

उस संस्करण को लागू करें जिसके साथ आप सबसे अधिक आरामदायक हैं, और सबसे पहले, सबसे पहले कार्यान्वित कर सकते हैं। फिर इसे बेंचमार्क करें। और अगर यह है बहुत धीमी गति से, आपके पास तीन विकल्प जो क्रम में किया जाना चाहिए:

  • सबसे पहले, अगर वह पर्याप्त नहीं है अपने अजगर कोड का अनुकूलन
  • , सबसे प्रदर्शन-महत्वपूर्ण कार्यों सी में लिखने/सी ++, और अपने पायथन कोड
  • से कॉल करें और अंत में, यदि आप वास्तव में शीर्ष प्रदर्शन की आवश्यकता है, तो आपको पूरी चीज़ को C++ में फिर से लिखना पड़ सकता है। लेकिन फिर कम से कम आपके पास पायथन में एक कामकाजी प्रोटोटाइप होगा, और आपके पास इसका एक स्पष्ट विचार होगा कि इसे कैसे कार्यान्वित किया जाना चाहिए। आपको पता चलेगा कि किस नुकसान से बचने के लिए, और परिणामों के मुकाबले परीक्षण और तुलना करने के लिए आपके पास पहले से ही सही कार्यान्वयन होगा।
+14

+1 समयपूर्व अनुकूलन सभी बुराई की जड़ है। –

+4

यह सभी बुराई की जड़ है, और यह सब ढेर ओवरफ्लो है। – FogleBird

+1

सभी बिंदुओं पर आधा से सहमत हैं। इसके अलावा, यदि अधिकांश काम लाइब्रेरी कॉल के माध्यम से किया जाएगा, तो इससे कोई फर्क नहीं पड़ता कि आप लाइब्रेरी को सी या पायथन से कॉल करते हैं या नहीं। यदि आप पाइथन, और सी लाइब्रेरी मॉड्यूल की अंतर्निहित भाषा सुविधाओं का उपयोग करते हैं, तो आप कभी भी पायथन के लिए प्रदर्शन हिट नहीं देख सकते हैं; यदि आप मूल पायथन या अपने जैसे कुछ में अपना एफएफटी लिखने का प्रयास करते हैं, तो आपको भयानक प्रदर्शन दिखाई देगा। वास्तव में उच्च स्तरीय हिस्सों को लिखने के लिए पायथन का उपयोग करें और पाइथन और सी पुस्तकालयों को भारी उठाने दें। – steveha

11

पाइथन बड़ी मात्रा में गैर-स्ट्रिंग डेटा को संभालने में बहुत धीमा है। कुछ परिचालनों के लिए, आप देख सकते हैं कि यह सी/सी ++ की तुलना में 1000 गुना धीमी है, इसलिए हाँ, आपको इसमें जांच करनी चाहिए और पाइथन में समय-महत्वपूर्ण एल्गोरिदम बनाने से पहले आपको आवश्यक बेंचमार्क करना चाहिए।

हालांकि, आप सी/सी ++ कोड में मॉड्यूल के साथ अजगर का विस्तार कर सकते हैं, ताकि समय-महत्वपूर्ण चीजें तेज हों, जबकि मुख्य कोड के लिए पाइथन का उपयोग करने में सक्षम हो।

+4

+1 मैं बेस-लाइन के रूप में भी इसे पायथन में लिखने की कोशिश करता हूं और यदि आवश्यक हो तो धीमे हिस्सों को सी के साथ प्रतिस्थापित करता हूं। –

5

इसे काम करें, फिर इसे तेजी से काम करें।

+1

मध्य चरण को न भूलें, "इसे सही तरीके से काम करें।" – JasCav

+0

मैंने अपनी परिभाषा में "इसे सही तरीके से काम करने" दिया है। लेकिन मैं तुम्हें सुनता हूँ। – KevDog

1

यदि आपका अधिकांश रनटाइम सी पुस्तकालयों में बिताया जाता है, तो आप इन पुस्तकालयों को कॉल करने के लिए उपयोग की जाने वाली भाषा महत्वपूर्ण नहीं है। आपकी समय-खाने वाली पुस्तकालयों में कौन सी भाषा लिखी गई है?

0

आपके विवरण से, गति चिंता का अधिक नहीं होना चाहिए (और आप सी, साइथन, जो भी आप इसे तेज़ी से बनाना चाहते हैं) का उपयोग कर सकते हैं, लेकिन स्मृति होगी। 64 एमबी अधिकतम वाले वातावरण के लिए (जहां ओएस और सभी को भी फिट होना चाहिए, है ना?), मुझे लगता है कि एक अच्छा मौका है कि पायथन लक्ष्य परिनियोजन के लिए सही उपकरण नहीं हो सकता है।

यदि आपके पास संभाल करने के लिए गैर-मामूली तर्क नहीं है, तो भी मैं पाइथन में प्रोटोटाइप करूँगा।

0

मैंने वास्तव में पाइफज़ी के उदाहरणों के प्रदर्शन को कभी भी माप नहीं लिया, लेकिन जैसा कि नया संस्करण 0.1.0 एफसीएलएल फाइलों के रूप में एफसीएल फाइलों को पढ़ सकता है। इस प्रारूप में बस अपनी अस्पष्ट प्रणाली का वर्णन करें, कुछ रैपर लिखें, और दोनों प्रकार के प्रदर्शन की जांच करें।

पीसीएलजी के साथ एफसीएल पढ़ने के लिए आपको एंटरल पायथन रनटाइम की आवश्यकता है, लेकिन पढ़ने के बाद आपको पढ़ने वाली वस्तु को चुनने में सक्षम होना चाहिए, इसलिए आपको लक्ष्य पर एंटरल ओवरहेड की आवश्यकता नहीं है।

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