पेंटियम FDIV बग

पेंटियम एफडी IV एक हार्डवेयर बग है जो शुरुवाती इंटेल पेंटियम प्रोसेसर्स की फ्लोटिंग-पॉइंट यूनिट (एफपीयू) को प्रभावित करता है। इस बग के कारण, उच्च-सटीक संख्याओं के कुछ जोड़े को विभाजित करते समय, प्रोसेसर गलत बाइनरी फ्लोटिंग पॉइंट परिणाम लौटाता है। इस बग की खोज 1994 में लिंचबर्ग कॉलेज में गणित के प्रोफेसर थॉमस आर. नाइसली ने की थी। एफपीयू के फ़्लोटिंग-पॉइंट डिवीजन एल्गोरिदम द्वारा उपयोग की जाने वाली लुकअप तालिका में गायब मानों के कारण गणना में छोटी त्रुटियां प्राप्त हुईं। हालांकि अधिकांश उपयोग के मामलों में ये त्रुटियां शायद ही कभी होती हैं और परिणामस्वरूप सही आउटपुट मानों से विचलन छोटे होते हैं, पर कुछ परिस्थितियों में त्रुटियां बार-बार हो सकती हैं जिससे विचलन अधिक हो जाता है।

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

दिसंबर 1994 में, इंटेल दोषपूर्ण प्रोसेसर को वापस लेता है जो कंप्यूटर चिप का पहला पूर्ण रिकॉल था। अपनी 1994 की वार्षिक रिपोर्ट में, इंटेल ने कहा कि उसने इन माइक्रोप्रोसेसरों के प्रतिस्थापन और राइट-ऑफ़ की वसूली के लिए $475 मिलियन पूर्व-कर शुल्क के रूप में खर्च किया है।

विवरण
486DX आधारित पेंटियम चिप पर फ्लोटिंग-पॉइंट डिवीजन गणना की गति में सुधार करने के लिए, इंटेल ने शिफ्ट-एंड-सबट्रेक्ट डिवीजन एल्गोरिथम को स्वीनी, रॉबर्टसन, और टोचर (एसआरटी) एल्गोरिथम के साथ बदलने का विकल्प चुना। एसआरटी एल्गोरिथ्म प्रति घड़ी चक्र में विभाजन परिणाम के दो बिट उत्पन्न कर सकता है, जबकि 486 का एल्गोरिथ्म केवल एक बिट ही उत्पन्न कर सकता है। इसे 2,048 कोशिकाओं के साथ प्रोग्राम करने योग्य तर्क सरणी का उपयोग करके कार्यान्वित किया जाता है, जिनमें से 1,066 कोशिकाओं को −2, −1, 0, +1, +2 पांच मानों में से एक के साथ पॉप्युलेट किया जाना चाहिए था| जब पेंटियम के लिए मूल सरणी संकलित की गई, तो पांचो मान सही ढंग से उस उपकरण में डाउनलोड नहीं किए गए जो सरणियों को चिप्स में निर्माण करते हैं - इस प्रकार पांच सरणी कोशिकाओं में शून्य होता है जब कि उनमें +2 होना चाहिए था।

परिणामस्वरूप, इन पांच कक्षों पर निर्भर परिकलन त्रुटियाँ देते हैं; एसआरटी एल्गोरिथम की प्रत्यावर्तन प्रकृति के कारण ये त्रुटियां बार-बार बढ़ती रहती हैं। पैथोलॉजिकल मामलों में त्रुटि परिणाम के चौथे महत्वपूर्ण अंक तक पहुंच सकती है, हालांकि यह दुर्लभ है। त्रुटि आमतौर पर नौवें या दसवें महत्वपूर्ण अंक तक ही सीमित होती है।

अंश और हर के केवल कुछ संयोजन ही बग को ट्रिगर करते हैं। आमतौर पर रिपोर्ट किया जाने वाला एक उदाहरण 4,195,835 को 3,145,727 से विभाजित करना है। विंडोज कैलकुलेटर जैसे फ्लोटिंग-पॉइंट कोप्रोसेसर का उपयोग करने वाले किसी भी सॉफ्टवेयर में इस गणना को करने से उपयोगकर्ताओं को यह पता लगाने की अनुमति मिलेगी कि उनकी पेंटियम चिप प्रभावित हुई थी या नहीं।

गणना का सही मूल्य है:

जब प्रोसेसर द्वारा उपयोग किए जाने वाले हेक्साडेसिमल मान में परिवर्तित किया जाता है, तो 4,195,835 = 0x4005FB और 3,145,727 = 0x2FFFFF। 0x4005FB में '5' 'खाली' सरणी कोशिकाओं तक पहुंच को ट्रिगर करता है। परिणामस्वरूप, त्रुटिपूर्ण पेंटियम प्रोसेसर द्वारा लौटाया गया मान चार अंकों पर या उससे अधिक गलत है:

खोज और प्रतिक्रिया
लिंचबर्ग कॉलेज में गणित के प्रोफेसर थॉमस नाइसली ने अभाज्य संख्या, जुड़वां अभाज्य, अभाज्य त्रिगुण और अभाज्य चौगुनी गणना करने के लिए कोड लिखा था। अपने कंप्यूटरों के समूह में पेंटियम प्रणाली जोड़ने के तुरंत बाद 13 जून, 1994 को गणनाओं में कुछ विसंगतियों को अच्छी तरह से देखा, लेकिन 19 अक्टूबर, 1994 तक अन्य कारकों (जैसे प्रोग्रामिंग त्रुटियों, मदरबोर्ड चिपसेट, आदि) को समाप्त करने में असमर्थ था। 24 अक्टूबर 1994 को, उन्होंने इंटेल को इस मुद्दे की सूचना दी। इंटेल कथित तौर पर जून 1994 तक इस मुद्दे से स्वतंत्र रूप से अवगत हो गया था, और इस बिंदु पर इसे ठीक करना शुरू कर दिया था, लेकिन सार्वजनिक रूप से किसी भी विवरण का खुलासा नहीं करना या प्रभावित सीपीयू को वापस बुलाना नहीं चुना।

30 अक्टूबर 1994 को, नाइसली ने विभिन्न शैक्षणिक संपर्कों को बग का वर्णन करते हुए एक ईमेल भेजा, जिसमें इंटेल 486-DX4s, पेंटियम और  पेंटियम संगत प्रोसेसर पर दोष के परीक्षण की रिपोर्ट का अनुरोध किया गया था। बग को दूसरों द्वारा जल्दी से सत्यापित किया गया, और इसकी खबर  इंटरनेट पर तेजी से फैल गई। बग ने फ़्लोटिंग-पॉइंट डिवीजन जो सबसे अधिक बार उपयोग किया जाने वाला प्रभावित निर्देश के लिए  x86 निर्देश सूची से "पेंटियम एफडी IV बग" नाम प्राप्त किया।

यह कहानी पहली बार 7 नवंबर, 1994 को इलेक्ट्रॉनिक इंजीनियरिंग टाइम्स के एक लेख में इंटेल अलेक्जेंडर वोल्फ द्वारा "इंटेल फिक्सेस अ पेंटियम एफपीयू ग्लिच" छपी, और बाद में इसे सीएनएन द्वारा 22 नवंबर को प्रसारित एक खंड में उठाया गया था। न्यूयॉर्क टाइम्स और बोस्टन ग्लोब द्वारा भी इसकी सूचना दी गई थी, जो बाद में फ्रंट पेज बना रहा था।

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

इंटेल की प्रतिक्रिया से बढ़ते असंतोष के कारण कंपनी ने 20 दिसंबर को अनुरोध पर सभी दोषपूर्ण पेंटियम प्रोसेसर को बदलने की पेशकश की। 17 जनवरी, 1995 को, इंटेल ने आय के मुकाबले $475 मिलियन के पूर्व-कर प्रभार की घोषणा की, जो कि त्रुटिपूर्ण प्रोसेसर के प्रतिस्थापन से जुड़ी कुल लागत थी। यह में $720 मिलियन के बराबर है | पुनर्विक्रेताओं और ओईएम को रिकॉल कार्यक्रम में भाग लेने से रोकने के लिए इंटेल की आलोचना की गई, जिसके अंत-उपयोगकर्ताओं को स्वयं चिप्स को बदलने की आवश्यकता पड़ी। इसके समर्थन में इंटेल का अपने वेब पेज पर तर्क पोस्ट किए गए जिसका औचित्य यह था "यह निर्धारित करने का अंतिम-उपयोगकर्ता का व्यक्तिगत निर्णय है कि क्या यह दोष उनकी एप्लिकेशन सटीकता को प्रभावित कर रहा है।"

साइंस पत्रिका में 1995 का एक लेख कंप्यूटर बग की खोज में संख्या सिद्धांत की समस्याओं के मूल्य का वर्णन, उसकी गणितीय पृष्ठभूमि और ब्रून के स्थिरांक का इतिहास देता है, जिस समस्या पर निसली ने बग की खोज की थी, उस पर काम कर रहा था।

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

बग आने और चिपसेट वापस बुलाने के बाद, अर्धचालक उद्योग में हार्डवेयर फ्लोटिंग पॉइंट संचालन के औपचारिक सत्यापन के उपयोग में उल्लेखनीय वृद्धि हुई। बग की खोज से प्रेरित होकर, एसआरटी एल्गोरिथम पर लागू एक तकनीक जिसे वर्ड-लेवल मॉडल चेकिंग कहा जाता है, 1996 में विकसित की गई। इंटेल ने बाद के सीपीयू आर्किटेक्चर के विकास में औपचारिक सत्यापन का व्यापक रूप से उपयोग किया। पेंटियम 4 के विकास में, सांकेतिक प्रक्षेपवक्र मूल्यांकन और प्रमेय सिद्ध करने का उपयोग कई बगों को खोजने के लिए किया गया जो ऐसी समान घटना का कारण बन सकते थे यदि वे ज्ञात नहीं हो पाते। सत्यापन की प्राथमिक विधि के रूप में औपचारिक सत्यापन का उपयोग करने वाला पहला इंटेल माइक्रोआर्किटेक्चर 2008 में विकसित नेहलेम था।

प्रभावित मॉडल
एफडी IV बग D1 से पहले के स्टेपिंग स्तरों में 60 और 66 मेगाहर्ट्ज पेंटियम P5 800 और B5 से पहले के चरणों में 75, 90 और 100 मेगाहर्ट्ज पेंटियम P54C 600 को प्रभावित करता है। 120 मेगाहर्ट्ज P54C और P54CQS सीपीयू अप्रभावित हैं।

सॉफ्टवेयर पैच
निर्माताओं द्वारा बग के समाधान के लिए विभिन्न सॉफ्टवेयर पैच तैयार किए गए। आईईईई कम्प्यूटेशनल साइंस एंड इंजीनियरिंग में एक पेपर में उल्लिखित विशिष्ट एल्गोरिदम, उन विभाजकों की जांच करता है जो प्रोग्राम करने योग्य तर्क सरणी कोशिकाओं तक पहुंच को ट्रिगर कर सकते हैं जिनमें गलती से शून्य होता है, और यदि ऐसा पाया जाता है, तो अंश और हर दोनों को 15/16 से गुणा कर देते हैं। यह उन्हें 'बग्गी' रेंज से बाहर ले जाता है। यह फिक्स, गति के साथ औसत दर्जे का समझौता करता है - यह प्रोग्राम के लिए सबसे खराब स्थिति होती है क्योंकि इस मामले में वह कुछ भी नहीं कर रहा है बल्कि खराब विभाजक के साथ एफडी IV संचालन चल रहा है और रनिंग टाइम दुगना हो जाता है क्योंकि प्रत्येक एफडी IV, 40 के बजाय लगभग 80 घड़ी चक्र लेता है। अधिक यादृच्छिक भाजक के साथ प्रति एफडी IV औसत समय लगभग 50 घड़ी चक्र था, यानी भाजक की जांच के लिए 10 चक्र जोड़े गए: 1024 यादृच्छिक भाजक में से केवल 5 ही स्केलिंग समाधान को ट्रिगर करेंगे। चूंकि अधिकांश कार्यक्रमों में एफडी IV एक दुर्लभ ऑपरेशन है, इसलिए स्थापित समाधान के साथ सामान्य सुस्ती आमतौर पर एक प्रतिशत या उससे कम थी।

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

विंडोज ने विंडोज एक्सपी तक माइक्रोसॉफ्ट विंडोज के संस्करणों में ऑपरेटिंग सिस्टम स्तर के समाधान की पेशकश की। बग की उपस्थिति की जांच और एफपीयू को अक्षम करने के लिए ऑपरेटिंग सिस्टम के साथ उपयोगिताओं को शामिल किया गया।

यह भी देखें

 * पेंटियम F00F बग
 * एमओएस टेक्नोलॉजी 6502 बग और विचित्रताएं
 * फ्लोटिंग पॉइंट ऑपरेशंस में शुद्धता की समस्या
 * मेवरिकक्रंच

बाहरी संबंध

 * Personal website of Dr. Nicely, who discovered the bug
 * A page with precise information, also about the cause
 * ZIP-file containing more details (See ZIP file format for details on the file)
 * Archive of Intel's official information page about the bug
 * Unopened Intel CPU box from the एफडी IV replacement program