stringtranslate.com

Ошибка Pentium FDIV

66 МГц Intel Pentium (sSpec=SX837) с ошибкой 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 Calculator , позволит пользователям узнать, затронут ли их чип Pentium. [7]

Правильное значение расчета:

При преобразовании в шестнадцатеричное значение, используемое процессором, 4 195 835 = 0x4005FB и 3 145 727 = 0x2FFFFF. «5» в 0x4005FB запускает доступ к «пустым» ячейкам массива. В результате значение, возвращаемое неисправным процессором Pentium, неверно на уровне четырех цифр или более: [8]

что на самом деле является значением .

Открытие и ответ

Томас Найсли, профессор математики в колледже Линчберга, написал код для перечисления простых чисел , простых чисел-близнецов , простых троек и простых четверок . Найсли заметил некоторые несоответствия в вычислениях 13 июня 1994 года, вскоре после добавления системы Pentium к своей группе компьютеров, но не смог устранить другие факторы (такие как ошибки программирования, чипсеты материнской платы и т. д.) до 19 октября 1994 года. [1] 24 октября 1994 года он сообщил о проблеме в Intel. [9] Как сообщается, Intel самостоятельно узнала о проблеме к июню 1994 года и начала ее исправлять в этот момент, но решила не раскрывать публично никаких подробностей или не отзывать затронутые процессоры. [10]

30 октября 1994 года Nicely отправил электронное письмо с описанием ошибки различным академическим контактам, запрашивая отчеты о тестировании уязвимости на 486-DX4 , Pentium и клонах Pentium . [9] Ошибка была быстро проверена другими, и новости о ней быстро распространились в Интернете . Ошибка получила название «ошибка Pentium FDIV» из- за мнемоники языка ассемблера x86 для деления с плавающей точкой, наиболее часто используемой затронутой инструкции. [9]

История впервые появилась в прессе 7 ноября 1994 года в статье в Electronic Engineering Times под названием «Intel исправляет ошибку Pentium FPU» Александра Вулфа [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 привело к тому, что компания предложила заменить все неисправные процессоры Pentium по запросу 20 декабря. [15] 17 января 1995 года Intel объявила о предналоговом сборе в размере 475 миллионов долларов из прибыли, якобы общей стоимости, связанной с заменой неисправных процессоров. [9] Это эквивалентно 868 миллионам долларов в 2023 году. [16] Intel подверглась критике за то, что запретила реселлерам и OEM-производителям участвовать в программе отзыва, требуя от конечных пользователей самостоятельной замены чипов. Обоснование Intel, опубликованное на ее веб-странице поддержки, состояло в том, что «это индивидуальное решение конечного пользователя определить, влияет ли недостаток на точность его приложения». [14]

Статья в журнале Science за 1995 год описывает значение задач теории чисел для обнаружения компьютерных ошибок и дает математическое обоснование и историю константы Бруна , проблемы, над которой работал Найсли, когда обнаружил ошибку. [17]

Ответ Intel на ошибку FDIV был процитирован как случай влияния проблемы на связи с общественностью , затмевающего практическое влияние этой проблемы на клиентов. [18] Хотя большинство пользователей вряд ли столкнутся с этой ошибкой в ​​своих повседневных вычислениях, первоначальная реакция компании не заменять чипы, если клиенты не могли гарантировать, что они затронуты, вызвала сопротивление со стороны активного меньшинства отраслевых экспертов. Последующая огласка пошатнула доверие потребителей к процессорам и привела к требованию действий даже со стороны людей, которых вряд ли коснулась эта проблема. Энди Гроув , генеральный директор Intel в то время, был процитирован в The Wall Street Journal : «Я думаю, что суть проблемы, которую мы упустили... заключалась в том, что мы предполагали, что говорим кому-то, о чем они должны или не должны беспокоиться, или что они должны или не должны делать». [4]

После ошибки и последующего отзыва, в полупроводниковой промышленности наблюдалось заметное увеличение использования формальной проверки операций с плавающей точкой оборудования. Под влиянием обнаружения ошибки в 1996 году была разработана методика, применимая к алгоритму SRT, называемая «проверка модели на уровне слов». [19] Intel продолжила широко использовать формальную проверку при разработке более поздних архитектур ЦП. При разработке Pentium 4 использовались символическая оценка траектории и доказательство теорем для поиска ряда ошибок, которые могли бы привести к аналогичному инциденту отзыва, если бы они остались незамеченными. [20] Первой микроархитектурой Intel, использовавшей формальную проверку в качестве основного метода проверки, была Nehalem , разработанная в 2008 году. [21]

Затронутые модели

Ошибка FDIV затрагивает 60 и 66 МГц Pentium P5 800 в степпингах до D1, а также 75, 90 и 100 МГц Pentium P54C 600 в степпингах до B5. Процессоры 120 МГц P54C и P54CQS не затрагиваются. [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]

Смотрите также

Ссылки

  1. ^ ab Edelman, Alan (1 января 1997 г.). «Математика ошибки деления Pentium» (PDF) . Обзор SIAM . 39 (1): 54–67. Bibcode :1997SIAMR..39...54E. doi :10.1137/S0036144595293959. Архивировано (PDF) из оригинала 14 августа 2024 г. . Получено 11 апреля 2021 г. .
  2. ^ ab "'Обсуждение и исправление ошибки Pentium FDIV' из архива блокнотов (2002)". notebookarchive.org . Wolfram Research, Inc . Получено 11 апреля 2021 г. .
  3. ^ ab Tom R. Halfhill (март 1995 г.). «Ошибка в таблице поиска привела к печально известной ошибке в последнем процессоре Intel». BYTE . №. Март 1995 г. Архивировано из оригинала 9 февраля 2006 г. Получено 19 декабря 2006 г.
  4. ^ abc Карлтон, Джим; Йодер, Стивен К. (21 декабря 1994 г.). «Компьютеры: скромный пирог: Intel заменит свои чипы Pentium». The Wall Street Journal (восточное издание). стр. B1.
  5. ^ "1994 - Annual Report". Intel. 20 июня 2020 г. Архивировано из оригинала 26 февраля 2017 г. Получено 20 июня 2020 г.
  6. ^ Sharangpani, HP; Barton, ML (30 ноября 1994 г.). Статистический анализ дефекта с плавающей точкой в ​​процессоре Pentium (1994) (PDF) (Отчет). Intel Corporation. Архивировано из оригинала (PDF) 19 марта 2022 г. . Получено 11 апреля 2021 г. .
  7. ^ "Pentium FDIV bug – a Picture". Институт политических и социальных исследований Канзасского университета. 30 ноября 1994 г. Архивировано из оригинала 3 ноября 2021 г. Получено 3 ноября 2010 г.
  8. ^ ab Coe, T.; Mathisen, T.; Moler, C.; Pratt, V. (1995). "Вычислительные аспекты дела Pentium" (PDF) . IEEE Computational Science and Engineering . 2 (1): 18–30. doi :10.1109/99.372929. Архивировано (PDF) из оригинала 23 июня 2021 г. . Получено 13 апреля 2021 г. .
  9. ^ abcd Nicely, Thomas (19 августа 2011 г.). "Часто задаваемые вопросы о дефекте Pentium FDIV". trnicely.net . Архивировано из оригинала 18 июня 2019 г. . Получено 18 июня 2019 г. .
  10. ^ ab Markoff, John (24 ноября 1994 г.). "НОВОСТИ КОМПАНИИ; Дефект подрывает точность чипов Pentium". The New York Times . Архивировано из оригинала 14 августа 2024 г. Получено 11 апреля 2021 г.
  11. Alexander Wolfe (9 ноября 1994 г.). «Intel исправляет ошибку Pentium FPU». Electronic Engineering Times . Архивировано из оригинала 18 декабря 2010 г. Получено 19 января 2011 г.
  12. ^ Moler, Cleve (зима 1995 г.). "A Tale of Two Numbers" (PDF) . MATLAB News and Notes . MathWorks. Архивировано (PDF) из оригинала 14 августа 2024 г. . Получено 21 апреля 2021 г. .
  13. ^ "BTD12: The Programming Principles of Id Software". TNG Technology Consulting GmbH. 6 августа 2019 г. Архивировано из оригинала 25 августа 2023 г. Получено 17 июля 2023 г.
  14. ^ ab Yeraswork, Zewde (30 марта 2011 г.). «Извлеченные уроки: недостатки Pentium помогли Intel отозвать чипсет Sandy Bridge». CRN . Архивировано из оригинала 14 августа 2024 г. Получено 11 апреля 2021 г.
  15. ^ "Intel принимает политику замены по запросу процессоров Pentium с дефектом плавающей запятой; возьмет плату за четвертый квартал из прибыли". Business Wire. 20 декабря 1994 г. Архивировано из оригинала 10 июля 2012 г. Получено 24 декабря 2006 г.
  16. ^ Джонстон, Луис; Уильямсон, Сэмюэл Х. (2023). «Каков был ВВП США тогда?». MeasuringWorth . Получено 30 ноября 2023 г. .Данные дефлятора валового внутреннего продукта США соответствуют серии MeasuringWorth .
  17. ^ Cipra, Barry Arthur (13 января 1995 г.). «Как теория чисел взяла верх над чипом Pentium». Science . 267 (5195): 175. Bibcode :1995Sci...267..175C. doi :10.1126/science.267.5195.175. PMID  17791336. S2CID  19898103.
  18. Прайс, Д. (апрель 1995 г.). «Извлеченные уроки недостатков Pentium FDIV». IEEE Micro . 15 (2): 86–88. doi :10.1109/40.372360.
  19. ^ Кларк, Э. М.; Хайра, М.; Чжао, Х. (1996). "Проверка модели на уровне слов — избежание ошибки Pentium FDIV". Труды 33-й ежегодной конференции по автоматизации проектирования — DAC '96 . С. 645–648. doi :10.1145/240518.240640. ISBN 0897917790. S2CID  2500033. Архивировано из оригинала 29 апреля 2021 г. . Получено 29 апреля 2021 г. .
  20. ^ O'Leary, J. (2004). "Формальная верификация в проектировании процессоров Intel". Труды. Вторая международная конференция ACM и IEEE по формальным методам и моделям для совместного проектирования, 2004. MEMOCODE '04 . стр. 152. doi :10.1109/MEMCOD.2004.1459841. ISBN 0-7803-8509-8. Архивировано из оригинала 29 апреля 2021 г. . Получено 29 апреля 2021 г. .
  21. ^ Кайвола, Рупе; Гугал, Раджниш; Нарасимхан, Нарен; Телфер, Эмбер; Уиттемор, Джесси; Пандав, Судхиндра; Слободова, Анна; Тейлор, Кристофер; Фролов Владимир; Рибер, Эрик; Наик, Армаган (2009). «Замена тестирования формальной проверкой в ​​системе проверки процессора Intel® Core™ i7». Компьютерная проверка . 5643 : 414–429. дои : 10.1007/978-3-642-02658-4_32 .
  22. ^ "P5 (586) Процессоры пятого поколения | Типы и характеристики микропроцессоров | InformIT". www.informit.com . 8 июня 2001 г. Архивировано из оригинала 13 апреля 2021 г. Получено 13 апреля 2021 г. .
  23. ^ "Программа замены FDIV: часто задаваемые вопросы". Intel . 20 марта 2009 г. Идентификатор решения CS-012748. Архивировано из оригинала 11 мая 2009 г. Получено 10 ноября 2009 г.
  24. ^ Слоб, Ари. «Устранение неполадок в Windows 95: как проверить неисправный математический сопроцессор». www.helpwithwindows.com . Архивировано из оригинала 14 августа 2024 г. . Получено 23 апреля 2019 г. .
  25. ^ "Pentnt". Microsoft TechNet . Microsoft . 11 сентября 2009 г. Архивировано из оригинала 3 февраля 2018 г. Получено 23 апреля 2019 г.

Внешние ссылки