अगर मुझे भविष्य में अपने कोड को पेटस्केल मशीनों पर चलाने के लिए चाहिए तो मुझे किन प्रोग्रामिंग प्रतिमानों में निवेश करना चाहिए?


36

यह शीर्ष 500 के एक सर्वेक्षण से बहुत स्पष्ट है कि उद्योग प्रसंस्करण कोर में एक घातीय वृद्धि की ओर चल रहा है । सबसे बड़े सुपर कंप्यूटर सभी नोड्स के बीच संचार के लिए एमपीआई का उपयोग करते हैं, हालांकि ऑन-नोड समानता के लिए एक स्पष्ट प्रवृत्ति नहीं दिखाई देती है, प्रत्येक कोर, स्वचालित के लिए एकल एमपीआई प्रक्रिया को मैप करने के लिए सबसे सरल (लेकिन जरूरी नहीं कि सबसे कुशल) दृष्टिकोण है। संकलक, OpenMP, pthreads, CUDA, Cilk और OpenCL से समानांतरकरण।

मैं एक ऐसे कोड को बनाए रखने और विकसित करने वाले वैज्ञानिकों के समूह में से एक हूं, जिसमें दुनिया के कुछ सबसे बड़े सुपर कंप्यूटरों का उपयोग करने की क्षमता है। परिमित विकासकर्ता समय को मानते हुए, मैं अपने आप को भविष्य में कैसे प्रमाणित करूं ताकि मैं दुनिया की सबसे शक्तिशाली मशीन के प्रदर्शन का लाभ उठा सकूं? प्रक्रिया के बारे में मुझे क्या अनुमान लगाना चाहिए जो वास्तुकला को आपस में जोड़ता है? जैसे ही हम कई कगार के युग में प्रवेश करते हैं, क्या विरोधाभास होने वाला है? क्या विभाजनकारी वैश्विक संबोधन स्पेस लैंग्वेज उपलब्ध होंगी "उत्पादन" पेटस्केल मशीनों पर?


5
मुझे यह प्रश्न ठीक से दिखाई नहीं दिया। फ़ेक से, "आपके प्रश्नों को यथोचित रूप से बंद कर दिया जाना चाहिए। यदि आप एक पूरी पुस्तक की कल्पना कर सकते हैं जो आपके प्रश्न का उत्तर देती है, तो आप बहुत अधिक पूछ रहे हैं।" वास्तव में प्रत्येक सुपरकंप्यूटिंग कॉन्फ्रेंस में मैंने इस विषय पर कई पैनल
बनाए हैं


5
क्रिस्टल बॉल अनुपलब्ध, चाय पत्ती दुर्घटनाग्रस्त।
dmckee

जवाबों:


34

एेतिहाँसिक विचाराे से

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

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


हार्डवेयर में स्पष्ट रुझान

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

इस बात को ध्यान में रखते हुए कि यहाँ तीन प्रवृत्तियाँ हैं जो स्पष्ट रूप से नए वास्तुशिल्प में मुख्य मार्ग बना रही हैं। और मुझे स्पष्ट होने दें, अब एचपीसी में बारह अलग-अलग आर्किटेक्चर का विपणन किया जा रहा है। यह कम से कम 5 साल पहले केवल x86 की विशेषता है, इसलिए आने वाले दिनों में विभिन्न और दिलचस्प तरीकों से हार्डवेयर का उपयोग करने के बहुत सारे अवसर दिखाई देंगे

  • विशेष प्रयोजन चिप्स: बड़ी वेक्टर इकाइयाँ जैसे त्वरक को देखें (Nvidia के बिल डेली द्वारा जासूसी देखें)
  • कम बिजली के चिप्स: एआरएम आधारित क्लस्टर (बिजली बजट को समायोजित करने के लिए)
  • चिप्स का टाइलिंग: अलग-अलग विशिष्टताओं के साथ चिप्स के बारे में सोचें ( अवंत अरगवाल का काम )

वर्तमान मॉडल

वर्तमान मॉडल वास्तव में 3 स्तर गहरा है। जबकि इन स्तरों में से दो का उपयोग करके कई कोड हैं, तीनों का उपयोग करके कई नहीं उभरे हैं। मेरा मानना ​​है कि सबसे पहले आपको यह निर्धारित करने के लिए निवेश करना होगा कि क्या आप तीनों स्तरों पर चल सकते हैं। वर्तमान रुझानों के साथ अच्छी तरह से पुनरावृत्ति करने के लिए यह संभवतः सबसे सुरक्षित मार्ग है।

मुझे मॉडलों पर पुनरावृत्ति करने दें और पूर्वानुमानित नए हार्डवेयर दृश्यों के आधार पर उन्हें कैसे बदलना होगा।

वितरित

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

यहां सबसे दिलचस्प बिंदु यह है कि जबकि यह मॉडल वर्तमान में केवल नोड स्तर पर काम करता है, यह टाइल वाले आर्किटेक्चर के लिए नोड के अंदर एक महत्वपूर्ण मॉडल होगा। एक संकेत इंटेल एससीसी चिप है, जो एक वितरित प्रणाली की तरह मौलिक रूप से काम करता है। SCC टीम ने अपना MPI कार्यान्वयन बनाया और कई टीम सामुदायिक पुस्तकालयों को इस वास्तुकला में पोर्ट करने में सफल रहीं।

लेकिन ईमानदार होना पीजीएएस वास्तव में इस अंतरिक्ष में कदम रखने के लिए एक अच्छी कहानी है। क्या आप वास्तव में MPI इंटर्नोड को प्रोग्राम करना चाहते हैं और फिर उसी ट्रिक को इंट्रोडोड करना है? इन टाइलों वाले आर्किटेक्चर के साथ एक बड़ी बात यह है कि उनके पास चिप्स पर अलग-अलग घड़ी की गति होगी और मेमोरी में बैंडविड्थ के अंतर में बहुत अंतर होगा इसलिए परफॉर्मेंट कोड को इसे ध्यान में रखना चाहिए।

ऑन-नोड साझा स्मृति

यहाँ हम MPI को अक्सर "काफी अच्छा" होते हुए देखते हैं, लेकिन PThreads (और Intel Parallel Building Blocks जैसे PThreads से निकलने वाली लाइब्रेरी) और OpenMP अभी भी अक्सर उपयोग किए जाते हैं। आम दृश्य यह है कि एक समय होगा जब पर्याप्त साझा मेमोरी थ्रेड्स होंगे जो एमपीआई के सॉकेट मॉडल आरपीसी के लिए टूट जाएंगे या आपको कोर पर चलने वाले हल्के वजन की प्रक्रिया की आवश्यकता होगी। पहले से ही आप साझा किए गए मेमोरी MPI के साथ समस्या वाले IBM Bluegene सिस्टम के संकेत देख सकते हैं।

मैट टिप्पणियों के रूप में, गहन कोड की गणना के लिए सबसे बड़ा प्रदर्शन को बढ़ावा देना सीरियल कोड का वैश्वीकरण है। जबकि कई लोग यह मानते हैं कि यह त्वरक में सच है, यह ऑन-नोड मशीनों के लिए भी महत्वपूर्ण है। मेरा मानना ​​है कि वेस्टमेरे के पास 4 विस्तृत एफपीयू हैं, इस प्रकार एक केवल एक चौथाई फ्लॉप को बिना वैश्वीकरण के प्राप्त कर सकता है।

जबकि मैं वर्तमान OpenMP को इस अंतरिक्ष में अच्छी तरह से कदम नहीं उठा रहा हूँ, वहाँ अधिक प्रकाश धागे का उपयोग करने के लिए कम शक्ति या टाइल चिप्स के लिए एक जगह है। OpenMP को यह वर्णन करने में कठिनाई होती है कि डेटा प्रवाह कैसे काम करता है और अधिक थ्रेड्स का उपयोग किया जाता है मैं केवल इस प्रवृत्ति को और अधिक अतिरंजित होते हुए देखता हूं, बस ओपनएमपी के साथ उचित प्रीफ़ेटिंग प्राप्त करने के लिए किसी को क्या करना है इसके उदाहरण देखें।

एक पर्याप्त स्तर पर OpenMP और PThreads दोनों चरम स्तर का एक अच्छा प्रतिशत प्राप्त करने के लिए आवश्यक वैश्वीकरण का लाभ उठा सकते हैं, लेकिन ऐसा करने से आपके एल्गोरिदम को इस तरह से तोड़ने की आवश्यकता होती है कि वैश्वीकरण स्वाभाविक है।

सह-प्रोसेसर

अंत में सह-प्रोसेसर (GPU, MIC, सेल एक्सीलरेटर) के उद्भव ने जोर पकड़ लिया है। यह स्पष्ट हो रहा है कि निर्वासन का कोई भी मार्ग उनके बिना पूरा नहीं होगा। SC11 में, हर बेल प्राइज कंटेस्टेंट ने कम पेटाफ्लॉप्स को पाने के लिए उन्हें बहुत प्रभावी ढंग से इस्तेमाल किया। जबकि CUDA और OpenCL ने मौजूदा बाजार में अपना वर्चस्व कायम किया है, मुझे ओपनएसीसी और PGAS कंपाइलरों के अंतरिक्ष में प्रवेश करने की उम्मीद है।

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


यह ऐप डेवलपर को कैसे प्रभावित करता है

अब अपने प्रश्न के लिए। यदि आप एक्सैसले मशीनों की आने वाली जटिलताओं से खुद को बचाना चाहते हैं, तो आपको कुछ काम करने चाहिए:

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

यदि आप आज प्रदर्शन करना चाहते हैं, तो MPI + CUDA / OpenCL काफी अच्छा है, लेकिन UPC वहां हो रही है, इसलिए कुछ दिनों के लिए बुरा नहीं है और इसे सीखें। OpenMP आपको शुरू हो जाता है, लेकिन एक बार कोड को फिर से शुरू करने की आवश्यकता होने पर समस्याएं आती हैं। PThreads को आपके कोड को उसकी शैली में पूरी तरह से लिखना होगा। जो MPI + CUDA / OpenCL को वर्तमान सर्वश्रेष्ठ मॉडल बनाता है।


यहाँ क्या चर्चा नहीं की गई है

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

यह दूसरी प्रवृत्ति को लाता है जो हो सकता है (यदि सही फंडिंग एजेंसियां ​​शामिल हों)। आवश्यक कंप्यूटिंग के प्रकार के लिए मशीनें अधिक से अधिक विशेष बनने जा रही हैं। हम पहले से ही "डेटा-इंटेंसिव" मशीनों को एनएसएफ द्वारा वित्त पोषित करते हुए देखते हैं, लेकिन ये मशीनें 2019 एक्सस्केल ग्रैंड चैलेंज की तुलना में एक अलग ट्रैक पर हैं।

यह उन संदर्भों के लिए अपेक्षित समय से अधिक हो गया जहां आपको टिप्पणियों में उनकी आवश्यकता है


2
अच्छा लगा, लेकिन आप वैश्वीकरण को कैसे नजरअंदाज कर सकते हैं, जो ऑन-नोड प्रदर्शन के लिए सबसे बड़ा कारक है?
मैट नेप्ले

बहुत सच है (मैं वास्तव में इसे विशेष गणना नोड के हिस्से के रूप में मानता हूं, बस डॉ। बैंडविड्थ के साथ एक लंबी चर्चा हुई थी कि कैसे विक्रेता वास्तव में लोगों को सीरियल कोड के लिए वेक्टर इकाइयों को बंद करने का सुझाव देते हैं), मैं स्मृति प्रणालियों की भी उपेक्षा कर रहा हूं, और मैं / ओ। मुझे लगता है कि अब मैं जोड़ देंगे।
अपरेल 20

क्या फोरट्रान में सह-सरणियाँ लगभग UPC के बराबर हैं?
ओन्देजे íertík

जहाँ तक मैं बता सकता हूँ कि वे एक ही अवधारणा हैं लेकिन मैंने बड़े पैमाने पर पुस्तकालय का उपयोग नहीं किया है।
19

इस मायने में कि सीएएफ और यूपीसी दोनों पीजीएएस हैं, हां। और न ही एक पुस्तकालय है, btw। इस प्रश्न का उत्तर देने के लिए इंटरनेट पर बहुत सारी जानकारी है।
जेफ

8

आइए इंट्रोडोड कोड के लिए एक रणनीति पर चर्चा करके शुरू करें (कंप्यूटिंग जो इंटरकनेक्ट को स्पर्श नहीं करता है), क्योंकि मुझे लगता है कि एमपीआई इंटर्नोड कोड के लिए एक अच्छा विकल्प है। मुझे लगता है कि कम से कम 100 कोर के साथ नोड्स के बारे में बात करने के लिए इसका संवेदनहीन है, इसलिए कम से कम एक वर्तमान जीपीयू या एमआईसी।

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

अगला, ये सभी मशीनें NUMA होंगी, जिन्हें प्रोग्राम करना कठिन है, लेकिन मुझे लगता है कि कर्नेल रणनीति काम करती है। आप काम और डेटा को छोटी इकाइयों में विभाजित करते हैं। ये संभवतः स्वचालित रूप से शेड्यूल किए जाएंगे, जैसा कि वर्तमान में CUDA और OpenCL में होता है, लेकिन आप निर्भरता निर्दिष्ट कर सकते हैं। स्ट्रीमिंग प्रतिमान को फिट करने वाली समस्याओं के लिए, यह मंथन स्वचालित रूप से भी किया जा सकता है। इंटेल टीबीबी ऐसा करता है, लेकिन मैं थ्रस्ट और कस्प द्वारा अनुकरणीय उच्च-स्तरीय पुस्तकालय दृष्टिकोण को प्राथमिकता देता हूं , जो सीयूडीए या (जल्द ही) टीबीबी को लक्षित कर सकता है।


मुझे भी लगता है कि CUDA / OpenCL के दृष्टिकोण का एक उज्जवल भविष्य है ... लेकिन कौन-सा एक विकल्प होगा, CUDA या OpenCL? क्या हाल ही में एएमडी फियास्को ओपनसीएल को नुकसान पहुंचा रहा है?
PhDP

2
आखिरकार एक खुला मानक होगा जिसका उपयोग हर कोई करता है। यह शायद ओपनसीएल 2.0 होगा। अभी के लिए, CUDA थोड़ा आगे है, लेकिन मैं आसानी से अपने 95% कोड का अनुवाद कर सकता हूं।
मैट नेप्ले

7

मैं इस धागे पर अपने कुछ सम्मानित सहयोगियों की तुलना में एक छोटे से उत्तर की कोशिश करूँगा ;-)

मेरे सभी छात्रों के लिए मेरा संदेश यह है कि डेवलपर समय सीपीयू समय की तुलना में अधिक मूल्यवान है। इसका मतलब है कि अगर आपके पास बड़ी मशीनों पर चलने के लिए 80% दक्षता पर 100% कोड को परिवर्तित करने का समय है - एक उच्च स्तर के दृष्टिकोण का उपयोग कर -, तो जब आप समय लेने वाले निम्न-स्तर का उपयोग करते हैं तो आप इससे बेहतर होते हैं। दृष्टिकोण जो आपको आपके कोड के 20% पर 100% दक्षता प्रदान करता है। परिणामस्वरूप, मैं उच्च स्तरीय पुस्तकालयों का बहुत बड़ा प्रशंसक हूं। इस क्षेत्र में मेरा पसंदीदा भवन निर्माण खंड (टीबीबी) हैं क्योंकि यह मुझे सबसे बाहरी छोरों और उच्च स्तर पर एल्गोरिदम को देखने की अनुमति देता है। यह उन सभी कामों को भी कर सकता है जो आप ओएस कार्यों से निपटने के लिए बिना सावधानी के साथ कर सकते हैं, आदि। मैं उन दृष्टिकोणों का प्रशंसक नहीं हूं, जो अंतरतम छोरों को देखते हैं, क्योंकि यह इंट्रोडोड संसाधनों का शोषण करने का गलत स्तर है - - तो कोई OpenMP,

मैं OpenCL, CUDA, आदि के बारे में प्राधिकरण से बात नहीं कर सकता


4

पहले पोस्ट किए गए उत्तर उत्कृष्ट हैं लेकिन ज्यादातर नोड आर्किटेक्चर पर केंद्रित हैं, जो मुझे लगता है कि इस तथ्य को दर्शाता है कि एमपीआई को आमतौर पर ज्यादातर मामलों में इंटर्नोड प्रोग्रामिंग मॉडल के रूप में पर्याप्त माना जाता है और यह इंट्रोडोड समानता है जहां हम संघर्ष करते हैं।

यहाँ दो प्रश्नों के उत्तर देने के मेरे प्रयास हैं जिनका जवाब अभी तक नहीं दिया गया है या अपेक्षाकृत सीमित तरीके से उत्तर दिया गया है:

प्रक्रिया के बारे में मुझे क्या अनुमान लगाना चाहिए जो वास्तुकला को आपस में जोड़ता है?

मैं नेटवर्क के तीन गुणों पर विचार करूंगा:

  1. विलंबता,
  2. बैंडविड्थ, और
  3. संगामिति।

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

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

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

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

नेटवर्क की तीसरी संपत्ति जो अक्सर औपचारिक मॉडल में अनदेखी की जाती है कि एक बार में कितने संदेश भेजे जा सकते हैं। 1 ns विलंबता और / या 1 TB / s बैंडविड्थ वाला नेटवर्क होना जो केवल एक बार में 1 संदेश भेज सकता है, अधिकांश उपयोगों के लिए पूरी तरह से बेकार होगा। एक ही समय में बहुत सारे थ्रेड से बहुत सारे संदेश भेजने में सक्षम होना महत्वपूर्ण है और नेटवर्क के लिए विवाद के अंतर्गत नहीं आना चाहिए। क्रे और ब्लू जीन सिस्टम दोनों अब 1 MMPS (प्रति सेकंड मिलियन संदेश) से अधिक प्राप्त करते हैं। मुझे सटीक संख्या याद नहीं है, लेकिन दोनों छोटे संदेशों के साथ शिखर बैंडविड्थ के एक महत्वपूर्ण अंश को प्राप्त करने में सक्षम हैं। एक आदर्श नेटवर्क किसी भी आकार के संदेश के साथ पीक बैंडविड्थ को हिट करने में सक्षम हो सकता है, लेकिन पैकेट हेडर और संबंधित बहीखाता ओवरहेड्स के कारण व्यवहार में यह असंभव है। तथापि,

यह अपूर्ण और अपूर्ण उत्तर है। अन्य लोगों का स्वागत है कि मैं इसे बेहतर बनाने की कोशिश करूं या उन चीजों का सुझाव दूं जो मुझे सुधारनी चाहिए।

क्या विभाजनकारी वैश्विक संबोधन स्पेस लैंग्वेज उपलब्ध होंगी "उत्पादन" पेटस्केल मशीनों पर?

क्रे XE, XK और XC सिस्टम में उत्पादन-गुणवत्ता UPC और CAF संकलक हैं। ब्लू जीन सिस्टम को XLUPC और XLCAF के साथ वितरित किया जा सकता है, लेकिन कोई भी इसके लिए नहीं पूछता है, इसलिए इसे वितरित नहीं किया जाता है। PERCS में प्रोडक्शन-ग्रेड XLUPC और XLCAF कंपाइलर हैं लेकिन बड़े पैमाने पर इंस्टॉलेशन नहीं हैं जो वैज्ञानिक समुदाय के लिए सुलभ हैं।

कॉयर्स, फोरट्रान 2008 का हिस्सा हैं, हालांकि इंटेल और जीएनयू फोरट्रान में कार्यान्वयन अभी तक उच्च गुणवत्ता वाले नहीं हैं। इंटेल कार्यान्वयन काम करने के लिए प्रतिष्ठित है, लेकिन काफी धीमा है (इसके बारे में पीजीएएस 12 में एक पेपर है)।

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

MPI-3 RMA का उपयोग करके उत्पादन गुणवत्ता के तरीके से PGAS- शैली के निर्माणों को लागू करना अपेक्षाकृत आसान है। यदि कोई इस बारे में कोई नया प्रश्न पोस्ट करता है, तो मुझे इसका उत्तर देने में खुशी होगी।


4
आप MPI-3 में PGAS- शैली के निर्माणों को लागू करने पर प्रश्न पोस्ट कर सकते हैं (और इसका उत्तर स्वयं दे सकते हैं), जब तक कि यह एक वास्तविक समस्या है जिसका आपने अतीत में सामना किया है (जो मुझे लगता है कि यह है)। हम उपयोगकर्ताओं को अपने स्वयं के पोस्ट का जवाब देने की अनुमति देते हैं।
ज्यॉफ ऑक्सीबेरी

1
यह सबसे लोकप्रिय सवालों में से एक है, मैं जेफ के जवाब को यहां प्रस्तुत करके खुश हूं। संपादित करें: मैं देख रहा हूँ कि आप का क्या मतलब है @GeoffOxberry - हाँ, उसे अपना प्रश्न पोस्ट करना चाहिए और उसका उत्तर देना चाहिए :)
एरन अहमदिया

ठीक है, मैं एक हार्डकोर "पीजीएएस और एमपीआई -3 आरएमए के बीच क्या संबंध है" सवाल-जवाब अगले सप्ताह या दो में लिखने के लिए कुछ समय के लिए अलग सेट करने की कोशिश करूंगा।
जेफ

3

वास्तव में बड़े पैमाने पर कोर भी तुच्छ अभी तक आश्चर्यजनक रूप से उपयोगी परिप्रेक्ष्य खोलते हैं - बस पूरे सिमुलेशन के कई पुनरावृत्तियों को चलाने के लिए इसका उपयोग करने के लिए।

कम्प्यूटेशनल शोध का महत्वपूर्ण हिस्सा आजकल कुछ पैरामीटर स्पेस को स्कैन करने, प्रारंभिक स्थितियों के बड़े पूल की स्क्रीनिंग या कुछ परिणाम के वितरण की गणना करने के तरीके से उबलता है; उन सभी कार्यों को शर्मनाक समानांतर, इस प्रकार Amdahl प्रूफ।


2

मुझे संदेह है कि इस प्रश्न के सबसे सुविचारित उत्तर पांच से दस वर्षों में अप्रचलित हो जाएंगे। भविष्य की प्रोग्रामिंग प्रतिमानों की अनिश्चितता को देखते हुए यह समय आपके कोडबेस को पूर्व-अनुकूलित करने का एक बड़ा सौदा खर्च करने के लिए सार्थक नहीं हो सकता है।


1
यह बहुत घातक है - भविष्य यहां है, आज है। सवाल पेटस्केल के बारे में है, जो आज हम कहां हैं। यदि आप इस बारे में नहीं सोचते हैं कि आप आज के 100,000 प्रोसेसर पर कैसे चल सकते हैं, तो आप कल के 100,000,000 कोर के साथ बहुत प्रगति नहीं करेंगे।
वोल्फगैंग बैंगर्थ

1

मैं बस इस प्रश्न का उत्तर पोस्ट करने वाला था, लेकिन इसे इस एक के डुप्लिकेट के रूप में बंद कर दिया गया था, इसलिए यहां दिया गया है:

यह थोड़ा सॉलोमोनिक लग सकता है, लेकिन मेरे अनुभव में, भविष्य हाइब्रिड दृष्टिकोणों से संबंधित है जिसमें कई साझा-मेमोरी मल्टी-कोर नोडल जो बहु-थ्रेडेड कर्नेल चल रहे हैं, उन्हें एक वितरित-स्मृति प्रतिमान जैसे MPI के माध्यम से जोड़ा जाता है।

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

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

सारांश में, विशुद्ध रूप से वितरित-स्मृति से विशुद्ध रूप से / आंशिक रूप से साझा-मेमोरी प्रतिमान में जाने के लिए अवरोध काफी अधिक है। यदि आप थ्रेड का कुशलतापूर्वक उपयोग करना चाहते हैं, तो आपको ओपनपीएम को भूलना होगा और थ्रेड्स को कंसीव करना होगा और अपने आप को हेलो ( पायलो , गुडबाय फोरट्रान)।

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


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

हम्म, मैं एक मजबूत एप्लिकेशन या लाइब्रेरी की तलाश में हूं जो हमारे बीजी कार्यान्वयन काम कर रहा है यह सत्यापित करने के लिए टीबीबी का उपयोग करता है। मैंने केवल पहले cise.ufl.edu/research/sparse/SPQR पाया । वहाँ किसी भी मौका है कि आप BGP या BGQ के प्रयोग पर deal.II चलाने का प्रयास होता है wiki.alcf.anl.gov/parts/index.php/BlueTBB अगर मैं आवंटन प्रदान करते हैं?
जेफ

@WolfgangBangerth: जैसा कि मेरा मानना ​​है कि जेफ की टिप्पणी के लिए सिर्फ एक हेड-अप आपके लिए शुरू हुआ था। हालांकि मैं खुद ब्लूगीन का उपयोग नहीं करूंगा;)
पेड्रो

@ जेफ़: मैं इसे एक कोशिश देने के लिए तैयार हूँ, लेकिन शायद समय की एक भयानक राशि आवंटित करने में सक्षम नहीं होगा। बेझिझक मुझसे ऑफ़लाइन संपर्क करें। (@Pedro: हेड्स अप के लिए धन्यवाद!)
वोल्फगैंग बैंगर्थ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.