Помилка Pentium FDIV

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Помилка Pentium FDIV — це помилка в модулі операцій з рухомою комою в оригінальних процесорах Pentium, що випускалися фірмою Intel в 1994 році. Помилка полягала в тому, що при виконанні ділення над числами з рухомою комою за допомогою команди процесора FDIV в деяких випадках результат міг бути некоректним.

Дана помилка була вперше виявлена і опублікована професором Лінчбурзького коледжу[en] Томасом Найслі в жовтні 1994 року[1].

Згідно із заявою Intel, причиною проблеми були неточності в таблиці пошуку, що використовувалась при операції ділення[2].

Як виявилося, Intel знали про цю проблему, але мовчали. До того ж в Intel вважали, що, оскільки цей дефект істотний лише для вузького кола користувачів (математиків та інших вчених), то користувачі, які хочуть замінити процесор, повинні звернутися в компанію і довести, що саме їм ця заміна необхідна.

Прагнення виробника приховати проблему і реакція на її виявлення викликали невдоволення споживачів і значну критику в ЗМІ, зокрема жорсткий репортаж CNN. Як наслідок, компанія змінила позицію і оголосила, що буде вільно обмінювати дефектні процесори всім бажаючим. Енді Гроув публічно просив вибачення. Історія коштувала Intel більше половини прибутку за останній квартал 1994 р. — $475 млн[3].

Відтворення помилки[ред. | ред. код]

Відтворити помилку можна самостійно в застосунках, які використовують математичний співпроцесор при роботі з числами з рухомою комою.

4195835,0 / 3145727,0 = 1,333 820 449 136 241 002 (правильне значення)

4195835,0 / 3145727,0 = 1,333 739 068 902 037 589 (помилкове значення, що повертається процесором, що містить дефект)

Більш наочний спосіб відтворення:

4195835 × 3145727 / 3145727 = 4195835 (при множенні і діленні на одне і те ж число отримуємо вихідне число)

4195835 × 3145727 / 3145727 = 4195579 (помилкове значення, що повертається процесором, що містить дефект)

Методи захисту[ред. | ред. код]

  • У компіляторі Delphi передбачена опція Pentium Safe FDIV, що змушує компілятор замість використання в коді програми асемблерної команди FDIV застосовувати виклик спеціальної процедури, яка при першому виклику виконує перевірку наявності помилки, і, залежно від результату, при цьому і наступних викликах виконує або простий FDIV, або корекцію результату.
  • У компіляторі Visual Basic передбачена перевірка наявності даної помилки, яка включена за замовчуванням. Однак вона відключається спеціальною опцією компілятора — Remove Safe Pentium™ FDIV Checks. У разі її включення компілятор не генерує додаткового коду і в деяких випадках швидкість обчислень зростає.

Посилання[ред. | ред. код]

  1. "Pentium FDIV flaw FAQ. Professor Thomas Nicely. Архів оригіналу за 15 березня 2012. Процитовано 24 квітня 2018.
  2. FDIV Replacement Program: Description of the Flaw. Intel. 9 липня 2004. Solution ID CS-013007. Архів оригіналу за 18 грудня 2006. Процитовано 19 грудня 2006.
  3. Тим Джексон, 2013, с. 10.

Література[ред. | ред. код]

  • Тім Джексон. Inside Intel. История корпорации, совершившей технологическую революцию XX века = Inside Intel. The unauthorized history of the world’s most successful chip company. — Альпина Паблишер, 2013. — ISBN 978-5-9614-1956-6.