पायथन के सीपीयू उपयोग को कैसे बढ़ाया जाए


21

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

क्या पायथन बनाने के लिए 50% या मेरे सीपीयू के अधिक उपयोग का कोई तरीका है?


क्या आपका सीपीयू एक मल्टीकोर सीपीयू है?
जर्नीमैन गीक

हां, यह एक i5-480M है और नियंत्रण कक्ष में> पावर विकल्प> सीपीयू मिनट / अधिकतम यह 100% है
क्रिस्टोस के।

जवाबों:


20

बस, आप 4 लॉजिकल कोर के साथ एक सिस्टम में एक थ्रेडेड एप्लिकेशन चला रहे हैं - जैसे, आपके पास एक प्रक्रिया है, सभी कोर का उपयोग करके।

आप (और यह गैर तुच्छ है) एल्गोरिथ्म को फिर से लिखने के लिए बहु-थ्रेडेड होने की आवश्यकता है, या देखें कि क्या आप अपने CPU का अधिक उपयोग करने के लिए विशिष्ट कोर पर सिर्फ 2 या अधिक उदाहरण चला सकते हैं। कोई अन्य रास्ता नहीं है।


मुझे डर था कि यह मामला होगा, लेकिन विंडोज़ टास्क मैनेजर में सीपीयू उपयोग आरेखों में मुझे यह नहीं दिखता है कि एल्गोरिथ्म को निष्पादित करते समय यह 1 आरेख पर हो, इसके विपरीत, मैं सभी को कुछ महत्वपूर्ण वृद्धि के साथ देखता हूं।
क्रिस्टोस के।

1
आपका सिस्टम कोर के बीच लोड को संतुलित कर रहा है। फिर भी, एक बार में दो लाशों का उपयोग नहीं किया जाता है।
ग्रोनोस्तज

दोस्तों आपने मेरे डर की पुष्टि की, ऐसा लगता है कि समय के बारे में मैं थ्रेडिंग के बारे में पढ़ना शुरू कर देता हूं
क्रिस्टोस के।

@ भग्न_7: थ्रेडिंग आपके द्वारा अपेक्षित लाभ नहीं ला सकती है। मेरा जवाब नीचे देखें।
रोलैंड स्मिथ

15

पायथन भाषा मल्टी-कोर सीपीयू से पहले होती है, इसलिए यह अजीब नहीं है कि यह उन्हें मूल रूप से उपयोग नहीं करता है।

इसके अतिरिक्त, सभी प्रोग्राम एकाधिक कोर से लाभ नहीं उठा सकते हैं। चरणों में की गई गणना, जहां अगला चरण पिछले चरण के परिणामों पर निर्भर करता है, अधिक कोर का उपयोग करके तेज नहीं होगा। ऐसी समस्याएं जिन्हें वेक्टरकृत किया जा सकता है (डेटा के बड़े सरणियों में समान गणना लागू करना) कई कोर का उपयोग करने के लिए अपेक्षाकृत आसान हो सकता है क्योंकि व्यक्तिगत गणना स्वतंत्र हैं।

जब आप बहुत सारी गणनाएं कर रहे हैं, तो मैं मान रहा हूं कि आप सुन्न का उपयोग कर रहे हैं ? यदि नहीं, तो इसे देखें। यह C में लिखा गया एक एक्सटेंशन है जो ATLAS जैसी अनुकूलित रैखिक बीजगणित पुस्तकालयों का उपयोग कर सकता है। यह मानक पायथन की तुलना में संख्यात्मक गणनाओं को तेज कर सकता है।

कहा जा रहा है कि, अजगर के साथ कई कोर का उपयोग करने के कई तरीके हैं।

  • बिल्ट-इन multiprocessingमॉड्यूल है। multiprocessing.Poolवर्ग के साथ एक से अधिक CPU भर में vectorization प्रदान करता है map()और संबंधित तरीकों। हालांकि यहां व्यापार बंद है। यदि आपको प्रक्रियाओं के बीच बड़ी मात्रा में डेटा का संचार करना है, तो यह ओवरहेड कई कोर के लाभ को नकार सकता है।
  • सुन्न के एक उपयुक्त निर्माण का उपयोग करें। यदि खसखस ​​एक मल्टीथ्रेडिंग एटलस लाइब्रेरी के साथ बनाया गया है, तो यह बड़ी समस्याओं पर तेज होगा।
  • विस्तार मॉड्यूल का उपयोग करें जैसे सुन्न , समानांतर अजगर , कोरपी या कोपेनहेगन वेक्टर बाइट कोड

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


अब तक मैंने पाइथन 2.7 आयरनपीथॉन का इस्तेमाल किया है और पिपी की कोशिश की है। मैं numpy एक मौका दूँगा। लेकिन फिर भी मुझे किसी भी मल्टीप्रोसेसिंग मॉड्यूल का उपयोग करने से पहले पढ़ना होगा।
क्रिस्टोस के।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.