अन्य अंकगणितीय परिचालनों की तुलना में विभाजन इतना अधिक जटिल क्यों है?


39

मुझे हाल ही में एक मामले का सामना करना पड़ा जहां मुझे चिप पर एक पूर्णांक विभाजन ऑपरेशन की आवश्यकता थी जिसमें एक (एआरएम कॉर्टेक्स-ए 8) की कमी थी। ऐसा क्यों होना चाहिए, इस पर शोध करने की कोशिश करते हुए, मुझे पता चला कि सामान्य विभाजन में किसी भी पूर्णांक (या निश्चित-बिंदु) वास्तुकला पर जोड़, घटाव या गुणा से कई गुना अधिक चक्र होते हैं। यह एक केस क्यों है? क्या यह दो-परत और हर चीज की तरह तर्क-या-तर्क के साथ प्रतिनिधित्व योग्य नहीं है?

जवाबों:


34

प्रभाग एक पुनरावृत्त एल्गोरिथ्म है जहां भागफल से परिणाम को यूक्लिडियन माप का उपयोग करके शेष में स्थानांतरित किया जाना चाहिए, 2 देखें ; जबकि, बिट हेरफेर ट्रिक्स की एक (निश्चित) श्रृंखला में गुणा को कम किया जा सकता है।


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

12
(ऑफ-टॉपिक: "उलटा ऑपरेशन आमतौर पर कठिन होता है। बस एकीकरण बनाम भेदभाव को देखें।" - इस बात पर निर्भर करता है कि आप जो कर रहे हैं वह प्रतीकात्मक या संख्यात्मक है। विभेदन प्रतीकात्मक रूप से आसान है, लेकिन संख्यात्मक रूप से कठिन है; एकीकरण प्रतीकात्मक रूप से कठिन है, लेकिन संख्यात्मक रूप से कठिन है। आसान।)
JM

1
ठीक है, मैं यह कहकर बाहर निकलूंगा कि शावक कीड़े का एक अलग कैन है; लेकिन कम से कम एक आयामी मामले में, द्विघात भेदभाव की तुलना में आसान है।
JM

1
किसी भी मामले में, व्युत्क्रम हमेशा जोड़े में आते हैं। आप एक को "ऑपरेशन" और दूसरे को "उलटा" क्यों कहेंगे?
डेविड केचेसन

2
न तो पुनरावृत्ति और न ही व्युत्क्रम इसे कठिन बनाते हैं। विभाजन की कठोरता इस तथ्य से आती है कि आपको एक यूक्लिडियन उपाय का उपयोग करके भागफल से शेष में परिणाम को स्थानांतरित करना होगा। विभाजन एल्गोरिथ्म प्रमेय देखें ।

20

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

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

यह संभव क्यों नहीं होगा?

सीपीयू की डिजाइनिंग में बनाने के लिए कई ट्रेड-ऑफ हैं। कार्यक्षमता, जटिलता (ट्रांजिस्टर की संख्या), गति और बिजली की खपत सभी परस्पर संबंधित हैं और डिजाइन के दौरान किए गए निर्णय प्रदर्शन पर भारी प्रभाव डाल सकते हैं।

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

फ्लोटिंग पॉइंट ने एक दशक पहले पुनरावृत्त से गैर-पुनरावृत्तक में इस संक्रमण को गुणा किया। इन दिनों, एकल चक्र गुणा और यहां तक ​​कि बहु-संचय सामान्य हैं, यहां तक ​​कि मोबाइल प्रोसेसर में भी।

ट्रांजिस्टर बजट का एक कुशल उपयोग बनने से पहले, विभाजन की तरह, गुणा, अक्सर एक पुनरावृत्त विधि द्वारा किया जाता था। इसके बाद, समर्पित डीएसपी प्रोसेसर अपने सिलिकॉन के अधिकांश भाग को एक ही तेजी से गुणा (मैक) इकाई में समर्पित कर सकते हैं । एक Core2duo सीपीयू में एक फ्लोटिंग पॉइंट 3 की लेटेंसी का गुणा है (इसमें जाने के बाद वैल्यू पाइप लाइन से 3 साइकल से बाहर निकलती है), लेकिन एक ही बार में फ्लाइट में 3 गुणा हो सकती है, जिसके परिणामस्वरूप सिंगल-साइकल थ्रूपुट होता है, इस बीच SSE2 यूनिट हो सकती है एक ही चक्र में कई एफपी गुणकों को पंप करें।

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

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


मेरी जानकारी के अनुसार, किसी भी चिप्स में फ्लोटिंग पॉइंट के लिए एकल-चक्र विभाजन विभाजन नहीं है। उदाहरण के लिए, Intel, AMD और VIA CPUs के लिए Agner Fog के निर्देश सारणी 10-14 चक्रों के रूप में DIVPS (SSE पैक फ़्लोटिंग-पॉइंट डिवाइड) को सूचीबद्ध करता है। मुझे सिंगल-साइकिल डिवाइड निर्देशों के साथ कोई हार्डवेयर नहीं मिल सकता है, लेकिन मैं गलत साबित होने के लिए तैयार हूं। यह उतना सामान्य नहीं है जितना मैं बता सकता हूं।
बिल बर्थ

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

1
मुझे लगता है कि डीएसपी उस सीमा को सीमित करके करते हैं जिसमें वे सटीक होते हैं। यह समान रणनीति है जिसका उपयोग वर्गमूल के लिए लुकअप + इंटरपोलेशन के लिए किया जाता है।
11:22 पर मैट नेप्ले

1
मुझे यकीन नहीं है कि इस तरह के विभाजन की विलंबता क्या होगी। 4 GHz पर, N चक्र के भीतर लुक-अप तालिका के लिए एक गोल-यात्रा करना गंभीर रूप से उक्त तालिका के संभावित आकार को सीमित करता है (उदाहरण के लिए, L1 कैश 32K प्रत्येक पर स्थिर रहा है)। 3 डी जाने से इसे बढ़ाने में मदद मिलेगी (लेकिन यह wrt। कूलिंग को चुनौती दे रहा है)। क्या आपके पास कोई विचार है कि आधुनिक 4GHz / 5GHz CPU के लिए क्या विलंबता पहुँच सकती है?
मैथ्यू एम।

1
Divps / divpd बनाम mulps / mulpd विलंबता और थ्रूपुट संख्या के लिए, फ़्लोटिंग पॉइंट डिवीज़न बनाम फ़्लोटिंग पॉइंट गुणा देखें । मैंने एग्नर फॉग की इंस्ट्रक्शन टेबलों से डेटा लिया और इसे एक सारांश में div और mul थ्रूपुट और लेटेंसी के अपरकेस में, सिंगल बनाम डबल के लिए और विभिन्न SIMD वेक्टर चौड़ाई के लिए तैयार किया। (इंटेल चिप्स में आमतौर पर एक SIMD विभक्त होता है जो अन्य वेक्टर ALUs की केवल आधी चौड़ाई होती है।)
पीटर कॉर्ड्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.