Ошибка Pentium FDIV
Ошибка Pentium FDIV — это аппаратная ошибка, затрагивающая модуль с плавающей запятой (FPU) ранних процессоров Intel Pentium . Из-за ошибки процессор возвращал неверные двоичные результаты с плавающей запятой при делении определенных пар чисел высокой точности . Ошибка была обнаружена в 1994 году Томасом Найсли, профессором математики Линчбергского колледжа . [1] Отсутствие значений в справочной таблице, используемой алгоритмом деления с плавающей запятой FPU, приводило к небольшим ошибкам в вычислениях. Хотя в большинстве случаев эти ошибки возникают редко и приводят к небольшим отклонениям от правильных выходных значений, при определенных обстоятельствах ошибки могут возникать часто и приводить к более значительным отклонениям. [2]
Серьезность ошибки FDIV обсуждается. Хотя большинство пользователей редко встречаются ( по оценкам журнала Byte , 1 из 9 миллиардов операций деления с плавающей запятой со случайными параметрами приводит к неточным результатам), [3] И этот недостаток, и первоначальный подход Intel к этому вопросу подверглись резкой критике со стороны технического сообщества.
В декабре 1994 года Intel отозвала дефектные процессоры, что стало первым полным отзывом компьютерного чипа. [4] В своем годовом отчете за 1994 год компания Intel заявила, что понесла «475 миллионов долларов до уплаты налогов… для возмещения стоимости замены и списания этих микропроцессоров». [5]
Описание
[ редактировать ]Чтобы повысить скорость вычислений деления с плавающей запятой на чипе Pentium по сравнению с 486DX , Intel решила заменить алгоритм деления сдвига и вычитания алгоритмом Суини, Робертсона и Точера (SRT). Алгоритм SRT может генерировать два бита результата деления за такт , тогда как алгоритм 486 может генерировать только один. Он реализован с помощью программируемой логической матрицы с 2048 ячейками, из которых 1066 ячеек должны были быть заполнены одним из пяти значений: −2, −1, 0, +1, +2 . При компиляции исходного массива для Pentium пять значений были неправильно отправлены на оборудование, которое врезает массивы в чипы – таким образом, пять ячеек массива содержали ноль, хотя они должны были содержать +2. [6]
В результате вычисления, основанные на этих пяти ячейках, приобретают ошибки; эти ошибки могут накапливаться неоднократно из-за рекурсивного характера алгоритма SRT. В патологических случаях ошибка может достигать четвертой значащей цифры результата, хотя это бывает редко. Ошибка обычно ограничивается девятой или десятой значащей цифрой. [3]
Только определенные комбинации числителя и знаменателя вызывают ошибку. Один из широко известных примеров — деление 4 195 835 на 3 145 727. Выполнение этого расчета в любом программном обеспечении, использующем сопроцессор с плавающей запятой, например в калькуляторе Windows , позволит пользователям узнать, пострадал ли их процессор Pentium. [7]
Правильная стоимость расчета:
При преобразовании в шестнадцатеричное значение, используемое процессором, 4 195 835 = 0x4005FB и 3 145 727 = 0x2FFFFF. «5» в 0x4005FB запускает доступ к «пустым» ячейкам массива. В результате значение, возвращаемое неисправным процессором Pentium, является неверным и содержит не более четырех цифр: [8]
что на самом деле является ценностью 4,195,579 / 3,145,727 = 4,195,835 - 256 / 3,145,727 .
Открытие и ответ
[ редактировать ]Томас Найсли, профессор математики в Линчбергском колледже, написал программу для подсчета простых чисел , простых чисел-близнецов , троек простых чисел и четверок простых чисел . Найсли заметил некоторые несоответствия в расчетах 13 июня 1994 года, вскоре после добавления системы Pentium к своей группе компьютеров, но не смог устранить другие факторы (такие как ошибки программирования, наборы микросхем материнской платы и т. д.) до 19 октября 1994 года. [1] 24 октября 1994 г. он сообщил о проблеме в Intel. [9] Сообщается, что Intel самостоятельно узнала об этой проблеме к июню 1994 года и начала ее исправлять, но предпочла не раскрывать публично какие-либо подробности и не отзывать затронутые процессоры. [10]
30 октября 1994 года Найсли разослал электронное письмо с описанием ошибки различным академическим контактам, запрашивая отчеты о тестировании уязвимости на 486-DX4 , Pentium и клонах Pentium . [9] Ошибка была быстро проверена другими, и новости о ней быстро распространились в Интернете . Ошибка получила название «ошибка Pentium FDIV» из-за мнемоники языка ассемблера x86 для деления с плавающей запятой, наиболее часто используемой инструкции. [9]
Эта история впервые появилась в прессе 7 ноября 1994 года в статье Александра Вулфа «Intel исправляет сбой FPU Pentium» в журнале Electronic Engineering Times . [11] и впоследствии был подхвачен CNN в сюжете, вышедшем в эфир 22 ноября. Об этом также сообщили New York Times и Boston Globe , попав на первую полосу последней. [10] [12]
На этом этапе Intel признала наличие недостатка с плавающей запятой, но заявила, что он несерьезный и не повлияет на большинство пользователей. Intel предложила заменить процессоры пользователям, которые смогут доказать, что они пострадали. Однако, хотя большинство независимых оценок показали, что ошибка окажет очень ограниченное влияние на большинство пользователей, она вызвала значительную негативную реакцию в прессе на компанию. Во время выступления в 2019 году, размышляя о разработке Quake , Джон Ромеро описал, как часто и настойчиво может воспроизводиться эта ошибка, описывая поведение, которое Майкл Абраш часами отслеживал, что приводило к неожиданному появлению частей игрового уровня при просмотре с определенных ракурсов камеры. . [13] IBM приостановила продажу ПК с процессорами Intel, и цена акций Intel значительно снизилась. [14] Мотивы решения IBM были подвергнуты сомнению некоторыми представителями отрасли; В то время IBM производила процессоры PowerPC и потенциально могла извлечь выгоду из любого ущерба репутации Pentium или Intel как компании. Однако это решение привело к тому, что корпоративные покупатели оборудования для ПК потребовали замены существующих процессоров Pentium, и вскоре после этого другие производители ПК начали предлагать замену дефектных чипов Pentium «без вопросов». [4]
Растущее недовольство реакцией Intel привело к тому, что 20 декабря компания предложила заменить все дефектные процессоры Pentium по запросу. [15] 17 января 1995 года Intel объявила о взыскании с прибыли до уплаты налогов 475 миллионов долларов, якобы полной стоимости, связанной с заменой неисправных процессоров. [9] Это эквивалентно $868 миллионам в 2023 году. [16] Intel подверглась критике за то, что она запретила реселлерам и OEM-производителям участвовать в программе отзыва, требуя от конечных пользователей самостоятельно заменять чипы. Обоснование этого Intel, опубликованное на веб-странице поддержки, заключалось в том, что «конечный пользователь самостоятельно решает определить, влияет ли ошибка на точность его приложения». [14]
В статье 1995 года в журнале Science описывается значение задач теории чисел для обнаружения компьютерных ошибок, а также приводятся математические основы и история константы Бруна — проблемы, над которой Найсли работал, когда обнаружил ошибку. [17]
Реакция Intel на ошибку FDIV была названа примером того, как влияние проблемы на общественное мнение затмевает практическое влияние указанной проблемы на клиентов. [18] Хотя большинство пользователей вряд ли столкнутся с этим недостатком в повседневной работе, первоначальная реакция компании не заменять чипы, если клиенты не могут гарантировать, что они затронуты, вызвала сопротивление со стороны громкого меньшинства отраслевых экспертов. Последующая огласка подорвала доверие потребителей к процессорам и привела к требованию действий даже со стороны людей, которых эта проблема вряд ли затронула. Энди Гроув , генеральный директор Intel в то время, был процитирован в The Wall Street Journal : «Я думаю, что суть проблемы, которую мы упустили... заключалась в том, что мы осмелились сказать кому-то, о чем им следует или не следует беспокоиться, или следует или не следует делать». [4]
После ошибки и последующего отзыва заметно возросло использование формальной проверки в полупроводниковой промышленности аппаратных операций с плавающей запятой. После обнаружения ошибки в 1996 году был разработан метод, применимый к алгоритму SRT, под названием «проверка модели на уровне слова». [19] Intel продолжала широко использовать формальную проверку при разработке более поздних архитектур ЦП. При разработке 4 Pentium оценка символьной траектории и доказательство теорем использовались для обнаружения ряда ошибок, которые могли бы привести к аналогичному инциденту отзыва, если бы они остались незамеченными. [20] Первой микроархитектурой Intel, использовавшей формальную проверку в качестве основного метода проверки, была Nehalem , разработанная в 2008 году. [21]
Затронутые модели
[ редактировать ]Ошибка FDIV затрагивает процессоры Pentium P5 800 с тактовой частотой 60 и 66 МГц на уровнях степпинга до D1, а также Pentium P54C 600 с частотой 75, 90 и 100 МГц на уровнях степпинга до B5. Процессоры P54C и P54CQS с частотой 120 МГц не затронуты. [22] [23]
Программные исправления
[ редактировать ]различные исправления программного обеспечения Для устранения этой ошибки производители выпустили . Один конкретный алгоритм, изложенный в статье в IEEE Computational Science & Engineering , заключается в проверке наличия делителей, которые могут инициировать доступ к ячейкам программируемого логического массива, которые ошибочно содержат ноль, и, если они найдены, умножение числителя и знаменателя на 15/16. Это выводит их из диапазона «глючности». Это исправление влечет за собой измеримое снижение скорости - в худшем случае, если программа не выполняет ничего, кроме операций FDIV с неверными делителями, время работы удвоится, поскольку каждый FDIV займет около 80 вместо 40 тактов. При большем количестве случайных делителей среднее время на FDIV составляло примерно 50 тактов, т. е. для проверки делителя добавлялось 10 циклов: только 5 из 1024 случайных делителей запускали корректировку масштабирования. Поскольку FDIV — редкая операция в большинстве программ, нормальное замедление при установке исправления обычно составляло процент или меньше. [8]
Основной проблемой, с которой столкнулись компании-разработчики программного обеспечения, было внедрение исправлений в уже существующее программное обеспечение, большая часть которого опиралась на библиотеки, находящиеся вне их контроля. Некоторые компании, такие как Wolfram Research , решили напрямую исправлять машинный код существующих исполняемых файлов, чтобы заменить код операции FDIV недопустимой инструкцией. Затем это вызовет исключение, которое будет перехвачено обработчиком исключений (также исправленным). Отсюда можно выполнить произвольный код для обхода ошибки. [2]
Microsoft предлагала обходные пути на уровне операционной системы в версиях Windows до Windows XP. В состав операционной системы были включены утилиты для проверки наличия ошибки и отключения FPU в случае ее обнаружения. [24] [25]
См. также
[ редактировать ]- Ошибка Пентиума F00F
- MOS Technology 6502: ошибки и особенности
- Проблемы точности операций с плавающей запятой
- MaverickCrunch
Ссылки
[ редактировать ]- ^ Перейти обратно: а б Эдельман, Алан (1 января 1997 г.). «Математика ошибки подразделения Pentium» (PDF) . Обзор СИАМ . 39 (1): 54–67. Бибкод : 1997SIAMR..39...54E . дои : 10.1137/S0036144595293959 . Проверено 11 апреля 2021 г.
- ^ Перейти обратно: а б « Обсуждение и исправление ошибки Pentium FDIV из архива Notebook (2002)» . www.notebookarchive.org . Вольфрам Рисерч, Инк . Проверено 11 апреля 2021 г.
- ^ Перейти обратно: а б Том Р. Халфхилл (март 1995 г.). «Ошибка в таблице поиска привела к печально известной ошибке в новейшем процессоре Intel» . БАЙТ . № Март 1995. Архивировано из оригинала 9 февраля 2006 года . Проверено 19 декабря 2006 г.
- ^ Перейти обратно: а б с Карлтон, Джим; Йодер, Стивен К. (21 декабря 1994 г.). «Компьютеры: скромный пирог: Intel заменит чипы Pentium». The Wall Street Journal (восточное издание). п. Б1.
- ^ «1994 — Годовой отчет» . Интел. 20 июня 2020 года. Архивировано из оригинала 26 февраля 2017 года . Проверено 20 июня 2020 г.
- ^ Шарангпани, HP; Бартон, М.Л. (30 ноября 1994 г.). Статистический анализ ошибки с плавающей запятой в процессоре Pentium (1994) (PDF) (Отчет). Корпорация Интел. Архивировано из оригинала (PDF) 19 марта 2022 года . Проверено 11 апреля 2021 г.
- ^ «Ошибка Pentium FDIV – изображение» . Институт политики и социальных исследований Канзасского университета. 30 ноября 1994 года . Проверено 3 ноября 2010 г.
- ^ Перейти обратно: а б Коу, Т.; Матисен, Т.; Молер, К.; Пратт, В. (1995). «Вычислительные аспекты дела Pentium» (PDF) . IEEE Вычислительная наука и инженерия . 2 (1): 18–30. дои : 10.1109/99.372929 . Проверено 13 апреля 2021 г.
- ^ Перейти обратно: а б с д Прекрасно, Томас (19 августа 2011 г.). «Часто задаваемые вопросы по недостаткам Pentium FDIV» . trnicely.net . Архивировано из оригинала 18 июня 2019 года . Проверено 18 июня 2019 г.
- ^ Перейти обратно: а б Маркофф, Джон (24 ноября 1994 г.). «НОВОСТИ КОМПАНИИ; Недостаток снижает точность чипов Pentium» . Нью-Йорк Таймс . Проверено 11 апреля 2021 г.
- ^ Александр Вульф (9 ноября 1994 г.). «Intel исправляет сбой FPU Pentium» . Время электронной инженерии .
- ^ Молер, Клив (зима 1995 г.). «Повесть о двух числах» (PDF) . Новости и заметки MATLAB . Матворкс . Проверено 21 апреля 2021 г.
- ^ «BTD12: Принципы программирования id Software» . ТНГ Технолоджи Консалтинг ГмбХ. 6 августа 2019 г. . Проверено 17 июля 2023 г.
- ^ Перейти обратно: а б Ерасворк, Зевде (30 марта 2011 г.). «Извлеченные уроки: недостатки Pentium помогают Intel в отзыве чипсета Sandy Bridge» . КРН . Проверено 11 апреля 2021 г.
- ^ «Intel принимает политику замены по запросу процессоров Pentium с дефектом операций с плавающей запятой; возьмет на себя расходы за четвертый квартал в счет прибыли» . Деловой провод. 20 декабря 1994 года. Архивировано из оригинала 10 июля 2012 года . Проверено 24 декабря 2006 г.
- ^ Джонстон, Луи; Уильямсон, Сэмюэл Х. (2023). «Какой тогда был ВВП США?» . Измерительная ценность . Проверено 30 ноября 2023 г. США Показатели дефлятора валового внутреннего продукта соответствуют серии MeasuringWorth .
- ^ Ципра, Барри Артур (13 января 1995 г.). «Как теория чисел взяла верх над процессором Pentium». Наука . 267 (5195): 175. Бибкод : 1995Sci...267..175C . дои : 10.1126/science.267.5195.175 . ПМИД 17791336 . S2CID 19898103 .
- ^ Прайс, Д. (апрель 1995 г.). «Извлечены уроки из недостатков Pentium FDIV». IEEE микро . 15 (2): 86–88. дои : 10.1109/40.372360 .
- ^ Кларк, EM; Хайра, М.; Чжао, X. (1996). «Проверка модели на уровне слова — избежание ошибки Pentium FDIV» . Материалы 33-й ежегодной конференции по автоматизации проектирования - DAC '96 . стр. 645–648. дои : 10.1145/240518.240640 . ISBN 0897917790 . S2CID 2500033 . Проверено 29 апреля 2021 г.
- ^ О'Лири, Дж. (2004). «Формальная проверка проектирования процессоров Intel» . Слушания. Вторая международная конференция ACM и IEEE по формальным методам и моделям совместного проектирования, 2004 г. MEMOCODE '04 . п. 152. дои : 10.1109/MEMCOD.2004.1459841 . ISBN 0-7803-8509-8 . Проверено 29 апреля 2021 г.
- ^ Кайвола, Рупе; Гугал, Раджниш; Нарасимхан, Нарен; Телфер, Эмбер; Уиттемор, Джесси; Пандав, Судхиндра; Слободова, Анна; Тейлор, Кристофер; Фролов Владимир; Рибер, Эрик; Наик, Армаган (2009). «Замена тестирования формальной проверкой в системе проверки процессора Intel® Core™ i7» . Компьютерная проверка . 5643 : 414–429. дои : 10.1007/978-3-642-02658-4_32 .
- ^ «Процессоры пятого поколения P5 (586) | Типы и характеристики микропроцессоров | ИнформИТ» . www.informit.com . 8 июня 2001 года . Проверено 13 апреля 2021 г.
- ^ «Программа замены FDIV: Часто задаваемые вопросы» . Интел . 20 марта 2009 г. Идентификатор решения CS-012748. Архивировано из оригинала 11 мая 2009 года . Проверено 10 ноября 2009 г.
- ^ Слоб, Ари. «Устранение неполадок Windows 95: как проверить неисправный математический сопроцессор» . www.helpwithwindows.com . Проверено 23 апреля 2019 г.
- ^ «Пентнт» . Microsoft TechNet . Майкрософт . 11 сентября 2009 года . Проверено 23 апреля 2019 г.
Внешние ссылки
[ редактировать ]- Персональный сайт доктора Найсли, обнаружившего ошибку
- Страница с точной информацией, в том числе о причине
- ZIP-файл, содержащий более подробную информацию ( см. в формате ZIP-файла ) подробную информацию о файле
- Архив официальной информационной страницы Intel об ошибке
- Неоткрытая коробка процессора Intel из программы замены FDIV