एेतिहाँसिक विचाराे से
यह कहना वास्तव में असंभव है कि भविष्य में नए प्रतिमान क्या होंगे, उदाहरण के लिए एक अच्छा ऐतिहासिक परिप्रेक्ष्य जो मैं केन कैनेडी के उदय और एचपीएफ के पतन को पढ़ने का सुझाव देता हूं । कैनेडी दो उभरते हुए पैटर्न, 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 एक्सस्केल ग्रैंड चैलेंज की तुलना में एक अलग ट्रैक पर हैं।
यह उन संदर्भों के लिए अपेक्षित समय से अधिक हो गया जहां आपको टिप्पणियों में उनकी आवश्यकता है