باگ پنتیوم اف‌دی‌آی‌وی

چپ|بندانگشتی| اینتل پنتیوم ۶۶ مگاهرتزی (sSpec=SX837) با باگ اف‌دی‌آی‌وی
**باگ پنتیوم اف‌دی‌آی‌وی**  یک باگ سخت‌افزاری می‌باشد که بر واحد ممیز شناور (FPU) در پردازنده‌های اولیه اینتل پنتیوم تأثیر می‌گذارد. بخاطر این باگ، پردازنده ممکن است هنگام تقسیم برخی از جفت‌های خاص اعدادِ با دقت بالا، نتایج ممیز شناورِ باینری اشتباهی برگرداند. این باگ در سال ۱۹۹۴ توسط توماس آر نایسلی، پروفسوری در کالج Lynchburg، کشف شد.

مقادیر ازدست‌رفته در جدول جست‌وجوی مورد استفاده توسط الگوریتم تقسیم ممیز شناور، باعث محاسبه اشتباهات کوچکی شد. با اینکه این خطاها در اکثر موارد مورد استفاده به‌ندرت رخ داده و باعث انحرافاتی در رسیدن به خروجی درست می‌شوند، در شرایط خاص امکان رخ دادنِ مکرر آن‌ها وجود داشته و می‌توانند باعث انحرافات چشم‌گیرتری شوند.

شدت باگ اف‌دی‌آی‌وی بحث‌برانگیز است. با اینکه اکثر کاربران به‌ندرت با این باگ مواجه می‌شدند (طبق تخمین مجله *[[Byte|بایت]]*، امکان بروز نتایج اشتباه، در تقسیمات ممیز شناور با پارامترهای رندوم، ۱ در ۹ بیلیون می‌باشد)، این مشکل و مدیریت اولیه اینتل در حل مشکل، مورد انتقاد شدیدِ جامعه تکنولوژی گرفت.

در دسامبر سال ۱۹۹۴، اینتل پردازنده‌های معیوب را جمع‌آوری کرد و این اولین باری بود که یک تراشه کامپیوتری به‌طور کامل جمع می‌شود. در ژانویه سال ۱۹۹۵، اینتل «هزینه پیش از مالیاتی به میزان ۴۷۵ میلیون دلار با درآمد یا ظاهرا کل هزینه جایگزینی پردازنده‌های معیوب» را اعلام کرد.

## شرح
به‌منظور بهبود سرعت محاسبات تقسیم ممیز شناور در تراشه پنتیوم روی 486DX، اینتل تصمیم به تعویضِ تقسیم شیفت و تفریق با الگوریتم سوینی، رابرتسون و توچر (SRT) گرفت.

الگوریتم SRT می‌تواند در هر سیکل ساعت، دو بیت از نتیجه تقسیم را تولید کند در حالی که الگوریتم ۴۸۶ توانایی تولید فقط یک بیت را داشت.

این الگوریتم با استفاده از یک آرایه منطقی قابل‌برنامه‌ریزی با ۲۰۴۸ درایه پیاده‌سازی شده که ۱۰۶۶ درایه آن باید با یکی از مقادیر زیر پر شده باشد:

-۲،۱، ۰، +۱، +۲.

وقتی آرایه اصلیِ پنتیوم کامپایل شد، پنج مقدار به‌طور درست در قطعه‌ای که آرایه را روی تراشه‌ها وارد می‌کرد بارگیری نشده بودند - به همین دلیل پنج خانه آرایه دارای مقدار صفر بودند در حالی که باید دارای مقدار +۲ می‌بودند.

در نتیجه محاسباتی که مربوط به این پنج خانه هستند، خطا می‌دهند؛ این خطاها به‌دلیل خاصیت بازگشتیِ الگوریتم SRT، می‌توانند به‌طور مکرر افزایش پیدا کنند.

در حالت‌های ناسالم، خطا می‌تواند به چهارمین رقم اصلیِ نتیجه برسد گرچه این اتفاق نادر است. معمولاً خطا به نُهمین یا دهمین رقم اصلی محدود می‌شود.

فقط ترکیب‌های خاصی از صورت و مخرج باگ را تحریک می‌کنند.

یکی از مثال‌هایی که زیاد گزارش شده، تقسیمِ ۴٬۱۹۵٬۸۳۵ بر ۳٬۱۴۵٬۷۲۷ می‌باشد.

اجرای این تقسیم در هر نرم‌افزاری که از کمک‌پردازنده ممیز شناور استفاده می‌کرد مانند ماشین‌حساب ویندوز، به کاربران امکان این را می‌داد که بفهمند تراشه پرنتیوم‌شان آسیب دیده‌است یا خیر.

مقدار صحیح محاسبه عبارت است از:

وقتی به مبنای ۱۶ که مورد استفاده پردازنده است برده شود، ۴٬۱۹۵٬۸۳۵ = 0x4005FB

و

۳٬۱۴۵٬۷۲۷ = 0x2FFFFF

عدد ۵ در 0x4005FB، باعث دسترسی به خانه‌های «خالی» آرایه می‌شود.

در نتیجه مقدار برگردانده‌شده توسط یک پردازنده پنتیوم معیوب، در چهار رقم یا بیشتر اشتباه است.
}}

## بررسی و پاسخ
Thomas Nicely، پروفسور ریاضیات در کالج Lynchburg، کدی برای شمارش اعداد اول، اعداد اول دوقلو، اعداد اول triplet و اعداد اول quadruplet نوشته‌است.

در تاریخ ۱۳ ژوئن سال ۱۹۹۴، او متوجه یک سری ناسازگاری در محاسبات شد، بعد مدت کوتاهی که به مجموعه کامپیوترهایش یک سیستم پنتیوم اضافه کرد و تا ۱۹ اکتبر سال ۱۹۹۴، قادر به برطرف کردن عوامل دیگری (مثل مشکلات برنامه‌نویسی، مجموعه تراشه‌های مادربورد و غیره) نبود. در ۲۴ اکتبر سال ۱۹۹۴، گزارش مشکل را به اینتل فرستاد. طبق گزارش‌ها، خودِ اینتل در ژوئن سال ۱۹۹۴ از مشکل باخبر شده بود و در این مرحله اقدام به حل مشکل کرده بود ولی تصمیم داشت جزییاتی به‌صورت عمومی منتشر نکند و سی‌پی‌یو معیوبی را فراخوانی نکند.

در تاریخ ۳۰ اکتبر سال ۱۹۹۴، ایمیلی برای استادان و محققان مختلف فرستاد که در آن مشکل را شرح داده و از آن‌ها درخواست کرده بود که عیب پنتیوم‌های 486-DX4s و پنتیوم‌های مشابه را گزارش دهند. آن‌ها به‌سرعت مشکل را بررسی و تأیید کردند و خبر آن سریعاً در اینترنت پیچید.

این مشکل از روی حرف اول کلمه **f**loating-point (ممیز شناور) و دو حرف اول کلمه **di**vision (تقسیم) در زبان اسمبلی X86، «باگ پنتیوم اف‌دی‌آی‌وی» نام گرفت. این عملیات تحت‌تاثیرترین عملیات مورداستفاده بود.

این قضیه اولین بار در ۷ نوامبر سال ۱۹۹۴، در مقاله‌ای در *الکترونیک انجنیر تایمز*، با مضمون «اینتل نقص فنی اف‌پی‌یو پنتیوم را برطرف می‌کند» توسط الکساندر ولف به‌طور عمومی مطرح شد، پس از آن در اخبارِ شبکه CNN در تاریخ ۲۲ نوامبر پخش شد. همچنین توسط روزنامه‌های *نیویورک تایمز* و *بوستون گلوب* گزارش شد و در روزنامه *بوستون گلوب* در صفحه اول قرار گرفت.

در این مرحله، اینتل عیب ممیز شناور را تأیید کرده بود ولی مدعی بود که مشکل جدی‌ای وجود ندارد و اکثر کاربران درگیرش نمی‌شوند. اینتل به کاربرانی که توانایی اثبات درگیر شدن‌شان با این مشکل را داشتند، پیشنهاد تعویض پردازنده داد. با این همه، هرچند که بیشتر آمار غیر وابسته به شرکت، به این موضوع پی بردند که باگ تأثیر کمی برای اکثر کاربران دارد، باز هم تأثیر منفی چشم‌گیری روی وجهه عمومی شرکت گذاشت.IBM، فروش کامپیوترهایی که دارای سی‌پی‌یوی اینتل بودند را متوقف کرد و سهام اینتل به‌شدت افت کرد.

برخی در این صنعت، جویای علت این تصمیم IBM شدند؛ IBM در آن زمان سی‌پی‌یوهای پاورپی‌سی را تولید کرد و از خسارت وارد شده بر اعتبار پنتیوم یا اینتل، سود زیادی دریافت کرد. با این حال، این تصمیم باعث شد که خریداران حقوقیِ قطعات کامپیوتر، درخواست تعویض سی‌پی‌یوهای موجود پنتیوم را بدهند و مدتی بعد، سایر تولیدکننده‌های کامپیوتر، شروع به پیشنهاد تعویض تراشه‌های معیوب پنتیوم، بدون این که سؤالی بپرسند، کردند.

رشد نارضایتی از پاسخ اینتل باعث شد این شرکت پیشنهاد تعویض همهٔ پردازنده‌های پنتیوم را در تاریخ ۲۰ دسامبر بدهد.

در ۱۷ ژانویه سال ۱۹۹۵، اینتل «هزینه پیش از مالیاتی به میزان ۴۷۵ میلیون دلار با درآمد یا ظاهرا کل هزینه جایگزینی پردازنده‌های معیوب» را اعلام کرد.

این مقدار معادل ۷۴۳ میلیون دلار در سال ۲۰۱۹ می‌باشد. اینتل به‌دلیل منع توزیع‌کننده‌ها و تولیدکنندگان تجهیزات اصلی (OEM) از شرکت در برنامه فراخوانی و مجبور شدن مصرف‌کنندگان به تعویض تراشه‌ها توسط خودشان، مورد انتقاد قرار گرفت. اینتل دلیل خود را برای این موضوع در صفحه وب پشتیبانی خود منتشر کرد و محتوا به این صورت بود «این تصمیم شخصی خود مصرف‌کننده است که مشخص کند آیا عیب روی دقت برنامه‌شان تاثیر می‌گذارد یا خیر.»

مقاله‌ای در سال ۱۹۹۵ در Science، در رابطه با اهمیتِ مشکلات نظریه اعداد در کشف باگ‌های کامپیوتری منتشر شد که این موضوع را تشریح می‌کند و پیشینه‌ای از ریاضیات و تاریخچه ثابت برون می‌دهد، مشکل به‌درستی در حال حل شدن بود که او باگ را کشف کرد.

پاسخ اینتل به باگ اف‌دی‌آی‌وی، به‌عنوان یک مورد از تأثیر روابط عمومی بر مشکلی که اثر کاربردی مشکل ذکر شده را تحت‌الشعاع قرار می‌دهد، شناخته شده بود. در حالی که اکثر کاربران با عیب گفته شده درمحاسبات روزانه برخورد نمی‌کردند، پاسخ اولیه شرکت در رابطه با تعویض نکردن تراشه‌ها تا وقتی که که مشتریان تضمین کنند تراشه‌ها معیوب هستند، باعث واکنش منفی گروهی از متخصصان این صنعت شد. بازخورد عمومی بعدی، اطمینان مصرف‌کنندگان به سی‌پی‌یوها را درهم شکست و باعث تقاضا برای اقدام حتی از طرف افرادی که امکان برخورد با مشکل را نداشتند، شد. در آن زمان از اندرو گروو، مدیر عامل اینتل، در ژورنال وال استریت با این سخنان نقل‌قول شده بود «من فکر می‌کنم که بخش اصلی از مشکل که فراموش کرده‌ایم این است که ما به خود اجازه می‌دهیم به دیگران بگوییم راجع به چه‌چیزی نگران باشند یا نباشند، چه‌کاری باید انجام دهند، چه‌کاری باید انجام ندهند.»

به‌دنبال مشکلات بعد از کشف باگ و فراخوانی پس از آن، افزایش قابل‌ملاحظه‌ای در استفاده از راستی‌آزمایی رسمیِ عملیات‌های ممیز شناور سخت‌افزاری در سراسر این صنعت نیمه‌فعال دیده شد. به‌خاطر کشف این باگ، تکنیکی به نام «وارسی مدل در سطح واژه»، مناسب الگوریتم SRT در سال ۱۹۹۶ توسعه یافت. اینتل به استفاده از راستی‌آزمایی رسمی در توسعه ساختار سی‌پی‌یوهای بعدی ادامه داد. در توسعه پنتیوم ۴، از ارزیابی مسیر نمادی و اثبات قضیه استفاده شد تا تعدادی باگ که تأثیر مشابهی با باگ ذکر شده داشتند، پیدا کنند. اولین ریزمعماری اینتل که از راستی‌آزمایی رسمی به‌عنوان روش اصلی راستی‌آزمایی استفاده می‌کرد، Nehalem بود که در سال ۲۰۰۸ توسعه یافت.

## مدل‌های تحت‌تاثیر
باگ اف‌دی‌آی‌وی، روی پنتیوم ۶۰ تا ۶۶ مگاهرتزی P5 800 در ورژن‌های قبلی تا D1 و پنتیوم ۷۵، ۹۰ و ۱۰۰ مگاهرتزی P54C 600 تا ورژن‌های قبلی تا B5 تأثیر می‌گذارد. سی‌پی‌یوهای ۱۲۰ مگاهرتزی P54C و P54CQS، از باگ تأثیر نمی‌گیرند.

## اصلاحات نرم‌افزاری
اصلاحات نرم‌افزاری مختلفی توسط سازندگان تولید شد تا حول محور باگ فعالیت کنند. الگوریتم خاصی که در یک مقاله در *IEEE Computational Science & Engineering* به چشم می‌آید، به‌منظور جست‌وجو برای صورت و کسرهایی‌ست که دسترسی به خانه‌های آرایه منطقی قابل‌برنامه‌ریزی که اشتباهاً حاوی عدد صفر هستند را تحریک می‌کنند و در صورت پیدا کردن، هر دو عدد را در ۱۵/۱۶ ضرب می‌کنند. این ضرب اعداد را از محدوده ارقامی که باعث ایجاد باگ می‌شوند، خارج می‌کند. هرچند انجام این ضرب باعث کاهش چشمگیر سرعت می‌شود - در برخی موارد زمان اجرای محاسبه را دو برابر می‌کند.

چالش اصلیِ شرکت‌های نرم‌افزاری، پیاده‌سازی اصلاحی در یک نرم‌افزار از قبل موجود، به‌خصوص اصلاحی که بر پایه کتابخانه‌های خارج از دسترسی آن‌ها بود. بعضی از شرکت‌ها مثل Wolfram Research، تصمیم به اصلاح مستقیمِ زبان ماشین موجود گرفتند تا کد عملیات اف‌دی‌آی‌وی را با دستورالعملی غیرمجاز تعویض کنند. این موضوع باعث ایجاد اکسپشنی می‌شود که یک اکسپشن هندلر که خود از طریق اصلاح ایجاد شده، آن را دریافت کند. از اینجا هر کد اختیاری‌ای می‌تواند حول محور باگ اجرا شود.

مایکروسافت محیط رفع مشکلی در سطح سیستم عامل در ورژن‌های ویندوز تا ویندوز XP ارائه کرد. سیستم عامل دارای برنامه‌های کمکی بود تا وجود باگ را بررسی کرده و در صورت پیدا شدن باگ، اف‌پی‌یو را غیرفعال سازد.

## جستارهای وابسته
* اشکال پنتیوم F00F
* اشکالات و ایرادات فناوری MOS 6502
* مشکلات دقت در عملیات ممیز شناور
* MaverickCrunch

## رفرنس‌ها و منابع

## پیوند به بیرون
* 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 FDIV replacement program
رده:اشکال‌های سخت‌افزاری
رده:علوم رایانه در ۱۹۹۴ (میلادی)
رده:معماری اکس۸۶