2011-05-27 16 views
9

सी फाइलों में पापी कार्यान्वयन का अनुवाद करने में घंटों लगते हैं और 2 जी मेम और इंटेल कोर 2 2GHz CPU के साथ एक आधुनिक नोटबुक पर pypy-c का निर्माण होता है।पीपीपी इतनी धीमी क्यों अनुवाद कर रही है?

मुझे पता है कि यह एक सीपीयू-गहन कार्य है, लेकिन क्या इसे इतना धीमा होना चाहिए? क्या गणना को कम करने के लिए कोई मौका या कमरा है, कंप्यूटिंग ऑर्डर को पुनर्व्यवस्थित करें और समय को दस मिनट तक काट दें?

उत्तर

12

अस्वीकरण: मैं PyPy पर एक विशेषज्ञ नहीं हूँ - विशेष रूप से, मैं RPython अनुवाद के विवरण समझ में नहीं आता, मैं केवल docs का हवाला देते हुए कर रहा हूँ और क्या मेलिंग सूची में और ब्लॉग में overheared।

"एक सीपीयू-गहन कार्य"? महीने की कमी के लिए मनोनीत। मैं खुद को अनुवाद प्रक्रिया के विवरण को समझ नहीं पा रहा हूं, लेकिन यहां तक ​​कि मैं आपको बता सकता हूं कि इसके कई विश्लेषण और अनुकूलन पास पूरे कोड में बहुत जटिल काम करते हैं।

  1. यह सामान्य रूप से पायथन कोड को चलाने के लिए शुरू होता है, उदा। मॉड्यूल आयात करना, मॉड्यूल-स्तरीय परिवर्तनीय परिभाषाओं को निष्पादित करना, कार्यों और वर्गों को परिभाषित करना, उन्हें सजावटी लगाने आदि। कुछ बिंदु पर, जब "पर्याप्त स्थिरता" हासिल की जानी चाहिए, तो यह वास्तविक अनुवाद प्रक्रिया को रोकता और जारी रखता है।
  2. यह जमे हुए इन-मेमोरी इन-प्रोग्रेस पायथन प्रोग्राम लेता है और इसे एक विशेष ऑब्जेक्ट स्पेस में चलाता है जो प्रवाह नियंत्रण, चर के संभावित मूल्य इत्यादि को अनुकरण करता है। यह अनिवार्य रूप से दुभाषिया को प्रतीकात्मक रूप से चला रहा है! यह टाइप अनुमान को करने के लिए करता है (पाइथन जैसी भाषा में सबकुछ आसान है) और अतिरिक्त विश्लेषण।
  3. परिणाम निम्न स्तर के कोड में परिवर्तित हो गए हैं।
  4. वैकल्पिक रूप से, ऑप्टिमाइज़ेशन (डिफ़ॉल्ट रूप से सक्षम, मुझे लगता है) और स्टैकलेस समर्थन (डिफ़ॉल्ट रूप से अक्षम, मुझे लगता है) के लिए एक जटिल परिवर्तन का पालन करें।
  5. फिर यह उन सभी चीजों को एक प्रकार की प्रणाली में कम कर रहा है जो नामित बैकएंड फिट बैठता है, कोड की लाखों लाइनें उत्पन्न करता है (हाल ही में मेलिंग सूची प्रविष्टि से ऐसा लगता है कि कम से कम 1 9 .c फाइलें हैं और उनमें से कम से कम एक है कम से कम 247,560 लाइनें - बस इतना है कि आपके पास उस परिमाण के क्रम का विचार है जिसके बारे में हम बात कर रहे हैं)।
  6. वह कोड gcc -O2 या इसी तरह के साथ संकलित किया गया है, जिसमें निश्चित रूप से बहुत सी पार्सिंग और जांच करने की जांच है और इसमें स्वयं के कई विश्लेषण और अनुकूलन पास होंगे।

तो हाँ, यह एक बहुत ही बढ़िया काम है। कोई आश्चर्य नहीं कि आपके puny CPU खो गया है। संदर्भ के लिए, पीपीपीई लोगों ने इंटेल ज़ीऑन डब्ल्यू 3580 (3.33 गीगा) का उपयोग किया जब benchmarking the translation process in November 2010। यह अभी भी लगभग 76 मिनट ले गया, भले ही उनके पास 12 जीबी रैम भी था - जो अगले अंक की ओर जाता है: प्रक्रिया में बहुत सारे की आवश्यकता है (2.3 बिट पर 64 जीबी उबंटू पर वापस, पता नहीं संख्याएं आपकी स्थिति में कैसे अनुवाद करती हैं)। मुझे पूरा यकीन है कि आप अपनी भौतिक रैम से अधिक हो जाते हैं - अत्यधिक स्वैपिंग और प्रदर्शन किक पर संबंधित किक दर्ज करें।

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

+1

त्वरित उत्तर के लिए धन्यवाद।चूंकि मेरे पास बहुत मेमोरी नहीं है, इसलिए मैं अनुवाद चलाने के लिए आधिकारिक पायथन का उपयोग करता हूं, जो शायद इस प्रक्रिया को डॉक्टर के अनुसार होने से भी अधिक समय तक बना देता है, लेकिन मुझे अपनी खराब मशीन पर सफलतापूर्वक बनाया गया है। – jaimechen

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