ठीक है, यह वास्तव में इस बात पर निर्भर करता है कि आप क्या विकसित कर रहे हैं। आप जो विकास कर रहे हैं, उसके आधार पर इसका जवाब, "यह बहुत महत्वहीन है" से लेकर "यह बिल्कुल महत्वपूर्ण है, और हम उम्मीद करते हैं कि टीम में सभी को अच्छी समझ और समानांतर कार्यान्वयन का उपयोग हो"।
ज्यादातर मामलों के लिए, एक ठोस समझ और ताले, धागे, और कार्यों और टास्क पूल का उपयोग एक अच्छी शुरुआत होगी जब समानता की आवश्यकता होती है। (lang / lib द्वारा भिन्न होता है)
इसमें जोड़ें कि आपके द्वारा किए जाने वाले डिजाइनों में अंतर - nontrivial मल्टीप्रोसेसिंग के लिए, किसी को अक्सर कई नए प्रोग्रामिंग मॉडल, या समानांतरकरण रणनीतियों को सीखना चाहिए। उस मामले में, सीखने का समय, एक ठोस समझ रखने के लिए पर्याप्त समय विफल करने के लिए, और मौजूदा कार्यक्रमों को अपडेट करने के लिए एक टीम को एक वर्ष (या अधिक) ले सकता है। एक बार जब आप उस बिंदु पर पहुंच गए हैं, तो आप (उम्मीद है!) समस्याओं को लागू नहीं करेंगे और न ही करेंगे जैसा कि आप आज करते हैं (बशर्ते आपने अभी तक उस संक्रमण को नहीं बनाया है)।
एक और बाधा यह है कि आप एक निश्चित निष्पादन के लिए एक कार्यक्रम को प्रभावी ढंग से अनुकूलित कर रहे हैं। यदि आपको कार्यक्रमों को अनुकूलित करने के लिए अधिक समय नहीं दिया जाता है, तो आपको वास्तव में इससे उतना लाभ नहीं होगा जितना आपको चाहिए। उच्च स्तर (या स्पष्ट) समानांतरकरण आपके कार्यक्रम की गति को काफी कम प्रयास के साथ बेहतर कर सकता है, और जहां तक कई टीमें आज जाएंगी: "हमने ऐप के वास्तव में स्पष्ट भागों को समानांतर कर दिया है" - यह कुछ मामलों में ठीक है। क्या कम लटके फलों को लेने और साधारण परालीकरण का उपयोग करने से कोर की संख्या के अनुपात में लाभ होगा? अक्सर, जब दो से चार तार्किक कोर होते हैं, लेकिन ऐसा नहीं होता है। कई मामलों में, यह एक स्वीकार्य रिटर्न है, समय निवेश को देखते हुए। यह समानांतर मॉडल समानता के अच्छे उपयोगों को लागू करने के लिए कई लोगों का परिचय है।
आप इस तुच्छ समानांतर मॉडल का उपयोग करके जो सीखते हैं वह सभी जटिल समानांतर परिदृश्यों में आदर्श नहीं होगा; प्रभावी ढंग से जटिल समानांतर डिजाइनों को लागू करने के लिए बहुत अलग समझ और दृष्टिकोण की आवश्यकता होती है। इन सरल मॉडलों को अक्सर अलग किया जाता है या सिस्टम के अन्य घटकों के साथ तुच्छ बातचीत होती है। साथ ही, इन तुच्छ मॉडलों के कई कार्यान्वयन प्रभावी रूप से जटिल समानांतर प्रणालियों के लिए अच्छी तरह से पैमाने पर नहीं होते हैं - एक खराब जटिल समानांतर डिजाइन को सरल मॉडल के रूप में निष्पादित करने में लंबा समय लग सकता है। बीमार: यह एकल पिरोया मॉडल के रूप में दो बार तेजी से निष्पादित करता है, निष्पादन के दौरान 8 तार्किक कोर का उपयोग करते हुए। सबसे कॉमन उदाहरण कई थ्रेड्स और उच्च स्तर के सिंक्रनाइज़ेशन हस्तक्षेप का उपयोग / निर्माण कर रहे हैं। सामान्य तौर पर, इसे समानांतर मंदी कहा जाता है। यदि आप सभी समानांतर समस्याओं को सरल समस्याओं के रूप में देखते हैं, तो मुठभेड़ करना काफी आसान है।
तो, मान लें कि आपको वास्तव में अपने कार्यक्रमों में (आज की जलवायु में अल्पसंख्यक) कुशल मल्टीथ्रेडिंग का उपयोग करना चाहिए: आपको जटिल मॉडल को सीखने के लिए सरल मॉडल को प्रभावी ढंग से नियोजित करने की आवश्यकता होगी और फिर प्रोग्राम के प्रवाह और इंटरैक्शन के बारे में जानने के लिए relearn करना होगा। जटिल मॉडल वह जगह है जहां आपका कार्यक्रम अंततः होना चाहिए क्योंकि हार्डवेयर आज है, और जहां सबसे प्रमुख सुधार किए जाएंगे।
सरल मॉडल के निष्पादन को एक कांटा की तरह कल्पना की जा सकती है, और जटिल मॉडल एक जटिल, उह, पारिस्थितिकी तंत्र की तरह काम करते हैं। मुझे लगता है कि सामान्य मॉडल की समझ, जिसमें सामान्य लॉकिंग और थ्रेडिंग शामिल है, या जल्द ही मध्यवर्ती डेवलपर्स से उम्मीद की जानी चाहिए जब डोमेन (जिसमें आप विकसित करते हैं) इसका उपयोग करता है। जटिल मॉडलों को समझना आज भी (अधिकांश डोमेन में) थोड़ा असामान्य है, लेकिन मुझे लगता है कि मांग में बहुत तेजी से वृद्धि होगी। डेवलपर्स के रूप में, हमारे कई कार्यक्रमों को इन मॉडलों का समर्थन करना चाहिए, और इन अवधारणाओं को समझने और लागू करने में अधिकांश उपयोग काफी पीछे हैं। चूंकि लॉजिकल प्रोसेसर मायने रखता है हार्डवेयर सुधार के सबसे महत्वपूर्ण क्षेत्रों में से एक, ऐसे लोगों की मांग जो समझने और जटिल प्रणालियों को लागू कर सकते हैं, निश्चित रूप से बढ़ेंगे।
अंत में, बहुत से लोग हैं जो सोचते हैं कि समाधान सिर्फ "समानांतर जोड़ना है"। आम तौर पर, मौजूदा कार्यान्वयन को तेज़ी से करना बेहतर होता है। यह बहुत आसान है और कई मामलों में बहुत अधिक सीधा है। जंगल में कई कार्यक्रमों को कभी भी अनुकूलित नहीं किया गया है; कुछ लोगों को बस यह आभास था कि जल्द ही किसी न किसी संस्करण को हार्डवेयर द्वारा ग्रहण किया जाएगा। मौजूदा कार्यक्रमों का डिज़ाइन या एल्गो सुधारना भी एक महत्वपूर्ण कौशल है यदि प्रदर्शन महत्वपूर्ण है - समस्याओं पर अधिक कोर फेंकना सबसे अच्छा या सरल समाधान नहीं है।
जब आधुनिक पीसी को लक्षित करते हैं, तो हममें से अधिकांश जिन्हें अच्छे समानांतर सिस्टम को लागू करने की आवश्यकता होती है, उन्हें मल्टीथ्रेडिंग, लॉकिंग, समानांतर लाइब्रेरी, एक किताब पढ़ने लायक, और बहुत सारे अनुभव लेखन और परीक्षण कार्यक्रमों (मूल रूप से, महत्वपूर्ण रूप से पुनर्गठन) से परे जाने की आवश्यकता नहीं होगी। दृष्टिकोण लेखन कार्यक्रम)।