2009-08-20 1 views
35

हाल ही में समानांतर कंप्यूटिंग भर के सभी प्रचार के साथ, मैं आदि समानांतरवाद बारे में बहुत कुछ सोच किया गया है, संख्या क्रंचिंग, समूहों, ...एरलांग की समांतरता संख्यात्मक कंप्यूटिंग में अपनी कमजोरियों को कब दूर करती है?

मैं Learn You Some Erlang पढ़ना शुरू किया। जैसे-जैसे लोग सीख रहे हैं (स्वयं शामिल हैं), एर्लांग एक बहुत ही प्रभावशाली, सुरुचिपूर्ण तरीके से समेकन को संभालता है।

तब लेखक ने दावा किया कि एरलांग not ideal for number crunching है। मैं समझ सकता हूं कि एरलांग जैसी भाषा सी से धीमी होगी, लेकिन समरूपता का मॉडल आदर्श रूप से छवि हैंडलिंग या मैट्रिक्स गुणा जैसी चीजों के अनुकूल है, भले ही लेखक विशेष रूप से ऐसा नहीं कहता है।

क्या यह वास्तव में बुरा है? क्या कोई टिपिंग प्वाइंट है जहां एरलांग की ताकत इसकी स्थानीय गति कमजोर पड़ती है? क्या गति से निपटने के लिए क्या उपाय किए जा रहे हैं?

स्पष्ट होने के लिए: मैं बहस शुरू करने की कोशिश नहीं कर रहा हूं; मै सिर्फ जानना चाहता हूँ।

+0

एरलांग को भारी और भरोसेमंद वितरित दूरसंचार सेवाओं के निर्माण के लिए एक समवर्ती भाषा के रूप में बनाया गया था - यह काफी स्वाभाविक है कि वे उदा। सामान्य संख्या क्रंचिंग से अधिक प्रोटोकॉल पार्सिंग। – nos

+0

मुझे "व्यक्तिपरक और तर्कवादी" के आधार पर एक करीबी वोट दिखाई देता है, और मैं मानता हूं कि शीर्षक कुछ वांछित होने के लिए छोड़ देता है, लेकिन प्रश्न अच्छी तरह से और पोषक रूप से phrased हैं, और आज तक हमारे पास केवल सहायक प्रतिक्रियाएं हैं। मैं कहूंगा कि चीजें नीचे जाने तक इसे छोड़ दें। ** @ जॉन: ** शीर्षक को फिर से लिखने पर विचार करें। – dmckee

+0

इसके बारे में कैसे? मैंने वास्तव में चीजों को ध्यान से और निष्पक्ष रूप से शब्दों की कोशिश करने की कोशिश की। मैंने सिर्फ अपने सवालों के जवाब देने के लिए चीजें नहीं देखी हैं, इसलिए मुझे बस पूछना पड़ा। –

उत्तर

43

समानता के बारे में सोचने की गलती है क्योंकि केवल कच्चे नंबर की क्रंचिंग शक्ति के बारे में ही। एर्लांग एक क्लस्टर कंप्यूटर के तरीके के करीब है, कहें, एक जीपीयू या क्लासिक सुपरकंप्यूटर।

आधुनिक जीपीयू और पुराने शैली के सुपरकंप्यूटर में, प्रदर्शन वेक्टरकृत अंकगणितीय, विशेष उद्देश्य गणना हार्डवेयर, और प्रसंस्करण इकाइयों के बीच कम विलंबता संचार के बारे में है। चूंकि संचार विलंबता कम है और प्रत्येक व्यक्तिगत कंप्यूटिंग इकाई बहुत तेज है, आदर्श उपयोग पैटर्न मशीन के रैम को डेटा के साथ लोड करना है और इसे एक बार में सभी को क्रंच करना है। इस प्रसंस्करण में नोड्स के बीच गुजरने वाले बहुत सारे डेटा शामिल हो सकते हैं, जैसा कि छवि प्रसंस्करण या 3 डी में होता है, जहां इनपुट फॉर्म से आउटपुट फॉर्म में डेटा को बदलने के लिए बहुत सारे CPU- बाध्य कार्य होते हैं। इस प्रकार की मशीन खराब विकल्प होती है जब आपको अक्सर डिस्क, नेटवर्क या डेटा के लिए कुछ अन्य धीमी I/O चैनल पर जाना पड़ता है। यह कम से कम एक महंगा, विशेष प्रोसेसर को निष्क्रिय करता है, और शायद डेटा प्रोसेसिंग पाइपलाइन को भी चुटकुले करता है, इसलिए कुछ और नहीं किया जाता है।

यदि आपके प्रोग्राम को धीमी आई/ओ चैनलों के भारी उपयोग की आवश्यकता है, तो एक बेहतर प्रकार की मशीन एक क्लस्टर की तरह कई सस्ते स्वतंत्र प्रोसेसर के साथ एक है। आप एक मशीन पर एर्लांग चला सकते हैं, इस मामले में आपको उस मशीन के भीतर क्लस्टर की तरह कुछ मिलता है, या आप आसानी से इसे वास्तविक हार्डवेयर क्लस्टर पर चला सकते हैं, इस मामले में आपके पास क्लस्टर का समूह है।यहां, संचार ओवरहेड अभी भी प्रसंस्करण इकाइयों को निष्क्रिय करता है, लेकिन क्योंकि आपके पास कंप्यूटिंग हार्डवेयर के प्रत्येक बिट पर चल रही कई प्रोसेसिंग इकाइयां हैं, इरलांग तत्काल अन्य प्रक्रियाओं में से एक पर स्विच कर सकती है। यदि ऐसा होता है कि एक पूरी मशीन आई/ओ पर प्रतीक्षा कर रही है, तो आपके पास अभी भी हार्डवेयर क्लस्टर में अन्य नोड्स हैं जो स्वतंत्र रूप से संचालित हो सकते हैं। यह मॉडल केवल तब टूट जाता है जब संचार ओवरहेड इतना ऊंचा होता है कि प्रत्येक नोड किसी अन्य नोड पर या सामान्य I/O के लिए प्रतीक्षा कर रहा है, इस मामले में आपको या तो तेज I/O या अधिक नोड्स की आवश्यकता होती है, जिनमें से दोनों Erlang स्वाभाविक रूप से लाभ लेते हैं का।

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

क्लासिक केस जहां आपको बिल्कुल क्लासिक सुपरकंप्यूटर की आवश्यकता है, मौसम पूर्वानुमान है। यहां, आप वायुमंडल को cubes में विभाजित करते हैं और प्रत्येक घन में क्या होता है यह जानने के लिए भौतिकी सिमुलेशन करते हैं, लेकिन आप क्लस्टर का उपयोग नहीं कर सकते क्योंकि प्रत्येक घन के बीच हवा चलता है, इसलिए प्रत्येक घन लगातार अपने 6 आसन्न पड़ोसियों के साथ संचार कर रहा है। (वायु किनारों के किनारों या कोनों से गुजरती नहीं है, जो असीम रूप से ठीक है, इसलिए यह अन्य 20 पड़ोसी क्यूब्स से बात नहीं करती है।) इसे क्लस्टर पर चलाएं, चाहे उस पर एरलांग चल रहा हो या कुछ अन्य सिस्टम, और यह तुरंत I/O बाध्य हो जाता है।

+0

यह बहुत उपयोगी था - धन्यवाद। –

10

क्या कोई टिपिंग पॉइंट है जहां एरलांग की ताकत इसकी स्थानीय गति कमजोरी को खत्म करती है?

ठीक है, बिल्कुल है। उदाहरण के लिए, जब एक खरब संख्या :) की औसत खोजने की कोशिश: बस इससे पहले कि आप पोस्ट

http://matpalm.com/median/question.html

, मैं सूचना के लिए इस erlang.reddit.com पर नंबर 1 पद था हुआ।

+2

यह बहुत अच्छा है - मुझे –

+1

अच्छी तरह से पढ़ना होगा , आप इसे किसी भी भाषा में कर सकते हैं जो समांतरता प्रदान करता है। यह Erlang में बस स्वच्छ और सुरुचिपूर्ण के रूप में नहीं होगा। तो यह प्रदर्शन/समांतरता – jalf

+2

की तुलना में एक शुद्धता/प्रयास ट्रेडऑफ से अधिक है कार्यकर्ता मॉड्यूल (number_less_than/2) के स्रोत कोड को देखते हुए, वे संभावित रूप से प्रत्येक व्यक्तिगत सूची तत्व की जांच के लिए एक अलग प्रक्रिया उत्पन्न कर सकते थे, और फिर उन्हें जोड़ सकते हैं ओ (लॉग एन) समय। इसके बजाय उन्होंने ओ (एन) समय में इसे रैखिक रूप से करने का फैसला किया। क्या यह एक ऐसा मामला होगा जहां डेटा प्रतिनिधित्व समांतरता को सीमित करता है? – Zed

5

एरलांग संख्यात्मक कोड को तेजी से निष्पादित करने का दबाव है। HiPe कंपाइलर उदाहरण के लिए बीईएएम बाइटकोड के बजाय देशी कोड में संकलित करता है, और संभवत: फ्लोटिंग पॉइंट्स पर कोड पर इसका सबसे प्रभावी अनुकूलन है जहां यह मुक्केबाजी से बच सकता है। यह फ़्लोटिंग पॉइंट कोड के लिए बहुत फायदेमंद है, क्योंकि यह सीधे एफपीयू रजिस्टरों में मूल्यों को स्टोर कर सकता है।

एरलांग उपयोग के बहुमत के लिए, एरलांग बहुत तेज़ है। वे हमेशा नियंत्रण प्रणाली लिखने के लिए एरलांग का उपयोग करते हैं जहां सबसे महत्वपूर्ण गति माप कम विलंब प्रतिक्रिया होती है। लोड के तहत प्रदर्शन आईओ-बाउंड होता है। ये उपयोगकर्ता HiPe से दूर रहना चाहते हैं क्योंकि यह लाइव सिस्टम को डिबग करने में लचीला/लचीला नहीं है।

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

आपको विकास के लिए HiPe का पालन करना चाहिए।


छवि जोड़तोड़ और मैट्रिक्स गुणा का आपका उदाहरण हालांकि Erlang के लिए बहुत बुरा मिलान के रूप में मुझे लगता है। वे उदाहरण हैं जो वेक्टर/सिमड ऑपरेशंस से लाभान्वित होते हैं। Erlang समांतरता पर अच्छा नहीं है (जहां एक ही एक ही चीज एक ही समय में कई मानों के लिए करता है)।

एरलांग प्रक्रियाएं एमआईएमडी हैं, एकाधिक निर्देश एकाधिक डेटा हैं। Erlang पैटर्न मिलान और रिकर्सिव loops के पीछे कई शाखाओं करता है। यह सीपीयू निर्देश पाइपलाइनिंग को मारता है।

भारी समानांतर समस्याओं के लिए सबसे अच्छा आर्किटेक्चर GPUs हैं। एक कार्यात्मक भाषा में जीपीयू प्रोग्रामिंग के लिए मैं उन्हें लक्षित प्रोग्राम बनाने के लिए हास्केल का उपयोग करने में सबसे अच्छी क्षमता देखता हूं। एक जीपीयू मूल रूप से इनपुट डेटा से आउटपुट डेटा तक एक शुद्ध कार्य है।एफपीजीए सर्किट बनाने के लिए हास्केल में Lava प्रोजेक्ट देखें, यदि हास्केल में सर्किट को इतनी स्वच्छता से बनाना संभव है, तो GPUs के लिए प्रोग्राम डेटा बनाना कठिन नहीं हो सकता है।

सेल आर्किटेक्चर वेक्टरिज़ेबल समस्याओं के लिए भी बहुत अच्छा है।

+1

यह काफी दिलचस्प है कि आप कहते हैं, "एर्लांग समानांतरता में अच्छा नहीं है (जहां एक ही समय में एक ही चीज़ को कई मानों में एक ही काम करता है)", जो मुझे लगता है कि सही है - अभी तक पिछले उत्तर में दिए गए लिंक से पता चलता है कि एरलांग कितना अच्छा है क्योंकि समांतर में एकाधिक मानों के लिए एक ही चीज़ करने में सक्षम होने (यह जांचना कि मूल्य स्थिर से कम है या नहीं)। – Zed

10

लगभग किसी भी भाषा को समांतर किया जा सकता है। कुछ भाषाओं में यह आसान है, दूसरों में यह बट में दर्द है, लेकिन यह किया जा सकता है। यदि आप एक ग्रिड में 8000 सीपीयू के एक सी ++ प्रोग्राम को चलाने के लिए चाहते हैं, तो आगे बढ़ें! तुम यह कर सकते हो। यह पहले किया गया है।

एरलांग कुछ भी नहीं करता जो अन्य भाषाओं में असंभव है। यदि एक सीपीयू एक एरलैंग प्रोग्राम चला रहा है तो एक ही सीपीयू से सी ++ प्रोग्राम चलाने से कम कुशल होता है, तो दो सौ सीपीयू चल रहे एरलांग भी दो सौ सीपीयू के चल रहे सी ++ से धीमे हो जाएंगे।

क्या Erlang करता है समानांतरवाद के साथ काम करने के लिए आसान इस तरह कर रही है। यह डेवलपर समय बचाता है और बग का मौका कम कर देता है।

तो मैं नहीं कहने जा रहा हूं, कोई टिपिंग पॉइंट नहीं है जिस पर एर्लांग की समांतरता इसे किसी अन्य भाषा की संख्यात्मक संख्या-क्रंचिंग शक्ति से बेहतर प्रदर्शन करने की अनुमति देती है।

जहां एरलांग स्कोर आसान को स्केल करने और सही तरीके से करने में सक्षम है। लेकिन यह अभी भी अन्य भाषाओं में किया जा सकता है जो संख्या-क्रंचिंग पर बेहतर हैं, यदि आप अतिरिक्त विकास समय बिताने के इच्छुक हैं।

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

+0

"विकास समय बराबर" दिया जाना चाहिए। अध्ययनों ने निष्कर्ष निकाला है कि कुछ समस्याओं के लिए डेवलपर समय को अनुकूलित करने में एरलांग सी ++ से बेहतर प्रदर्शन करता है। सवाल यह है कि, इस श्रेणी में संख्यात्मक गणना की किसी भी तरह की समस्याएं आती हैं। – mwt

+0

ओपी ने विकास के समय के बराबर कुछ भी नहीं कहा। – jalf

+0

कहने की आवश्यकता नहीं है। प्रश्न अन्यथा बकवास है। यदि विकास के समय के बराबर होने की आवश्यकता नहीं है, तो हम स्पष्ट रूप से कह सकते हैं कि वितरित असेंबली क्लस्टर एरलांग से तेज होगा। – mwt

1

मुझे लगता है कि व्यापक आवश्यकता यह इंगित करना है कि समांतरता जरूरी नहीं है या आमतौर पर गति के बारे में भी है।

यह एल्गोरिदम या प्रोग्राम को व्यक्त करने के बारे में है जिसमें गतिविधियों का अनुक्रम आंशिक-आदेश दिया गया है।

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