2012-02-17 20 views
6

मैं जानना चाहता हूं कि वर्तमान सीपीयू दो संख्याओं को गुणा करने से बचता है जब उनमें से कम से कम एक शून्य होता है। धन्यवादक्या आधुनिक सीपीयू शून्य से गुणा गुणा करते हैं?

+1

यह एक गुणा को "छोड़" कैसे देगा? यदि यह परिणाम के रूप में 0 देता है, इससे कोई फर्क नहीं पड़ता कि यह कितना तेज़ करता है, इसने गुणा को प्रभावी ढंग से किया है। –

उत्तर

-2

मुझे उम्मीद है कि एक आधुनिक डेस्कटॉप सीपीयू में ऐसी चीज होगी।

8
  1. आधुनिक CPUs - इसका मतलब क्या है? क्या आपका मतलब सबसे अधिक उपयोग किया जाता है (जैसे x86, AMD64, ARM) या हाल ही में विकसित किया गया है। प्रत्येक प्रोसेसर आर्किटेक्चर में इसकी अपनी गुण होती है। इसके अलावा, प्रत्येक कंपनी (जैसे इंटेल या एएमडी) प्रोसेसर को अलग-अलग तरीके से बना सकती है (जो आम तौर पर कंपनी गुप्त होती है)।

  2. जैसा कि आप सवाल करते हैं, मुझे संदेह है। आप जानते हैं कि यह भी जांच कर रहा है कि संख्या दो बार शून्य के बराबर है या नहीं, प्रत्येक गुणा बहुत अधिक ओवरहेड है, यदि आप खाते हैं कि गुणात्मक संचालन का कितना कम प्रतिशत वास्तव में अनुकूलित किया गया है।

  3. अनुकूलन इस तरह सीपीयू को अधिक महंगा बना देगा।

मान लें कि औसत कार्यक्रम में शून्य से गुणा 1% (और शायद बहुत कम) है। इसका मतलब यह होगा कि शून्य की तुलना होने के मुकाबले 200 गुना तेज होनी चाहिए, केवल ओवरहेड (और अभ्यास में उपयोगी होने के लिए बहुत कुछ) के लिए खाता है।

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

  1. अगर मैं आप थे तो मुझे चिंता नहीं होगी। प्रोसेसर निर्माताओं और कंपाइलर लेखकों को प्रदर्शन को अधिकतम करने के लिए अपनी पूरी कोशिश कर रहे हैं। उनके पास सबकुछ का साहित्यिक विचार है।
+1

मैं मानता हूं, गुणा तेजी से हैं। हाथ से पहले प्रत्येक मूल्य की जांच करने के लिए एक अधिक अनुकूलन की तरह लगता है। मैं शर्त लगाता हूं कि सीपीयू सिर्फ ऑपरेशन करता है। –

+0

निश्चित रूप से। :) मुझे लगता है कि मेरा जवाब इसे कवर करता है। विशेष रूप से अंतिम अनुच्छेद। –

+0

आप भूल रहे हैं कि हार्डवेयर में किए जाने पर यह कितना तेज़ हो सकता है। – Puppy

1

यह सीपीयू और (कुछ मामलों में) ऑपरेटरों के प्रकार (ओं) के आधार पर व्यापक रूप से भिन्न होता है। लेकिन जैसा कि बाद से पाश कार्यान्वित केवल जब/अगर temp1 != 0, पाश जाहिर है, अगर temp1 0 के रूप में बाहर शुरू होता है पर अमल नहीं होगा

integer operator*(integer const &other) { 
    unsigned temp1 = other.value; 
    unsigned temp2 = value; 
    unsigned answer = 0; 

    while (temp1 != 0) { 
     if (temp1 & 1) 
      answer += temp2; 
     temp2 <<= 1; 
     temp1 >>=1; 
    } 
    return integer(answer); 
} 

(:

पुराने/सरल सीपीयू आम तौर पर इस तरह की एक गुणा एल्गोरिथ्म कुछ का उपयोग यहां लिखा गया है, अन्य ऑपरेंड 0 के लिए किसी भी अनुकूलन का प्रयास नहीं करेगा)।

हालांकि, यह मूल रूप से एक समय एल्गोरिदम में एक बिट है। उदाहरण के लिए, 32-बिट ऑपरेंड को गुणा करते समय, यदि प्रत्येक बिट में सेट होने का 50:50 मौका होता है, तो हम औसतन 16 पुनरावृत्तियों की अपेक्षा करते हैं।

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

इसका मतलब है कि निष्पादन के संचालन के बावजूद निष्पादन में वही विलंबता (और थ्रूपुट) होगी।औसतन यह विलंबता को थोड़ा सा और थ्रूपुट में बहुत सुधार करता है, लेकिन संचालन के बावजूद, प्रत्येक ऑपरेशन को उसी गति से हो रहा है।