2011-12-30 16 views
9

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

मैं यह पूछ रहा हूं क्योंकि मुझे यकीन नहीं है, क्या सी ++ में लिखे गए कोड और पायथन में लिखे गए कोड के बीच स्विचिंग नियंत्रण की कोई प्रदर्शन लागत है? क्या मुझे प्रत्येक अवसर पर सी ++ में लिखे गए कोड का उपयोग करना चाहिए, या क्या मुझे सरल कार्यों के लिए सी ++ पर वापस कॉल करने से बचना चाहिए क्योंकि सी ++ कोड निष्पादित करने से आपके पास कोई भी गति लाभ हो सकता है, जो भाषाओं के बीच स्विचिंग की लागत से बेकार है?

संपादित करें: मुझे यह स्पष्ट करना चाहिए, मैं वास्तव में किसी समस्या को हल करने के लिए नहीं कह रहा हूं। मैं जिज्ञासा से पूरी तरह से पूछ रहा हूं और भविष्य के लिए ध्यान में रखना कुछ मूल्यवान है। इसलिए मुझे वैकल्पिक समाधानों में दिलचस्पी नहीं है, मैं तकनीकी दृष्टिकोण से जवाब जानना चाहता हूं। :)

+0

क्या यह पाइथन में प्राथमिक एप्लिकेशन लिखने का विकल्प है, और एक पायथन मॉड्यूल लिखने के लिए सी ++ का उपयोग करें जो आपका एप्लिकेशन उपयोग कर सकता है? फिर भाषाओं को बदलने की लागत शून्य होनी चाहिए। –

उत्तर

1

लागत मौजूद है लेकिन नगण्य है। ऐसा इसलिए है क्योंकि आप संभवतः सीई ++ - संगत प्रतिनिधित्वों में पाइथन के उच्च स्तरीय डेटाटाइप को परिवर्तित करने के लिए थोड़ा सा काम करते हैं। बेशक यह एक सी ++ फ़ंक्शन को दूसरे से कॉल करने की लागत के समान है, कुछ ओवरहेड है। जब यह अजगर से सी ++ करने के लिए स्विच करने के लिए एक अच्छा विचार है के लिए नियम हैं:

कुछ तर्क

एक समारोह जो डेटा

एक समारोह की एक छोटी राशि पर प्रसंस्करण की एक बड़ी राशि करता है के साथ एक समारोह जो शायद ही कभी संभव के रूप में कहा जाता है - समारोह को मजबूत कॉल यदि संभव हो तो

+1

क्रम में: 1. तर्कों की संख्या को कुछ भी करने के साथ क्या करना है? 2. * बड़ी * मात्रा में डेटा पर बड़ी मात्रा में प्रसंस्करण के बारे में क्या? सी ++ ऐसा नहीं कर सकता? 3: यदि इसे शायद ही कभी बुलाया जाता है, तो आप पृथ्वी पर क्यों सी ++ में परिवर्तित करने के जबरदस्त प्रयास करेंगे? ऐसा लगता है कि आपको उन लोगों पर ध्यान देना चाहिए जो वास्तव में प्रसंस्करण समय खाते हैं। –

+1

@ क्रिसिस: 1. जैसा कि दान कहते हैं, यह आम तौर पर एक दुभाषिया से बहस तक पहुंचने के लिए बहुत बेकार है। यदि आपको अपने योग को वापस करने के लिए सौ संख्यात्मक तर्क लेने के लिए एक फ़ंक्शन की आवश्यकता है, तो यह C++ कार्यान्वयन में कॉल करने के लिए बहुत अधिक समझ नहीं लेगा। वही अवधारणा गाइड "बड़ा ... प्रसंस्करण ... छोटा ... डेटा" - यदि आप सी ++ कोड को कम तर्क दे सकते हैं (भले ही वे बड़े सरणी कहें) और यह कुछ जटिल कर रहा है जैसे डेटा पर ऑप्टिकल कैरेक्टर रिकॉग्नाइजेशन , तो यह C++ में लागू/कॉल करने के लायक होने की संभावना है। –

+1

@ क्रिस: 3. "शायद ही कभी _possible_" - कुछ अजीब, जटिल गणित कार्य को 20 मानों पर लागू करने के लिए आवश्यक एक तंग लूप के माध्यम से अरबों में से प्रत्येक को कहें। सी ++ कॉल को समेकित करने पर विचार करें, इसलिए सी ++ में एक कॉल को सभी 20 मान एक साथ दिए जाते हैं, जिससे उनके परिणाम एक साथ लौटते हैं। –

0

सबसे अच्छा मीट्रिक कुछ है कि आप के लिए wieghs होना चाहिए ....

  • विकास, डिबगिंग और आसान परीक्षण (कम करती देव लागत)
  • रखरखाव की लागत को कम कर देता है
  • प्रदर्शन आवश्यकता को पूरा करता है (समाधान प्रदान करता है)
7

मैं नहीं जानता कि क्या इसका एक ठोस नियम है, लेकिन एक सामान्य नियम यह है कि कई का पालन करने के लिए है:

  • पायथन में प्रोटोटाइप। यह लिखने में तेज़ है, और पढ़ने/कारण के लिए आसान हो सकता है।
  • एक बार आपके पास प्रोटोटाइप हो जाने के बाद, अब आप धीमे भाग की पहचान कर सकते हैं जिन्हें सी ++ (प्रोफाइलिंग के माध्यम से) में लिखा जाना चाहिए।
  • आपके कोड के डोमेन के आधार पर, धीमी बिट्स आमतौर पर 'आंतरिक लूप' प्रकार के कोड से अलग होती हैं, इसलिए पाइथन के बीच स्विच की संख्या अपेक्षाकृत कम होनी चाहिए।
  • यदि आपका प्रोग्राम पर्याप्त तेज़ है, तो आपने C++ में बहुत अधिक लिखकर अपने कोड को समय-समय पर अनुकूलित करने से सफलतापूर्वक टाल दिया है।
+1

यह पेटेंट पक्षपातपूर्ण है, जैसे कि प्रत्येक एप्लिकेशन पायथन में बेहतर लिखा गया था। पाइथन स्केल नहीं करता है (कोड या प्रदर्शन या डेटा हैंडलिंग की तरह) सी ++ करता है और सी ++ के कई उपयोगों के लिए उपयुक्त नहीं है। प्रश्न मौजूदा सी ++ प्रोग्राम का सुझाव देता है जिसे अनुकूलन के लिए कुछ रन-टाइम व्याख्या की आवश्यकता है। "लिखने के लिए तेज़, पढ़ने के लिए आसान/कारण" सिर्फ बकवास है - पाइथन के साथ पुस्तकालयों को "अभी तक एक और" कक्षा की समस्याओं को जल्दी से शुरू करना आसान है, लेकिन काम के लिए अनुकूलित पुस्तकालयों के साथ परिपक्व सी ++ वातावरण हो सकता है फिर से बेहतर –

+0

@ टोनी, पठनीयता आम तौर पर व्यक्तिपरक है (यही कारण है कि मैंने कहा कि कोई ठोस नियम नहीं है), और मुझे यकीन है कि यह (पायथन) समस्या के हर डोमेन के लिए सही नहीं है। जिन चीजों पर मैंने काम किया है, उनके लिए, हालांकि, यह एलओसी और व्यक्तित्व के संदर्भ में अच्छी तरह से बढ़ा है। पूर्वाग्रह पर एक आखिरी नोट ... मुझे लगता है कि अधिकांश सी/सी ++ चीजें मेरे लिए पढ़ना बहुत मुश्किल हैं, लेकिन शायद यह इसलिए है क्योंकि मैं एक अजगर लड़का हूं। आपकी प्रोफ़ाइल कहती है कि आप बहुत सी ++ लड़के हैं, इसलिए आपकी राय समझाएगी। –

+0

इसके अलावा, यह प्रश्न पक्षपातपूर्ण उत्तर मांग रहा है, क्योंकि कोई भी (अपना सटीक कार्यक्रम देखे बिना) उसके लिए * सर्वश्रेष्ठ * विकल्प निश्चित रूप से कह सकता है। –

2

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

  • पहुंच सकता है या यथोचित या कॉल करने के लिए एक पैरामीटर के रूप में उजागर नहीं कर सकते हैं कि हो (कुछ अन्य पंजीकरण प्रक्रिया दुभाषिया के माध्यम से कुछ डेटा अद्यतन करने के लिए का समर्थन करता है)
  • प्रसंस्करण

के कुछ महत्वपूर्ण भाग के दौरान बेहतर प्रदर्शन प्राप्त करने के लिए पिछले के लिए, (यह मानते हुए यह वहाँ तो विकसित करने के लिए), के रूप में आसान है, तो यह धीमी गति से की पहचान है कहाँ और कैसे कुछ सी पहले स्क्रिप्ट की कोशिश ++ कोड मदद कर सकता है। यदि/जहां प्रदर्शन एक समस्या साबित करता है - सी ++ से दुभाषिया या इसके विपरीत में कॉल करते समय एक सामान्य दिशानिर्देश के रूप में: जितना संभव हो उतना काम करने की कोशिश करें, फिर अन्य सिस्टम में कॉल करें। यदि आप अटक जाते हैं, तो एक विशिष्ट समस्या और वास्तविक कोड के साथ स्टैक ओवरफ्लो पर वापस आएं।

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