साझा-मेमोरी समानांतर प्रोग्रामिंग के लिए पायथन पर मार्गदर्शिकाएँ


11

मुझे साझा मेमोरी मशीनों (C और FORTRAN दोनों में) के लिए OpenMP की कोडिंग करने का अनुभव है, जैसे मैट्रिक्स जोड़, गुणा आदि के सरल कार्य करने के लिए (बस यह देखने के लिए कि यह LAPACK के साथ कैसे प्रतिस्पर्धा करता है)। मुझे पता है कि OpenMP पर्याप्त है ताकि साधारण कार्यों को बिना डॉक्यूमेंटेशन के पूरा किया जा सके।

हाल ही में, मैं अपनी परियोजनाओं के लिए पायथन में स्थानांतरित हो गया और मुझे पूर्ण मूल से परे अजगर के साथ कोई अनुभव नहीं है।

मेरे 2 सवाल हैं:

  • क्या पायथन के लिए साझा मेमोरी समानांतर कंप्यूटिंग का वर्णन करने के लिए एक अच्छा गाइड (ऑनलाइन पीडीएफ) है?

  • इसे प्राप्त करने का सबसे अच्छा तरीका क्या है? मैंने थोड़ा सा देखा है ctypesऔर मुझे यकीन नहीं है कि यह सबसे अच्छा तरीका है। (सबसे अच्छी तरह से मेरा मतलब है कि प्रोग्रामर के समय और सिस्टम के समय के बीच एक अच्छा व्यापार है। यह कोड के लिए बहुत थकाऊ नहीं होना चाहिए और न ही निष्पादन धीमा होना चाहिए)

जवाबों:


8

[यह मेरी पहली पोस्ट है और मुझे आशा है कि मैंने एसई के उपयोग को पूरी तरह से गलत नहीं माना है - यदि मैं पहले से माफी मांगता हूं]

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

पूर्व मामले में मैं निश्चित रूप से NumPy / SciPy जैसे उपकरणों का उपयोग करने की सलाह देता हूं, जो कम से कम एमकेएल संकलित संस्करण से बहु-कोर आर्किटेक्चर का समर्थन करता है। यहां आप पर्यावरण चर "MKL_NUM_THREADS" के माध्यम से उपयोग करने के लिए कोर की संख्या को नियंत्रित कर सकते हैं। यह अत्यधिक अनुकूलित पुस्तकालयों पर निर्भर करता है जो हम प्रदर्शन के जानकारों को हरा सकते हैं। मेरा मानना ​​है कि आमतौर पर जब भी संभव हो इन उच्च गुणवत्ता और अत्यधिक अनुकूलित पुस्तकालयों का उपयोग करने की सलाह दी जाती है।

यदि आप एक मोटे स्तर पर समानता का दोहन करना चाहते हैं, तो पायथन मानक टूल मल्टीप्रोसेसिंग का उपयोग करना आसान है - और यह साझा डेटा ऑब्जेक्ट का भी समर्थन करता है। मल्टीप्रोसेसिंग पैकेज के हिस्से के रूप में उपयोग करने के लिए विभिन्न उपकरण हैं । मैंने अच्छे परिणामों के साथ कई समस्याओं के लिए map_async (SIMD लाइक ) और apply_async (MIMD लाइक ) का उपयोग किया है । बहु पैकेज काफी आसान उपयोग करने के लिए और अजगर का मतलब है कि आप आसानी से करने के लिए अपने कोड के अन्य संभावित प्रयोक्ताओं के लिए इसका इस्तेमाल करने में सक्षम हो उम्मीद कर सकते हैं का एक मानक हिस्सा जा रहा है। मल्टीप्रोसेसिंग भी सीधे NumPy डेटा ऑब्जेक्ट्स से लिंक करता है। मल्टीप्रोसेसिंग का उपयोग करते समयमैं तुम्हें करने के लिए वातावरण चर "MKL_NUM_THREADS" स्थापित करने के लिए सिफारिश करेंगे 1 ऐसी है कि NumPy केवल प्रत्येक प्रक्रिया / कार्यकर्ता के लिए एक कोर अनुमति दी है - अन्यथा आप NumPy समानांतर और जो संसाधन विवाद में जा सकते हैं बहु जो एक प्रदर्शन में ख़राबी के लिए होता है। मल्टीप्रोसेसिंग एक ही ऑपरेटिंग सिस्टम के तहत मल्टी-सीपीयू / मल्टी-कोर आर्किटेक्चर के लिए ठीक काम करता है। मैंने 4 x Xeon E7-4850 CPU (प्रत्येक 10 कोर) और 512 GB मेमोरी के साथ एक साझा मेमोरी कंप्यूटर पर मल्टीप्रोसेसिंग का उपयोग किया है और यह बहुत अच्छी तरह से काम करता है। साझा सरणियों द्वारा नियंत्रित किया जा सकता है multiprocessing.Array या sharedctypes । आप यहां पायथन प्रलेखन पा सकते हैं - जांच करेंLibrary.pdf फ़ाइल। मेरी कुछ स्लाइड्स हैं, जिनमें से कुछ बुनियादी हिस्सों को समझाया गया है - यदि आप चाहें तो मुझे पी.एम.

यदि आपके पास वितरित स्मृति के साथ क्लस्टर कॉन्फ़िगरेशन है, तो मेरा मानना ​​है कि mpi4py संभवतः पसंदीदा उपकरण है। मैंने खुद इसका उपयोग नहीं किया है, लेकिन मुझे पता है कि पायथन समानांतर प्रोग्रामिंग में इसका बहुत उपयोग किया जा रहा है।


3

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

और निश्चित रूप से सीधे MPI प्रोग्राम करने के लिए mpi4py है (उपरोक्त लेख में शामिल है)

मेरी लब्बोलुआब यह है: यदि आपका मुख्य हित वेक्टर / मैट्रिक्स-ऑपरेशंस है और समानता कुछ ऐसा है जिसे आपको "केवल" तेजी से करने की आवश्यकता है, तो आपको न्यूमपी / साइकोपी-इकोसिस्टम पर एक नज़र डालनी चाहिए और केवल तब ही जब आपको पता न चले वहाँ सामान है कि आप की जरूरत है आप अपने खुद के पुस्तकालयों लिखने लिखने चाहिए

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.