सीपीयू कितनी बार गणना में त्रुटियां करते हैं?


22

स्ट्रक्चर्ड प्रोग्रामिंग पर डेज्क्स्ट्रा के नोट्स में वे अमूर्त संस्थाओं के रूप में कंप्यूटर प्रोग्राम की उपयोगिता के बारे में बहुत कुछ बात करते हैं। एक कोरोलरी के रूप में, वह टिप्पणी करते हैं कि परीक्षण पर्याप्त नहीं है। उदाहरण के लिए, वह इस तथ्य को इंगित करता है कि x और y की संपूर्ण श्रेणियों में x और y के किसी भी बड़े मान के लिए गुणा फ़ंक्शन f (x, y) = x * y का परीक्षण करना असंभव होगा। मेरे सवाल से उसकी चिंता दूर हो जाती है। "घटिया हार्डवेयर" पर टिप्पणी। मुझे पता है कि निबंध 1970 के दशक में लिखा गया था जब कंप्यूटर हार्डवेयर कम विश्वसनीय था, लेकिन कंप्यूटर अभी भी सही नहीं हैं, इसलिए उन्हें कभी-कभी गणना गलतियां करनी चाहिए । क्या किसी को पता है कि ऐसा कितनी बार होता है या इस पर कोई आँकड़े हैं?



यहाँ पेंटियम FDIV बग पर विकिपीडिया पृष्ठ है , जिसका उल्लेख वर्तमान में दो मौजूदा उत्तरों द्वारा किया गया है।
कास्केबेल

हम बेसिक सीपीयू परिचालनों पर किसी भी प्रकार के बैकअप या त्रुटि जाँच के बिना प्राप्त करते हैं, इसलिए हम यादृच्छिक क्षणिक कम्प्यूटेशनल त्रुटियों की आवृत्ति के लिए एक ऊपरी बाध्यता का अनुमान लगा सकते हैं। अधिकांश सीपीयू निर्देशों में गणित शामिल है (मेमोरी संचालन के साथ-साथ गणना के लिए पतों की गणना में), और आधुनिक सीपीयू प्रति सेकंड अरबों ऑपरेशन कर रहे हैं, इसे 1e14 ऑपरेशन प्रति दिन कहते हैं। यदि 10 में से 1 गणित की त्रुटियों का कार्यक्रम (शायद कम अनुमान) पर एक स्पष्ट प्रभाव होगा, और हम दैनिक आधार पर ऐसी त्रुटियों को नहीं देखते हैं, ALU के लिए मूल त्रुटि दर <1e-13 होनी चाहिए, और मैं अनुमान होगा <1e-15।
रसेल बोरोगोव

@NickC: क्या आप समझ रहे हैं कि इस प्रश्न के बारे में कुछ भी व्यावहारिक नहीं है? तो आपको लगता है कि हार्डवेयर काम करता है या नहीं यह सवाल है? जब यह वास्तव में मायने रखता है कि क्या कार्यक्रम ठीक से काम करता है (केवल साइट पर लोगों के लिए सैद्धांतिक या बहुत उन्नत है?) हार्डवेयर के बारे में क्या है जहां एक उपयोगकर्ता साइड चैनल के माध्यम से जानकारी लीक होने के कारण अन्य उपयोगकर्ताओं से चाबियाँ चुरा सकता है? लानत है कि मैं टिप्पणियों के लिए एक डाउनवोट बटन था।
22 जनवरी को लॉन्गपोक

1
@Longpoke Me भी।
निकोल

जवाबों:


14

सीपीयू के डिजाइन में वास्तविक / वास्तविक त्रुटियां एक तरफ, मुझे लगता है कि आप इस एसओ प्रश्न: कॉस्मिक किरणों की तलाश कर रहे हैं क्या संभावना है कि वे एक कार्यक्रम को प्रभावित करेंगे । मुझे इससे उद्धरण नहीं मिल सकता क्योंकि एसओ फिर से यहाँ ( आह ) काम पर अवरुद्ध है ।

उपरोक्त की उपेक्षा करते हुए, मुझे याद है कि शुरुआती पेंटियम में कुछ FPU गणना कीड़े थे, इसलिए वे निश्चित रूप से अचूक नहीं हैं।

मेरे पास कोई मुश्किल सबूत नहीं है, लेकिन मेरी आंत बताती है कि आपको शायद कैश / रैम / डिस्क के बिट्स के बारे में अधिक चिंतित होना चाहिए और फिर भ्रष्ट होना, गणना गलत होना।


40
एसओ काम पर अवरुद्ध है? क्या आपकी कंपनी में कोई व्यक्ति सॉफ्टवेयर विकास में तोड़फोड़ करने की कोशिश कर रहा है?
निकोल

3
आप कहते हैं कि जैसे कि यह केवल एक ही व्यक्ति है और वे अभी तक सफल नहीं हुए हैं ...;)
डैन मैकग्राथ

9
मैं कॉर्पोरेट स्तर पर SFW साइटों को अवरुद्ध करने के औचित्य को कभी नहीं समझ सका। चूंकि खोज इंजन एक अत्यंत मूल्यवान उपकरण है, इसलिए आपको उन सूचनाओं को देखने में सक्षम होना चाहिए जो वे उपजते हैं।
टिम पोस्ट

@, इसे अनब्लॉक करें। आपको घर पर https-टनलिंग करने में सक्षम होना चाहिए।

4
सिस्टम को दरकिनार करते हुए पकड़ा जाना सिर्फ समाप्ति का कारण था। मैं अमेरिका चली गई और मुझे एक नई नौकरी मिल गई।
डैन मैकग्राथ

6

इन दिनों इस सवाल का जवाब देने में एक बड़ा मुद्दा यह है कि सीपीयू निर्माता एनडीए (गैर-व्यापार समझौते) में चिप के लिए इरेटा लपेटते हैं। इंटेल ऐसा करते हैं, आईआईआरसी।

कई कम गुप्त निर्माता डेटा शीट में सुधार जारी करते हैं, लेकिन आपको यह नहीं बताते हैं कि क्या बदला है, इसलिए जब तक आप सभी 300 पृष्ठों की तुलना नहीं करते, आपको बताने में मुश्किल होगा।

सीपीयू में बहुत सारे बुरे निर्देश दिए गए हैं, लिनक्स कर्नेल रिपोर्ट देखना जो इसे बूट पर पाता है, मध्यम दिलचस्प है।

बहुत संबंधित स्मृति त्रुटियों पर कागज Google है, वे आपके विचार से अधिक सामान्य हैं। "डीआरएएम एरर्स इन द वाइल्ड: ए लार्ज-स्केल फील्ड स्टडी" शूडर, पिनेहिरो और वेबर मूल रूप से 2009 में एसीएम सिगेट्रीक्स में प्रकाशित हुए। एसीएम फरवरी 2011 के संचार में पुनर्प्रकाशित

आपके प्रश्न के लिए इन सभी मेमोरी त्रुटियों का क्या मतलब है, ईसीसी मेमोरी के बिना, आपको वैसे भी गलत गणना मिलेगी।


5

वापस जब मैंने एक हार्डवेयर विक्रेता के लिए काम किया तो यह दावा किया गया कि कोई सीपीयू कभी नहीं बनाया गया था। और यह सिर्फ तर्क बग है। आमतौर पर निर्माता उनमें से ज्यादातर को ढूंढता है और या तो चिप को रिस्पांस करता है, या अपने आस-पास काम करने वाले BIOS सेटिंग्स को ढूंढता है। लेकिन इस तथ्य के अलावा कि कॉस्मिक किरणों की तरह सामान कभी-कभी मेमोरी में थोड़ा सा फ़्लिप करता है (और मेमोरी में आमतौर पर पैरिटी बिट्स या SECDED सर्किटरी होती है जो आपके बेकन को बचाने के लिए होती है), हमेशा एक सीमित मौका होता है कि थोड़ा गलत तरीके से पढ़ा जाएगा। ध्यान दें कि बिट्स वास्तविक तार्किक शून्य और वाले नहीं हैं, लेकिन शोरगुल जैसी चीजें जैसे वोल्टेज और धाराएं, और सिस्टम में परिमित शोर को देखते हुए हमेशा मौका होता है कि एक गलत बिट पढ़ा जाएगा। पुराने दिनों में (एक ऐप प्रोग्रामर के रूप में), मुझे कुछ HW बग्स मिले, जो खराब लॉजिक प्रकार के थे, और CPU Y में यूनिट X कभी-कभी मुझे खराब परिणाम प्रकार देता था, एक चिप किस्म को बदलने के लिए HW लोगों को प्राप्त करने का समय। वास्तविक सर्किट समय और उपयोग के साथ बहाव करते हैं, और यदि आपका विफल होने के लिए तैयार हो रहा है, तो आप बिट त्रुटियों को उठाना शुरू कर सकते हैं, खासकर यदि आप ओवरक्लॉकिंग कर रहे हैं, या अन्यथा अनुशंसित ऑपरेटिंग रेंज को पार कर सकते हैं।

यह सुपरकंप्यूटिंग के लिए एक वास्तविक मुद्दा है, जहां 1e18 या अधिक फ्लोटिंग पॉइंट ऑपरेशंस को शामिल करने वाले कंप्यूटर्स पर विचार किया जाता है।


3

GPU में गणना की त्रुटियों के बारे में निम्नलिखित सामग्री हो सकती है।

पर्याप्त समय को देखते हुए, इंटेल i7-3610QM और एक एनवीडिया GeForce GTX 660 एक ही निर्देश दिए गए एक दूसरे से असहमत होंगे। (कोडा 5.5, कंप्यूट_20, sm_20)

इसलिए, एक को यह निष्कर्ष निकालना बाकी है कि दोनों में से कोई एक त्रुटि करता है।

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

मैं आपको संख्याओं की एक छोटी संख्या की तुलना करने के लिए दूँगा (पहला नंबर हमेशा सीपीयू, दूसरा GPU है)

-1.4906010142701069
-1.4906010142701074

-161011564.55005690
-161011564.55005693

-0.13829959396003652
-0.13829959396003658

-16925804.720949132
-16925804.720949136

-36.506235247679221
-36.506235247679228

-3.3870884719850887
-3.3870884719850896

(ध्यान दें कि हर परिवर्तन क्रम में त्रुटि नहीं होती है)

जबकि अधिकतम त्रुटि लगभग नगण्य है (0.0000000000000401%)यह अभी भी मौजूद है, और संचयी त्रुटि में योगदान देता है।

अब यह त्रुटि आंतरिक पुस्तकालयों में से किसी एक के कार्यान्वयन में अंतर के कारण हो सकती है। दरअसल, यह देखने में ऐसा लगता है कि GPU राउंड डाउन या ट्रंककेट को पसंद करता है जहां CPU राउंड अप करता है। उत्सुकता से, यह केवल नकारात्मक संख्याओं पर होता है।

लेकिन मुद्दा यह है कि डिजिटल मशीनों पर भी समान परिणाम वापस करने के लिए समान निर्देशों की आवश्यकता नहीं है।

मुझे उम्मीद है कि इसने योगदान दिया।

EDIT को एक सिडनोट के रूप में: GPU अंकगणितीय त्रुटियों के मामले में, यह (ctrl + f "ECC मेमोरी सपोर्ट के साथ पहला GPU") भी रूचि का हो सकता है, हालांकि जरूरी नहीं कि उपरोक्त त्रुटियों के लिए प्रासंगिक हो।


फ्लोटिंग पॉइंट की गणना अलग-अलग हो सकती है, जहां वे संग्रहीत हैं। कुछ सीपीयू के आंतरिक FPU रजिस्टरों में रैम की तुलना में एक अलग लंबाई होती है, इसलिए यह निर्भर करता है कि यह ऑपरेटर्स को कहां से लोड करता है, यह अलग-अलग परिणामों में आ सकता है। अधिक जानकारी के लिए, मैं अस्थायी- point-gui.de की सलाह देता हूं । यह, हालांकि, एक गणना त्रुटि नहीं है - यह डिजाइन के द्वारा है कि फ्लोटिंग प्वाइंट अंकगणित कैसे काम कर रहे हैं।
फिलिप

2
एफपी गणित कैसे काम करता है, इसके बारे में अनभिज्ञ लोगों के लिए, केवल फिलिप की टिप्पणी को स्पष्ट करने के लिए, ये अंतर बहुत अच्छी तरह से सही हो सकते हैं (जैसा कि उनके अंतर सॉफ़्टवेयर बग या हार्डवेयर बग के कारण नहीं हैं)। सॉफ्टवेयर कार्यान्वयन या हार्डवेयर कार्यान्वयन के कारण अंतर होने की संभावना है। एक निर्धारित मशीन एप्सिलॉन की धारणा का उपयोग यह निर्धारित करने के लिए करना चाहिए कि क्या ये छोटी गाड़ी हैं: en.wikipedia.org/wiki/Machine_epsilon (अनिवार्य रूप से यह निरंतर वर्णन करता है कि एक एकल एफपी ऑपरेशन कितना सटीक होना चाहिए)
थॉमस ईजी

1

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


0

इस संदर्भ में विचार करने के लिए एक और "घटिया हार्डवेयर" मुद्दा यह है कि फ्लोटिंग पॉइंट हार्डवेयर स्वाभाविक रूप से "हानिपूर्ण" है: इसमें सीमित परिशुद्धता है, और पर्याप्त रूप से बड़ी संख्या में (मूल दिक्जस्ट्रा उद्धरण को वापस देखें) आप के बीच अंतर नहीं कर पाएंगे xऔर x + 1, या भी x + 1000000। आप "अनंत" सटीक फ़्लोटिंग पॉइंट लाइब्रेरी प्राप्त कर सकते हैं, लेकिन वे धीमी और अंततः अभी भी उपलब्ध स्मृति द्वारा सीमित हैं।

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


2
यह आवश्यक रूप से प्रभावोत्पादकता को प्रभावित नहीं करता है, हालांकि, जो प्रश्न का संदर्भ था। इन प्रकार के नुकसानों पर ऊपरी सीमाएं हो सकती हैं, और अक्सर, सैद्धांतिक रूप से सटीक रूप से जिम्मेदार होती हैं। दूसरे शब्दों में कार्यक्रम अभी भी त्रुटि के एक निश्चित पूर्व निर्धारित मार्जिन के भीतर काफी हद तक सही हो सकते हैं। कुछ क्षेत्रों में मैं उन लोगों पर विचार करूंगा, जिन्होंने इन मुद्दों को ध्यान में रखते हुए अपना काम ठीक से नहीं किया है!
एलियास वासिलेंको

(1 - .7) * 100 चाहिए 30 होना हालांकि जावास्क्रिप्ट वापस आ जाएगी 30.000000000000004जो है एक त्रुटि। चाहे वह हार्डवेयर या सॉफ्टवेयर हो, मैं व्यक्तिगत रूप से निश्चित नहीं हूं।
जॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.