एम्डाहल का नियम क्या है?
एम्डाहल का नियम (Amdahl's Law) कंप्यूटर आर्किटेक्ट जीन एम्डाहल ने 1967 में प्रस्तुत किया था। यह बताता है कि जब किसी काम का सिर्फ़ एक हिस्सा ही पैरेलल यानी समानांतर रूप से चलाया जा सकता हो, तो उसमें अधिकतम सैद्धांतिक तेज़ी (स्पीडअप) कितनी हो सकती है। यह पैरेलल कंप्यूटिंग का एक बुनियादी सिद्धांत है और इंजीनियरों को यह तय करने में मदद करता है कि और प्रोसेसर, कोर या थ्रेड जोड़ना फ़ायदेमंद रहेगा या नहीं। मूल बात यह है कि प्रोग्राम का सीरियल (जिसे पैरेलल नहीं किया जा सकता) हिस्सा अंततः गति की सीमा तय कर देता है — चाहे आप पैरेलल हिस्से पर कितने भी संसाधन लगा दें।
इस कैलकुलेटर का इस्तेमाल कैसे करें
दो मान दर्ज करें: अपने प्रोग्राम का पैरेलल हिस्सा प्रतिशत में (काम का वह अंश जिसे कई प्रोसेसरों में बाँटा जा सकता है), और पैरेलल हिस्से का स्पीडअप, जो आमतौर पर उसे चलाने वाले प्रोसेसरों या कोर की संख्या होती है। कैलकुलेटर आपको कुल स्पीडअप, अधिकतम सैद्धांतिक स्पीडअप (यदि पैरेलल स्पीडअप अनंत हो) और पैरेलल दक्षता बताता है।
फ़ॉर्मूला आसान भाषा में
समीकरण है
$$\text{Speedup} = \dfrac{1}{(1 - p) + \dfrac{p}{s}}$$जहाँ p पैरेलल अंश है (0 और 1 के बीच) और s उस अंश पर लागू होने वाला स्पीडअप है। पद \((1 - p)\) वह सीरियल हिस्सा है जिसे तेज़ नहीं किया जा सकता। जैसे-जैसे s अनंत की ओर बढ़ता है, स्पीडअप \(\dfrac{1}{1 - p}\) पर आकर रुक जाता है — यही वह कठोर सीमा है जो सीरियल हिस्सा लगा देता है।
हल किया हुआ उदाहरण
मान लीजिए किसी प्रोग्राम का 90% हिस्सा पैरेलल किया जा सकता है (\(p = 0.9\)) और आप उसे 8 प्रोसेसरों पर चलाते हैं (\(s = 8\))। तब हर (डिनॉमिनेटर) होगा $$(1 - 0.9) + \frac{0.9}{8} = 0.1 + 0.1125 = 0.2125,$$ जिससे स्पीडअप मिलता है $$\frac{1}{0.2125} \approx 4.71\times.$$ अनंत प्रोसेसरों के साथ भी अधिकतम स्पीडअप सिर्फ़ \(\frac{1}{0.1} = 10\times\) ही रहेगा — यह दिखाता है कि सिर्फ़ 10% सीरियल हिस्सा प्रदर्शन की सीमा कैसे बाँध देता है।
आपके परिणाम की व्याख्या
स्पीडअप मान आपको बताता है कि \(s\) प्रोसेसरों के साथ प्रोग्राम एकल प्रोसेसर पर चलने की तुलना में कितनी बार तेजी से चलता है। 4× का स्पीडअप मतलब है कि समांतरकृत कार्यभार मूल समय के एक-चौथाई में पूरा हो जाता है। क्योंकि अमडाहल का नियम एक निश्चित समस्या आकार मानता है, स्पीडअप को क्रमिक अंश \(1-p\) द्वारा बाध्य किया जाता है जिसे तेज नहीं किया जा सकता।
अनंत-प्रोसेसर सीमा, \(1/(1-p)\), असीमित हार्डवेयर के साथ प्राप्त करने योग्य अधिकतम स्पीडअप है। उदाहरण के लिए, यदि 95% कार्य समांतर है, तो सीमा \(1/(1-0.95) = 20\times\) है; यहां तक कि एक मिलियन कोर भी 20× को नहीं हरा सकते। यह योजना के लिए सबसे महत्वपूर्ण संख्या है: यह अतिरिक्त प्रोसेसरों में किसी भी निवेश पर ऊपरी सीमा निर्धारित करता है।
समांतर दक्षता मापती है कि प्रोसेसरों का कितनी अच्छी तरह उपयोग किया जाता है और इसे स्पीडअप को प्रोसेसर की संख्या से विभाजित किया जाता है, \(\text{दक्षता} = \text{स्पीडअप}/s\)। 1.0 (100%) की दक्षता सही रैखिक स्केलिंग है; व्यवहार में यह कोर जोड़ने पर गिरती है। उदाहरण के लिए, 8 कोर पर 90% समांतर कोड 4.71× का स्पीडअप देता है, इसलिए दक्षता \(4.71/8 \approx 59\%\) है — प्रत्येक अतिरिक्त कोर क्रमिक रूप से कम उपयोगी कार्य करता है।
प्रोसेसर जोड़ना तब बंद हो जाता है जब प्रति अतिरिक्त कोर मार्जिनल स्पीडअप इसकी लागत के सापेक्ष छोटा हो जाता है और जब दक्षता स्वीकार्य सीमा (व्यावहारिक रूप से अक्सर 50–70%) से नीचे गिरती है। एक बार स्पीडअप अपनी सीमा के पास पहुंचने पर, आगे का हार्डवेयर लगभग कुछ नहीं देता है। सीमा को स्वयं बढ़ाने के लिए आपको क्रमिक अंश को कम करना चाहिए — एल्गोरिदम के अधिक भाग को समांतर करके या समन्वय और I/O को कम करके — बजाय अधिक कोर खरीदने के। यह भी ध्यान दें कि अमडाहल का नियम संचार और समन्वय ओवरहेड को अनदेखा करता है, इसलिए वास्तविक दुनिया के स्पीडअप आमतौर पर इन सैद्धांतिक अधिकतम से कम होते हैं।
अक्सर पूछे जाने वाले सवाल
प्रोसेसर दोगुने करने से गति दोगुनी क्यों नहीं होती? क्योंकि सीरियल हिस्सा प्रोसेसरों की संख्या से बेअसर, उतनी ही गति से चलता है, इसलिए उसका समय सबसे बड़ी बाधा बन जाता है।
पैरेलल दक्षता (efficiency) क्या है? यह स्पीडअप को प्रोसेसरों की संख्या से भाग देकर प्रतिशत में दिखाया गया मान है — यह बताता है कि आप जोड़े गए संसाधनों का कितना अच्छा उपयोग कर रहे हैं।
यह गुस्ताफ़सन के नियम (Gustafson's Law) से कैसे अलग है? गुस्ताफ़सन का नियम मानता है कि समस्या का आकार प्रोसेसरों की संख्या के साथ बढ़ता है, जिससे एम्डाहल के स्थिर-कार्यभार वाले मॉडल की तुलना में अक्सर ज़्यादा आशावादी अनुमान मिलता है।