2012-02-20 4 views
8

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

एक और सवाल, मुझे पता है कि अगर मैं बहुत कम जोड़ता हूं (प्रोग्राम धीमा है) लेकिन क्या होगा यदि मैं 'बहुत अधिक' जोड़ूं?

धन्यवाद!

उत्तर

9

यदि आपके सभी थ्रेड/प्रक्रियाएं वास्तव में सीपीयू-बाउंड हैं, तो आपको सीपीयू रिपोर्ट कोर के रूप में कई प्रक्रियाएं चलनी चाहिए। HyperThreading के कारण, प्रत्येक भौतिक CPU कोर एकाधिक वर्चुअल कोर प्रस्तुत करने में सक्षम हो सकता है। वर्चुअल कोर की संख्या प्राप्त करने के लिए multiprocessing.cpu_count पर कॉल करें।

अगर केवल पी अपने धागे की 1 के सीपीयू बाध्य है, तो आप पी से गुणा करके कि संख्या को समायोजित कर सकते हैं। उदाहरण के लिए, यदि आपकी आधे प्रक्रियाएं सीपीयू-बाउंड हैं (पी = 0.5) और आपके पास दो कोर हैं जिनमें 2 कोर और 2 एक्स हाइपर थ्रेडिंग है, तो आपको 0.5 * 2 * 4 * 2 = 8 प्रक्रियाएं शुरू करनी चाहिए।

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

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

यदि आप सुनिश्चित नहीं हैं कि आपका एप्लिकेशन सीपीयू-बाउंड और/या पूरी तरह से स्केलिंग है, तो बस विभिन्न थ्रेड गणनाओं के साथ सिस्टम लोड का निरीक्षण करें। आप चाहते हैं कि वर्चुअल कोर की संख्या होने के लिए सिस्टम 100% से कम हो, या अधिक सटीक uptime हो।

+0

महान उत्तर के लिए धन्यवाद। वह सब नहीं पता था। यदि ऐप में कुछ गैर-सीपीयू बाध्य भाग हैं तो क्या होगा। उदाहरण के लिए, सीपीयू गणनाओं के बहुत सारे, लेकिन फिर अंतिम परिणाम फ़ाइल या डेटाबेस में सहेजा जाता है। क्या इसका मतलब है कि मुझे और प्रक्रियाएं बनाना चाहिए क्योंकि कुछ को अंतिम नेटवर्क (डेटाबेस) या डिस्क लिखने (फ़ाइल लिखने) के लिए इंतजार करना है? – Lostsoul

+0

@Lostsoul सामान्य रूप से, हाँ यदि डिस्क-बाध्य गतिविधि का हिस्सा महत्वपूर्ण है। यदि आप एक संक्षिप्त सारांश फ़ाइल लिख रहे हैं (कहें, एक जटिल दृश्य raytracing के बाद छवि), यह प्रभाव नगण्य है।यदि आपका एप्लिकेशन बहुत सारे डेटा को पढ़ता और लिखता है, तो आपको वास्तव में प्रक्रियाओं की संख्या में वृद्धि करनी चाहिए। एक पैराग्राफ के साथ उत्तर अपडेट किया गया: यदि आप सुनिश्चित नहीं हैं, तो इसे आज़माएं! – phihag

+2

केवल अवलोकन भाग में जोड़ने के लिए: आप सिंक्रनाइज़ेशन ओवरहेड की वजह से सीपीयू उपयोग में वृद्धि से बचना चाहते हैं। इसलिए, प्रयोग करते समय, आपको सिस्टम लोड, और अपने एप्लिकेशन थ्रूपुट दोनों को मापना चाहिए। – millimoose

1

यह निश्चित रूप से एप्लिकेशन के आधार पर आधारित है। यदि यह सीपीयू-भारी है, तो कोर की संख्या एक प्रारंभिक बिंदु है। यदि यह आईओ-भारी है, तो mulitple प्रक्रिया वैसे भी प्रदर्शन में मदद नहीं करेगा। यदि यह ज्यादातर आईओ (उदा। पीएनजी अनुकूलन) के साथ ज्यादातर सीपीयू है, तो आप कोर की संख्या से कुछ प्रक्रियाओं को अधिक चला सकते हैं।

कुछ के लिए जानने का एकमात्र तरीका कुछ यथार्थवादी इनपुट के साथ अपना आवेदन चलाने और संसाधन उपयोग की जांच करना है। यदि आपके पास अतिरिक्त समय तक CPU समय है, तो अधिक कार्यकर्ता प्रक्रियाएं जोड़ें।

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

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