python - यदि पीपीपी 6.3 गुना तेज है तो मुझे सीपीथन पर पायपी का उपयोग क्यों नहीं करना चाहिए?




performance jit (7)

मैं PyPy परियोजना के बारे में बहुत कुछ सुन रहा हूं। उनका दावा है कि यह उनकी साइट पर CPython दुभाषिया की तुलना में 6.3 गुना तेज है।

जब भी हम पाइथन जैसे गतिशील भाषाओं के बारे में बात करते हैं, तो गति शीर्ष मुद्दों में से एक है। इसे हल करने के लिए, वे कहते हैं कि पीपीपी 6.3 गुना तेज है।

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

यदि पीपीपी इन महान चुनौतियों का समाधान कर सकती है, तो इसकी कमजोरियां क्या व्यापक रूप से गोद लेने से रोक रही हैं? यही कहना है, मेरे जैसे किसी को रोकना, एक सामान्य पायथन डेवलपर, अभी पीपीपी पर स्विच करने से?


  1. पीपीपी, जैसा कि दूसरों ने उल्लेख किया है, सी एक्सटेंशन के लिए कम समर्थन है । इसका समर्थन है, लेकिन आम तौर पर धीमी गति से पाइथन गति पर और यह सबसे अच्छा है। इसलिए बहुत सारे मॉड्यूल को केवल सीपीथन की आवश्यकता होती है । साइथन और न्यूम्पी संख्यात्मक के लिए बहुत ही भयानक हैं, और अधिकांश लोगों को वास्तव में पाइथन में गति की आवश्यकता होती है (+ पांडो, विज्ञान, इत्यादि) भारी मात्रा में। चूंकि वे या तो अस्तित्वहीन हैं या तेज़ी से समर्थित हैं और धीमे पाइथन की आवश्यकता वाले लोगों को धीमा करते हैं, अक्सर गति और आसानी से उपयोग के लिए दोनों सीपीथॉन के साथ बेहतर होते हैं
  2. पाइथन 3 समर्थन इस समय प्रयोगात्मक है। बस स्थिर हो गया है! 20 जून 2014 तक, पीपीपी 3 2.3.1 - फुलक्रम बाहर है !
  3. पीपीपी कभी-कभी "स्क्रिप्ट" के लिए तेज़ नहीं होता है , जो बहुत से लोग पाइथन का उपयोग करते हैं। ये शॉर्ट-रनिंग प्रोग्राम हैं जो कुछ सरल और छोटे करते हैं। चूंकि पीपीपी एक जेआईटी कंपाइलर है, इसका मुख्य लाभ लंबे समय तक चलने वाले और सरल प्रकार (जैसे संख्याओं) से आता है। स्पष्ट रूप से, पीपीपी की प्री-जेआईटी गति सीपीथॉन की तुलना में काफी खराब है
  4. जड़ता पीईपीई में जाने के लिए अक्सर रीटोलिंग की आवश्यकता होती है, जो कुछ लोगों और संगठनों के लिए बस बहुत अधिक काम करता है।

वे मुख्य कारण हैं जो मुझे प्रभावित करते हैं, मैं कहूंगा।

नोट: यह सवाल प्राचीन है! पुरानी जानकारी से निष्कर्ष निकालने से बचें।


कई परियोजनाओं के लिए, गति के मामले में विभिन्न पायथनों के बीच वास्तव में 0% अंतर होता है। यही वह है जो इंजीनियरिंग समय का प्रभुत्व है और जहां सभी अजगरों का पुस्तकालय समर्थन समान मात्रा में होता है।


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

पहले सवाल के लिए, मुझे लगता है कि यह पहले के साथ कैच -22 की तरह है: पीपीपी गति को बेहतर बनाने और अन्य कोड के साथ अंतःक्रियाशीलता बढ़ाने के प्रयास में तेजी से विकसित हो रहा है। इसने इसे आधिकारिक से अधिक प्रयोगात्मक बना दिया है।

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


मुझे उदाहरण मिल गए हैं, जहां पायपी पाइथन से धीमी है। लेकिन: केवल विंडोज़ पर।

C:\Users\User>python -m timeit -n10 -s"from sympy import isprime" "isprime(2**521-1);isprime(2**1279-1)"
10 loops, best of 3: 294 msec per loop

C:\Users\User>pypy -m timeit -n10 -s"from sympy import isprime" "isprime(2**521-1);isprime(2**1279-1)"
10 loops, best of 3: 1.33 sec per loop

तो, यदि आप पीपीपी के बारे में सोचते हैं, तो विंडोज़ भूल जाओ। लिनक्स पर, आप शानदार त्वरण प्राप्त कर सकते हैं। उदाहरण (1 और 1,000,000 के बीच सभी प्राइम्स सूचीबद्ध करें):

from sympy import sieve
primes = list(sieve.primerange(1, 10**6))

यह Python की तुलना में Pypy पर 10 (!) बार तेजी से चलाता है। लेकिन खिड़कियों पर नहीं। वहां तेजी से केवल 3x है।


यह आसान बनाने के लिए: पीपीपी उस गति को प्रदान करता है जिसमें सीपीथॉन की कमी है लेकिन इसकी संगतता बलिदान करती है। अधिकांश लोग, हालांकि, इसकी लचीलापन और इसकी "बैटरी-शामिल" सुविधा (उच्च संगतता) के लिए पाइथन चुनते हैं, इसकी गति के लिए नहीं (यह अभी भी वरीयता प्राप्त है)।


वह साइट दावा नहीं करती है कि पीपीपीई सीपीथॉन की तुलना में 6.3 गुना तेज है। उद्धरण के लिए:

सभी बेंचमार्क का ज्यामितीय औसत सीपीथॉन की तुलना में 0.16 या 6.3 गुना तेज है

यह आपके द्वारा किए गए कंबल कथन के लिए एक बहुत ही अलग बयान है, और जब आप अंतर को समझते हैं, तो आप कम से कम एक कारण समझेंगे कि आप "पीपीपी का उपयोग क्यों नहीं कर सकते"। ऐसा लगता है जैसे मैं नाइट-पिकिंग कर रहा हूं, लेकिन समझ रहा हूं कि ये दो कथन पूरी तरह अलग क्यों हैं।

इसे तोड़ने के लिए:

  • वे जो बयान देते हैं वे केवल उन बेंचमार्क पर लागू होते हैं जिनका उपयोग उन्होंने किया है। यह आपके कार्यक्रम के बारे में बिल्कुल कुछ भी नहीं कहता है (जब तक कि आपका प्रोग्राम बिल्कुल उनके बेंचमार्क के समान नहीं है)।

  • बयान बेंचमार्क के समूह के औसत के बारे में है। ऐसा कोई दावा नहीं है कि पीईपीई चलाने से उनके द्वारा परीक्षण किए गए कार्यक्रमों के लिए भी 6.3 गुना सुधार होगा।

  • ऐसा कोई दावा नहीं है कि पीपीपी उन सभी कार्यक्रमों को भी चलाएगा जो सीपीथन चलती हैं , अकेले चलो।


प्रश्न: यदि पीपीपी सीपीथॉन की तुलना में इन महान चुनौतियों (गति, स्मृति खपत, समांतरता) को हल कर सकती है, तो इसकी कमजोरियां क्या व्यापक रूप से गोद लेने से रोक रही हैं?

ए: सबसे पहले, इस बात का कोई सबूत नहीं है कि पीपीपी टीम सामान्य रूप से गति की समस्या को हल कर सकती है। दीर्घकालिक सबूत दिखा रहे हैं कि पीपीपी कुछ पायथन कोड को सीपीथन से धीमा कर देता है और यह दोष पीपीपी में बहुत गहराई से दिखता है।

दूसरा, पीपीपी का वर्तमान संस्करण मामलों के बजाय बड़े पैमाने पर सीपीथॉन की तुलना में अधिक स्मृति का उपभोग करता है। तो PyPy ने स्मृति खपत की समस्या को अभी तक हल नहीं किया है।

चाहे पीपीपी ने बड़ी चुनौतियों का हल किया हो और सामान्य रूप से तेज़ी से, कम स्मृति भूख लगी हो, और सीपीथॉन की तुलना में समांतरता के लिए अधिक अनुकूलता एक खुला प्रश्न है जिसे अल्प अवधि में हल नहीं किया जा सकता है। कुछ लोग सट्टेबाजी कर रहे हैं कि पीईपी कभी भी सामान्य समाधान की पेशकश नहीं कर पाएगा जिससे इसे सभी मामलों में सीपीथन 2.7 और 3.3 पर हावी होने में मदद मिलेगी।

यदि पीपीपी सामान्य रूप से सीपीथन से बेहतर होता है, जो संदिग्ध है, तो इसकी व्यापक अपनाने को प्रभावित करने वाली मुख्य कमजोरी सीपीथॉन के साथ इसकी अनुकूलता होगी। इस तथ्य के रूप में भी मुद्दे मौजूद हैं कि सीपीथन सीपीयू और ओएस की विस्तृत श्रृंखला पर चलता है, लेकिन ये मुद्दे पीपीपी के प्रदर्शन और सीपीथन-संगतता लक्ष्यों की तुलना में बहुत कम महत्वपूर्ण हैं।

प्रश्न: मैं पीपीपी के साथ सीपीथॉन के प्रतिस्थापन में क्यों नहीं छोड़ सकता?

ए: पीपीपी सीपीथॉन के साथ 100% संगत नहीं है क्योंकि यह हुड के नीचे सीपीथन को अनुकरण नहीं कर रहा है। कुछ कार्यक्रम अभी भी सीपीथॉन की अनूठी विशेषताओं पर निर्भर हो सकते हैं जो पीपीपी में अनुपस्थित हैं जैसे कि सी बाइंडिंग, पायथन ऑब्जेक्ट्स और विधियों के सी कार्यान्वयन, या सीपीथन के कचरा कलेक्टर की बढ़ती प्रकृति।





cpython